mirror of
https://github.com/StarFleetCPTN/GoMFT.git
synced 2026-09-11 00:50:47 +02:00
- 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.
93 lines
2.0 KiB
Go
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}
|
|
}
|