АГ
Size: a a a
АГ
IB
АГ
IB
АГ
IB
IB
АГ
АГ
АГ
EK
IB
АГ
IB
EK
IB
АГ
IB
EK
IB
func TestSignUpHandler(t *testing.T) {
type mockBehavior func(s *mocks.Authorization, user structs.User)
testTable := []struct {
name string
inputBody string
inputUser structs.User
mockBehavior mockBehavior
expectedStatusCode int
expectedResponseBody string
}{
{
name: "CorrectUser",
inputBody: `{"username":"superName","password":"pass123","info":{"admin":"False","age":"12"}}`,
inputUser: structs.User{
Username: "superName",
Password: "pass123",
Info: map[string]interface{}{
"admin": "False",
"age": "12",
},
},
mockBehavior: func(s *mocks.Authorization, user structs.User) {
s.On("CreateUser", user).Return(1, nil)
},
expectedStatusCode: 200,
expectedResponseBody: `{"error":"nil","id":"1"}`,
},
{
name: "EmptyJSON",
inputBody: ``,
inputUser: structs.User{},
mockBehavior: func(s *mocks.Authorization, user structs.User) {
var err error
s.On("CreateUser", user).Return(-1, err)
},
expectedStatusCode: 400,
expectedResponseBody: `{"error":"Invalid JSON format","id":"-1"}`,
},
{
name: "SmallPassword",
inputBody: `{"username":"normalName","password":"small","info":{"admin":"False","age":"12"}}`,
inputUser: structs.User{
Username: "normalName",
Password: "small",
Info: map[string]interface{}{
"admin": "False",
"age": "12",
},
},
mockBehavior: func(s *mocks.Authorization, user structs.User) {
var err error
s.On("CreateUser", user).Return(-1, err)
},
expectedStatusCode: 400,
expectedResponseBody: `{"error":"Incorrect password: it must contain at least 8 characters (alphabet, numbers, !@#$%^\u0026*","id":"-1"}`,
},
}
for _, testCase := range testTable {
t.Run(testCase.name, func(t *testing.T) {
repo := new(mocks.Authorization)
services := &service.Service{Authorization: repo}
h := Handler{services}
testCase.mockBehavior(repo, testCase.inputUser)
handler := http.HandlerFunc(h.signUp)
r, err := http.NewRequest("POST", "/sign-up", strings.NewReader(testCase.inputBody))
if err != nil {
t.Error(err)
}
w := httptest.NewRecorder()
handler.ServeHTTP(w, r)
assert.Equal(t, testCase.expectedStatusCode, w.Code, "they should be equal")
assert.Equal(t, w.Body.String(), testCase.expectedResponseBody)
})
}
}