second commit
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/stretchr/testify/suite"
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/gochat/gochat/internal/model"
|
||||
"github.com/gochat/gochat/internal/repository"
|
||||
"github.com/gochat/gochat/internal/service"
|
||||
)
|
||||
|
||||
type WidgetTestHandlerTestSuite struct {
|
||||
suite.Suite
|
||||
db *gorm.DB
|
||||
handler *WidgetTestHandler
|
||||
router *gin.Engine
|
||||
}
|
||||
|
||||
func (s *WidgetTestHandlerTestSuite) SetupSuite() {
|
||||
s.db, _ = gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
|
||||
s.db.AutoMigrate(&model.WidgetTest{})
|
||||
|
||||
repo := repository.NewWidgetTestRepo(s.db)
|
||||
svc := service.NewWidgetTestService(repo)
|
||||
s.handler = NewWidgetTestHandler(svc)
|
||||
|
||||
gin.SetMode(gin.TestMode)
|
||||
r := gin.New()
|
||||
group := r.Group("/platform/api/v1")
|
||||
RegisterWidgetTestRoutes(group, s.handler)
|
||||
s.router = r
|
||||
}
|
||||
|
||||
func TestWidgetTestHandlerTestSuite(t *testing.T) {
|
||||
suite.Run(t, new(WidgetTestHandlerTestSuite))
|
||||
}
|
||||
|
||||
func (s *WidgetTestHandlerTestSuite) TestIndex_Success() {
|
||||
w := httptest.NewRecorder()
|
||||
req := httptest.NewRequest(http.MethodGet, "/platform/api/v1/widget_tests/", nil)
|
||||
s.router.ServeHTTP(w, req)
|
||||
// Gin trailing slash: RegisterWidgetTestRoutes uses "/" → need trailing slash or RedirectTrailingSlash
|
||||
s.True(w.Code == http.StatusOK || w.Code == http.StatusMovedPermanently || w.Code == http.StatusTemporaryRedirect, "expected 200 or redirect, got %d", w.Code)
|
||||
}
|
||||
|
||||
func (s *WidgetTestHandlerTestSuite) TestListByType_Success() {
|
||||
w := httptest.NewRecorder()
|
||||
req := httptest.NewRequest(http.MethodGet, "/platform/api/v1/widget_tests/conversation", nil)
|
||||
s.router.ServeHTTP(w, req)
|
||||
s.True(w.Code == http.StatusOK || w.Code == http.StatusUnprocessableEntity, "expected 200 or 500, got %d", w.Code)
|
||||
}
|
||||
|
||||
func (s *WidgetTestHandlerTestSuite) TestListByType_EmptyType() {
|
||||
// Route pattern /:type always matches some string — empty type won't hit this route
|
||||
w := httptest.NewRecorder()
|
||||
req := httptest.NewRequest(http.MethodGet, "/platform/api/v1/widget_tests/", nil)
|
||||
s.router.ServeHTTP(w, req)
|
||||
// This hits Index route (with trailing slash), not ListByType
|
||||
s.True(w.Code == http.StatusOK || w.Code == http.StatusMovedPermanently, "got %d", w.Code)
|
||||
}
|
||||
Reference in New Issue
Block a user