Skip to content

Commit e77d03b

Browse files
committed
Более внятное сообщение об ошибке при проблемах в парсинге ответа
1 parent 08cb4d2 commit e77d03b

File tree

4 files changed

+37
-21
lines changed

4 files changed

+37
-21
lines changed

assets/template.html

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ <h2 class="checker_title" id="{{ .Checker.Name }}" onclick="Toggle('{{ $did }}')
112112
<ol>
113113
{{range .Messages}}
114114
{{$rid := uid}}
115-
<li id="{{$rid}}" class="{{ if not .Delta }} hidden {{ end }}">
116-
<div class="roundtrip_title {{ if .Delta}} failed {{ else }} success {{ end }}"
115+
<li id="{{$rid}}" class="{{ if not .Failed }} hidden {{ end }}">
116+
<div class="roundtrip_title {{ if .Failed }} failed {{ else }} success {{ end }}"
117117
onclick="Toggle('{{ $rid }}')">
118118
{{ .Url }}
119119
</div>
@@ -138,6 +138,16 @@ <h2 class="checker_title" id="{{ .Checker.Name }}" onclick="Toggle('{{ $did }}')
138138
{{if and .Example ( ne .Delta "" ) }}
139139
{{template "message" dict "Payload" .Example "Title" "Ожидался ответ вида" }}
140140
{{end}}
141+
142+
{{if ne .Error "" }}
143+
<div class="tabs">
144+
<div class="tab_title">Ошибка</div>
145+
<div style="clear:both"></div>
146+
<div class="tab_content">
147+
<pre><code class="nohighlight">{{.Error}}</code></pre>
148+
</div>
149+
</div>
150+
{{end}}
141151
</div>
142152
</li>
143153
{{end}}

generated/assets/assets.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/expected.go

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -107,16 +107,15 @@ func (self *Validator) validate(req *http.Request, res *http.Response) bool {
107107
Delta: difflib.RightOnly,
108108
Payload: fmt.Sprintf("Status: %d %s", res.StatusCode, http.StatusText(res.StatusCode)),
109109
},
110-
})
110+
}, nil)
111111
return false
112112
}
113-
delta := GetDelta(body, self.body, self.filter)
114-
if (res.StatusCode != self.code) || (delta != nil) {
115-
self.report.RoundTrip(req, res, self.Example(req), delta)
113+
delta, err := GetDelta(body, self.body, self.filter)
114+
if (res.StatusCode != self.code) || (delta != nil) || (err != nil) {
115+
self.report.RoundTrip(req, res, self.Example(req), delta, err)
116116
return false
117-
} else {
118-
self.report.RoundTrip(req, res, nil, nil)
119117
}
118+
self.report.RoundTrip(req, res, nil, nil, nil)
120119
}
121120
return true
122121
}
@@ -184,21 +183,21 @@ func Colorize(color int, message string) string {
184183
return fmt.Sprintf("\x1b[%dm%s\x1b[0m", color, message)
185184
}
186185

187-
func GetDelta(data []byte, expected interface{}, prepare Filter) *[]difflib.DiffRecord {
186+
func GetDelta(data []byte, expected interface{}, prepare Filter) (*[]difflib.DiffRecord, error) {
188187
if expected == nil {
189-
return nil
188+
return nil, nil
190189
}
191190
expected_obj := prepare(expected)
192191
var actual interface{} = reflect.New(reflect.TypeOf(expected).Elem()).Interface()
193192
if err := swag.ReadJSON(data, actual); err != nil {
194-
return GetDiff(string(data), ToJsonPretty(expected_obj))
193+
return nil, err
195194
}
196195

197196
actual_obj := prepare(actual)
198197
actual_json, _ := swag.WriteJSON(actual_obj)
199198
expected_json, _ := swag.WriteJSON(expected_obj)
200199
if bytes.Equal(expected_json, actual_json) {
201-
return nil
200+
return nil, nil
202201
}
203-
return GetDiff(ToJsonPretty(actual_obj), ToJsonPretty(expected_obj))
202+
return GetDiff(ToJsonPretty(actual_obj), ToJsonPretty(expected_obj)), nil
204203
}

tests/report.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,30 +46,35 @@ func (self *Report) Checkpoint(message string) bool {
4646
return true
4747
}
4848

49-
func (self *Report) RoundTrip(req *http.Request, res *http.Response, example *http.Response, delta *[]difflib.DiffRecord) {
49+
func (self *Report) RoundTrip(req *http.Request, res *http.Response, example *http.Response, delta *[]difflib.DiffRecord, err error) {
5050
if self.Result == Failed {
5151
return
5252
}
53-
if delta == nil && self.OnlyError {
53+
if delta == nil && err == nil && self.OnlyError {
5454
return
5555
}
5656
reportMessage := ReportMessage{
57+
Failed: delta != nil || err != nil,
5758
Url: req.URL.String(),
5859
Request: RequestInfo(req),
5960
Response: ResponseInfo(res),
6061
Example: ResponseInfo(example),
6162
}
62-
if delta != nil {
63-
reportMessage.Delta = template.HTML(DeltaToHtml(*delta))
64-
63+
if reportMessage.Failed {
6564
log.Warningf("Request:\n%s", reportMessage.Request.String())
6665
log.Warningf("Actual response:\n%s", reportMessage.Response.String())
6766
if example != nil {
6867
log.Warningf("Expected response like:\n%s", reportMessage.Example.String())
6968
}
70-
log.Errorf("Error:\n%s", DeltaToText(*delta))
71-
//debug.PrintStack()
7269
self.Result = Failed
70+
if delta != nil {
71+
reportMessage.Delta = template.HTML(DeltaToHtml(*delta))
72+
log.Errorf("Delta:\n%s", DeltaToText(*delta))
73+
}
74+
if err != nil {
75+
log.Errorf("Error:\n%s", err)
76+
reportMessage.Error = err.Error()
77+
}
7378
}
7479
// Добавляем сообщение в отчет
7580
if len(self.Pass) == 0 {
@@ -101,11 +106,13 @@ type ReportHttp struct {
101106
}
102107

103108
type ReportMessage struct {
109+
Failed bool
104110
Url string
105111
Delta template.HTML
106112
Request *ReportHttp
107113
Response *ReportHttp
108114
Example *ReportHttp
115+
Error string
109116
}
110117

111118
func DeltaToText(delta []difflib.DiffRecord) string {

0 commit comments

Comments
 (0)