Repository navigation
Expand file tree
/
Copy pathresource_error_test.go
More file actions
59 lines (51 loc) · 1.8 KB
/
Copy pathresource_error_test.go
File metadata and controls
59 lines (51 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package admin
import (
"database/sql/driver"
"errors"
"net/http"
"net/http/httptest"
"strings"
"testing"
"github.com/gin-gonic/gin"
)
func TestResourceWithoutDatabaseReturnsSafeServerError(t *testing.T) {
gin.SetMode(gin.TestMode)
engine := gin.New()
service := &WebServe{}
service.Resource(engine.Group("/api/v1"), new(Router))
recorder := httptest.NewRecorder()
request := httptest.NewRequest(http.MethodGet, "/api/v1/routers/list", nil)
engine.ServeHTTP(recorder, request)
if recorder.Code != http.StatusInternalServerError {
t.Fatalf("HTTP status = %d, want %d", recorder.Code, http.StatusInternalServerError)
}
response := decodeResponse(t, recorder)
if response.Code != http.StatusInternalServerError || response.Msg != databaseUnavailableMessage {
t.Fatalf("response = %#v, want safe database-unavailable error", response)
}
}
func TestResourceDatabaseQueryFailureReturnsSafeServerError(t *testing.T) {
queryErr := errors.New("private database query details")
db := openTestGorm(t, &testSQLDriver{
query: func(string) (driver.Rows, error) {
return nil, queryErr
},
})
gin.SetMode(gin.TestMode)
engine := gin.New()
service := &WebServe{db: db}
service.Resource(engine.Group("/api/v1"), new(Router))
recorder := httptest.NewRecorder()
request := httptest.NewRequest(http.MethodGet, "/api/v1/routers/list", nil)
engine.ServeHTTP(recorder, request)
if recorder.Code != http.StatusInternalServerError {
t.Fatalf("HTTP status = %d, want %d", recorder.Code, http.StatusInternalServerError)
}
response := decodeResponse(t, recorder)
if response.Msg != databaseQueryFailedMessage {
t.Fatalf("response message = %q, want %q", response.Msg, databaseQueryFailedMessage)
}
if strings.Contains(recorder.Body.String(), queryErr.Error()) {
t.Fatal("response leaked the database error")
}
}