package v1 import ( "encoding/json" "net/http" "net/http/httptest" "testing" "github.com/gin-gonic/gin" "github.com/stretchr/testify/assert" "github.com/gochat/gochat/internal/service" ) func setupInboxRouter(handler *InboxHandler) *gin.Engine { gin.SetMode(gin.TestMode) router := gin.New() router.GET("/api/v1/accounts/:id/inboxes", handler.List) router.GET("/api/v1/accounts/:id/inboxes/:inbox_id", handler.Get) router.POST("/api/v1/accounts/:id/inboxes", handler.Create) router.PUT("/api/v1/accounts/:id/inboxes/:inbox_id", handler.Update) router.DELETE("/api/v1/accounts/:id/inboxes/:inbox_id", handler.Delete) return router } func TestInboxListBadAccountID(t *testing.T) { handler := NewInboxHandler(&service.InboxService{}) router := setupInboxRouter(handler) w := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/api/v1/accounts/abc/inboxes", nil) router.ServeHTTP(w, req) assert.Equal(t, http.StatusBadRequest, w.Code) var resp map[string]interface{} json.Unmarshal(w.Body.Bytes(), &resp) assert.Contains(t, resp, "error") } func TestInboxGetBadAccountID(t *testing.T) { handler := NewInboxHandler(&service.InboxService{}) router := setupInboxRouter(handler) w := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/api/v1/accounts/abc/inboxes/5", nil) router.ServeHTTP(w, req) assert.Equal(t, http.StatusBadRequest, w.Code) } func TestInboxGetBadInboxID(t *testing.T) { handler := NewInboxHandler(&service.InboxService{}) router := setupInboxRouter(handler) w := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/api/v1/accounts/1/inboxes/abc", nil) router.ServeHTTP(w, req) assert.Equal(t, http.StatusBadRequest, w.Code) } func TestInboxCreateBadAccountID(t *testing.T) { handler := NewInboxHandler(&service.InboxService{}) router := setupInboxRouter(handler) w := httptest.NewRecorder() req, _ := http.NewRequest("POST", "/api/v1/accounts/abc/inboxes", nil) router.ServeHTTP(w, req) assert.Equal(t, http.StatusBadRequest, w.Code) } func TestInboxUpdateBadAccountID(t *testing.T) { handler := NewInboxHandler(&service.InboxService{}) router := setupInboxRouter(handler) w := httptest.NewRecorder() req, _ := http.NewRequest("PUT", "/api/v1/accounts/abc/inboxes/5", nil) router.ServeHTTP(w, req) assert.Equal(t, http.StatusBadRequest, w.Code) } func TestInboxUpdateBadInboxID(t *testing.T) { handler := NewInboxHandler(&service.InboxService{}) router := setupInboxRouter(handler) w := httptest.NewRecorder() req, _ := http.NewRequest("PUT", "/api/v1/accounts/1/inboxes/abc", nil) router.ServeHTTP(w, req) assert.Equal(t, http.StatusBadRequest, w.Code) } func TestInboxDeleteBadAccountID(t *testing.T) { handler := NewInboxHandler(&service.InboxService{}) router := setupInboxRouter(handler) w := httptest.NewRecorder() req, _ := http.NewRequest("DELETE", "/api/v1/accounts/abc/inboxes/5", nil) router.ServeHTTP(w, req) assert.Equal(t, http.StatusBadRequest, w.Code) } func TestInboxDeleteBadInboxID(t *testing.T) { handler := NewInboxHandler(&service.InboxService{}) router := setupInboxRouter(handler) w := httptest.NewRecorder() req, _ := http.NewRequest("DELETE", "/api/v1/accounts/1/inboxes/abc", nil) router.ServeHTTP(w, req) assert.Equal(t, http.StatusBadRequest, w.Code) }