Size: a a a

2021 May 12

АГ

Алексей Гевондян... in Go-go!
у тебя ошибка же возвращается. 0 тогда возвращай
источник

IB

Igor Botukhov in Go-go!
согласен, но по сути ничего не меняется))) Буду возвращать -1 для наглядности что ли
источник

АГ

Алексей Гевондян... in Go-go!
еще ты в юзера пишешь данные самого себя в жсон.... крч так много вопросов так мало ответов, зачем и почему ты все это делаешь именно так
источник

IB

Igor Botukhov in Go-go!
Блин, получается тупик? Типо, невозможно протестировать код создав пост запрос и сравнив ответы?
источник

АГ

Алексей Гевондян... in Go-go!
а, понял, ты инфо сериализуешь... ну я чото не догоняю. у тебя инфо строка? зачем ты ее еще сериализуешь?
источник

IB

Igor Botukhov in Go-go!
угу, но это не столь важно. На все вопросы могу ответить, если нужно
источник

IB

Igor Botukhov in Go-go!
так, да, у меня инфо это структура гошная, которую я перевожу в строку чтобы в бд хранить
источник

АГ

Алексей Гевондян... in Go-go!
можно тестить апи. но это извне
источник

АГ

Алексей Гевондян... in Go-go!
ты в одно поле пишешь и структуру и строку, и хочешь сказать, что это работает? ты хоть пробовал скомпилировать код то свой?
источник

АГ

Алексей Гевондян... in Go-go!
в чем пишешь?
источник

EK

Eugene Koshevoy in Go-go!
Вам в сторону интеграционных тестов смотреть надо
источник

IB

Igor Botukhov in Go-go!
вот, да, мне и нужно извне. Я делаю это через testing и httptest
источник

АГ

Алексей Гевондян... in Go-go!
хз, я не могу по таким тестам подсказать, не делал пока таких...
источник

IB

Igor Botukhov in Go-go!
ох ох, вроде мне нужны юнит, да и они у меня работают! Могу скинуть...(
источник

EK

Eugene Koshevoy in Go-go!
Юнит отдельно тестируют разные сущности
источник

IB

Igor Botukhov in Go-go!
Да, код роботает, у меня там interface{}. Соглашусь, если вы скажите что это не верно...
источник

АГ

Алексей Гевондян... in Go-go!
))
источник

IB

Igor Botukhov in Go-go!
vscode
источник

EK

Eugene Koshevoy in Go-go!
если хотите юнитом - берете AuthService,  инджектите моки бд в него, и тестируете работу функции внутри
источник

IB

Igor Botukhov in Go-go!
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)
   })
 }
}
источник