Files
GoMFT/internal/web/handlers/test_utils.go
T
StarFleetCPTN 558e81c7e8 feat: Enhance configuration handling and UI for job management
- Update .gitignore to include new provider files and ensure proper tracking.
- Refactor job and config forms to support multiple configuration selections, improving user experience.
- Implement logic to handle the initialization of skipProcessedFiles with a default value.
- Add new provider form templates for better organization and management of source and destination configurations.
- Enhance tests for provider forms and job configurations to ensure robust functionality.
- Introduce nullable handling for skipProcessedFiles in the database schema and update related migrations.
- Improve error handling and validation in job creation and editing processes.
2025-03-14 16:30:43 -07:00

93 lines
2.0 KiB
Go

package handlers
import (
"fmt"
"testing"
"github.com/gin-gonic/gin"
"github.com/glebarez/sqlite"
"github.com/starfleetcptn/gomft/internal/db"
"github.com/starfleetcptn/gomft/internal/email"
"github.com/starfleetcptn/gomft/internal/scheduler"
"golang.org/x/crypto/bcrypt"
"gorm.io/gorm"
)
// Static counter to ensure unique emails for each test
var testEmailCounter int = 0
func setupTestHandlers(t *testing.T) (*Handlers, *gin.Engine) {
// Set Gin to test mode
gin.SetMode(gin.TestMode)
// Create a test DB
testDB := setupTestDB(t)
// Create a mock scheduler
mockScheduler := &scheduler.Scheduler{}
// Create a mock email service
mockEmailService := &email.Service{}
// Create test handlers
handlers := NewHandlers(
testDB,
mockScheduler,
"test-jwt-secret",
"test-db-path",
"test-backup-dir",
"test-logs-dir",
mockEmailService,
)
// Create a test router
router := gin.New()
return handlers, router
}
// setupTestDB creates a test database for handler tests
func setupTestDB(t *testing.T) *db.DB {
// Set up an in-memory SQLite DB
gormDB, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{})
if err != nil {
t.Fatalf("Failed to open in-memory database: %v", err)
}
// Run migrations
err = gormDB.AutoMigrate(
&db.User{},
&db.PasswordHistory{},
&db.PasswordResetToken{},
&db.TransferConfig{},
&db.Job{},
&db.JobHistory{},
&db.FileMetadata{},
)
if err != nil {
t.Fatalf("Failed to migrate database: %v", err)
}
// Create a test admin user with a unique email
testEmailCounter++
testEmail := fmt.Sprintf("test%d@example.com", testEmailCounter)
// Generate a hashed password for "admin"
hashedPassword, err := bcrypt.GenerateFromPassword([]byte("admin"), bcrypt.DefaultCost)
if err != nil {
t.Fatalf("Failed to hash password: %v", err)
}
admin := db.User{
Email: testEmail,
PasswordHash: string(hashedPassword),
IsAdmin: true,
}
if err := gormDB.Create(&admin).Error; err != nil {
t.Fatalf("Failed to create test admin user: %v", err)
}
return &db.DB{DB: gormDB}
}