package user import ( "net/http" "net/http/httptest" "testing" "github.com/gorilla/mux" "sismedika.com/sas/westone/types" "sismedika.com/sas/westone/utils" ) func TestUserServiceHandlers(t *testing.T) { userStore := &mockUserStore{} errorStore := &mockErrorLogStore{} handler := NewHandler(userStore, errorStore) t.Run("should fail if the user ID is not a number", func(t *testing.T) { req, err := http.NewRequest(http.MethodGet, "/user/abc", nil) if err != nil { t.Fatal(err) } rr := httptest.NewRecorder() router := mux.NewRouter() router.HandleFunc("/user/{userID}", handler.handleGetUser).Methods(http.MethodGet) router.ServeHTTP(rr, req) if rr.Code != http.StatusBadRequest { t.Errorf("expected status code %d, got %d", http.StatusBadRequest, rr.Code) } }) t.Run("should handle get user by ID", func(t *testing.T) { req, err := http.NewRequest(http.MethodGet, "/user/42", nil) if err != nil { t.Fatal(err) } rr := httptest.NewRecorder() router := mux.NewRouter() router.HandleFunc("/user/{userID}", handler.handleGetUser).Methods(http.MethodGet) router.ServeHTTP(rr, req) if rr.Code != http.StatusOK { t.Errorf("expected status code %d, got %d", http.StatusOK, rr.Code) } }) } type mockUserStore struct{} func (m *mockUserStore) UpdateUser(u types.User) error { return nil } func (m *mockUserStore) SignIn(email string, password string) (*types.User, error) { return &types.User{}, nil } func (m *mockUserStore) CreateUser(u types.User) error { return nil } func (m *mockUserStore) GetUserByID(id int) (*types.User, error) { return &types.User{}, nil } type mockErrorLogStore struct{} func (n *mockErrorLogStore) CreateErrorLog(errval utils.LogError) error { return nil }