refactor: extract common setup logic
This commit is contained in:
@@ -11,7 +11,6 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"golang.org/x/crypto/bcrypt"
|
|
||||||
"goyco/internal/database"
|
"goyco/internal/database"
|
||||||
"goyco/internal/handlers"
|
"goyco/internal/handlers"
|
||||||
"goyco/internal/middleware"
|
"goyco/internal/middleware"
|
||||||
@@ -19,6 +18,8 @@ import (
|
|||||||
"goyco/internal/server"
|
"goyco/internal/server"
|
||||||
"goyco/internal/services"
|
"goyco/internal/services"
|
||||||
"goyco/internal/testutils"
|
"goyco/internal/testutils"
|
||||||
|
|
||||||
|
"golang.org/x/crypto/bcrypt"
|
||||||
)
|
)
|
||||||
|
|
||||||
type testContext struct {
|
type testContext struct {
|
||||||
@@ -27,10 +28,19 @@ type testContext struct {
|
|||||||
AuthService *services.AuthFacade
|
AuthService *services.AuthFacade
|
||||||
}
|
}
|
||||||
|
|
||||||
func setupTestContext(t *testing.T) *testContext {
|
type commonHandlers struct {
|
||||||
|
AuthService *services.AuthFacade
|
||||||
|
VoteService *services.VoteService
|
||||||
|
MetadataService services.TitleFetcher
|
||||||
|
AuthHandler *handlers.AuthHandler
|
||||||
|
PostHandler *handlers.PostHandler
|
||||||
|
VoteHandler *handlers.VoteHandler
|
||||||
|
UserHandler *handlers.UserHandler
|
||||||
|
APIHandler *handlers.APIHandler
|
||||||
|
}
|
||||||
|
|
||||||
|
func setupCommonHandlers(t *testing.T, suite *testutils.ServiceSuite, useMonitoring bool) *commonHandlers {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
middleware.StopAllRateLimiters()
|
|
||||||
suite := testutils.NewServiceSuite(t)
|
|
||||||
|
|
||||||
authService, err := services.NewAuthFacadeForTest(testutils.AppTestConfig, suite.UserRepo, suite.PostRepo, suite.DeletionRepo, suite.RefreshTokenRepo, suite.EmailSender)
|
authService, err := services.NewAuthFacadeForTest(testutils.AppTestConfig, suite.UserRepo, suite.PostRepo, suite.DeletionRepo, suite.RefreshTokenRepo, suite.EmailSender)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -44,32 +54,61 @@ func setupTestContext(t *testing.T) *testContext {
|
|||||||
postHandler := handlers.NewPostHandler(suite.PostRepo, metadataService, voteService)
|
postHandler := handlers.NewPostHandler(suite.PostRepo, metadataService, voteService)
|
||||||
voteHandler := handlers.NewVoteHandler(voteService)
|
voteHandler := handlers.NewVoteHandler(voteService)
|
||||||
userHandler := handlers.NewUserHandler(suite.UserRepo, authService)
|
userHandler := handlers.NewUserHandler(suite.UserRepo, authService)
|
||||||
apiHandler := handlers.NewAPIHandlerWithMonitoring(testutils.AppTestConfig, suite.PostRepo, suite.UserRepo, voteService, suite.DB, middleware.NewInMemoryDBMonitor())
|
|
||||||
|
|
||||||
staticDir := t.TempDir()
|
var apiHandler *handlers.APIHandler
|
||||||
robotsFile := filepath.Join(staticDir, "robots.txt")
|
if useMonitoring {
|
||||||
os.WriteFile(robotsFile, []byte("User-agent: *\nDisallow: /"), 0644)
|
apiHandler = handlers.NewAPIHandlerWithMonitoring(testutils.AppTestConfig, suite.PostRepo, suite.UserRepo, voteService, suite.DB, middleware.NewInMemoryDBMonitor())
|
||||||
|
} else {
|
||||||
|
apiHandler = handlers.NewAPIHandler(testutils.AppTestConfig, suite.PostRepo, suite.UserRepo, voteService)
|
||||||
|
}
|
||||||
|
|
||||||
router := server.NewRouter(server.RouterConfig{
|
return &commonHandlers{
|
||||||
|
AuthService: authService,
|
||||||
|
VoteService: voteService,
|
||||||
|
MetadataService: metadataService,
|
||||||
AuthHandler: authHandler,
|
AuthHandler: authHandler,
|
||||||
PostHandler: postHandler,
|
PostHandler: postHandler,
|
||||||
VoteHandler: voteHandler,
|
VoteHandler: voteHandler,
|
||||||
UserHandler: userHandler,
|
UserHandler: userHandler,
|
||||||
APIHandler: apiHandler,
|
APIHandler: apiHandler,
|
||||||
AuthService: authService,
|
}
|
||||||
PageHandler: nil,
|
}
|
||||||
|
|
||||||
|
func buildRouterConfig(h *commonHandlers, staticDir string, pageHandler *handlers.PageHandler) server.RouterConfig {
|
||||||
|
return server.RouterConfig{
|
||||||
|
AuthHandler: h.AuthHandler,
|
||||||
|
PostHandler: h.PostHandler,
|
||||||
|
VoteHandler: h.VoteHandler,
|
||||||
|
UserHandler: h.UserHandler,
|
||||||
|
APIHandler: h.APIHandler,
|
||||||
|
AuthService: h.AuthService,
|
||||||
|
PageHandler: pageHandler,
|
||||||
StaticDir: staticDir,
|
StaticDir: staticDir,
|
||||||
Debug: false,
|
Debug: false,
|
||||||
DisableCache: false,
|
DisableCache: false,
|
||||||
DisableCompression: false,
|
DisableCompression: false,
|
||||||
DBMonitor: middleware.NewInMemoryDBMonitor(),
|
DBMonitor: middleware.NewInMemoryDBMonitor(),
|
||||||
RateLimitConfig: testutils.AppTestConfig.RateLimit,
|
RateLimitConfig: testutils.AppTestConfig.RateLimit,
|
||||||
})
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func setupTestContext(t *testing.T) *testContext {
|
||||||
|
t.Helper()
|
||||||
|
middleware.StopAllRateLimiters()
|
||||||
|
suite := testutils.NewServiceSuite(t)
|
||||||
|
|
||||||
|
h := setupCommonHandlers(t, suite, true)
|
||||||
|
|
||||||
|
staticDir := t.TempDir()
|
||||||
|
robotsFile := filepath.Join(staticDir, "robots.txt")
|
||||||
|
os.WriteFile(robotsFile, []byte("User-agent: *\nDisallow: /"), 0644)
|
||||||
|
|
||||||
|
router := server.NewRouter(buildRouterConfig(h, staticDir, nil))
|
||||||
|
|
||||||
return &testContext{
|
return &testContext{
|
||||||
Router: router,
|
Router: router,
|
||||||
Suite: suite,
|
Suite: suite,
|
||||||
AuthService: authService,
|
AuthService: h.AuthService,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,19 +117,7 @@ func setupPageHandlerTestContext(t *testing.T) *testContext {
|
|||||||
middleware.StopAllRateLimiters()
|
middleware.StopAllRateLimiters()
|
||||||
suite := testutils.NewServiceSuite(t)
|
suite := testutils.NewServiceSuite(t)
|
||||||
|
|
||||||
authService, err := services.NewAuthFacadeForTest(testutils.AppTestConfig, suite.UserRepo, suite.PostRepo, suite.DeletionRepo, suite.RefreshTokenRepo, suite.EmailSender)
|
h := setupCommonHandlers(t, suite, false)
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("Failed to create auth service: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
voteService := services.NewVoteService(suite.VoteRepo, suite.PostRepo, suite.DB)
|
|
||||||
metadataService := suite.TitleFetcher
|
|
||||||
|
|
||||||
authHandler := handlers.NewAuthHandler(authService, suite.UserRepo)
|
|
||||||
postHandler := handlers.NewPostHandler(suite.PostRepo, metadataService, voteService)
|
|
||||||
voteHandler := handlers.NewVoteHandler(voteService)
|
|
||||||
userHandler := handlers.NewUserHandler(suite.UserRepo, authService)
|
|
||||||
apiHandler := handlers.NewAPIHandler(testutils.AppTestConfig, suite.PostRepo, suite.UserRepo, voteService)
|
|
||||||
|
|
||||||
staticDir := t.TempDir()
|
staticDir := t.TempDir()
|
||||||
templatesDir := t.TempDir()
|
templatesDir := t.TempDir()
|
||||||
@@ -162,31 +189,17 @@ func setupPageHandlerTestContext(t *testing.T) *testContext {
|
|||||||
confirmDeleteTemplate := `{{define "content"}}<h1>Confirm Delete</h1>{{end}}`
|
confirmDeleteTemplate := `{{define "content"}}<h1>Confirm Delete</h1>{{end}}`
|
||||||
os.WriteFile(filepath.Join(templatesDir, "confirm_delete.gohtml"), []byte(confirmDeleteTemplate), 0644)
|
os.WriteFile(filepath.Join(templatesDir, "confirm_delete.gohtml"), []byte(confirmDeleteTemplate), 0644)
|
||||||
|
|
||||||
pageHandler, err := handlers.NewPageHandler(templatesDir, authService, suite.PostRepo, voteService, suite.UserRepo, metadataService, testutils.AppTestConfig)
|
pageHandler, err := handlers.NewPageHandler(templatesDir, h.AuthService, suite.PostRepo, h.VoteService, suite.UserRepo, h.MetadataService, testutils.AppTestConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Failed to create page handler: %v", err)
|
t.Fatalf("Failed to create page handler: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
router := server.NewRouter(server.RouterConfig{
|
router := server.NewRouter(buildRouterConfig(h, staticDir, pageHandler))
|
||||||
AuthHandler: authHandler,
|
|
||||||
PostHandler: postHandler,
|
|
||||||
VoteHandler: voteHandler,
|
|
||||||
UserHandler: userHandler,
|
|
||||||
APIHandler: apiHandler,
|
|
||||||
AuthService: authService,
|
|
||||||
PageHandler: pageHandler,
|
|
||||||
StaticDir: staticDir,
|
|
||||||
Debug: false,
|
|
||||||
DisableCache: false,
|
|
||||||
DisableCompression: false,
|
|
||||||
DBMonitor: middleware.NewInMemoryDBMonitor(),
|
|
||||||
RateLimitConfig: testutils.AppTestConfig.RateLimit,
|
|
||||||
})
|
|
||||||
|
|
||||||
return &testContext{
|
return &testContext{
|
||||||
Router: router,
|
Router: router,
|
||||||
Suite: suite,
|
Suite: suite,
|
||||||
AuthService: authService,
|
AuthService: h.AuthService,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user