package main import ( "context" "os" "testing" "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "tss-rocks-be/internal/config" "tss-rocks-be/internal/server" ) func TestConfigLoad(t *testing.T) { // Create a temporary config file for testing tmpConfig := ` database: driver: sqlite3 dsn: ":memory:" server: port: 8080 host: localhost storage: type: local local: root_dir: "./testdata" ` tmpFile, err := os.CreateTemp("", "config-*.yaml") require.NoError(t, err) defer os.Remove(tmpFile.Name()) _, err = tmpFile.WriteString(tmpConfig) require.NoError(t, err) err = tmpFile.Close() require.NoError(t, err) // Test config loading cfg, err := config.Load(tmpFile.Name()) require.NoError(t, err) assert.Equal(t, "sqlite3", cfg.Database.Driver) assert.Equal(t, ":memory:", cfg.Database.DSN) assert.Equal(t, 8080, cfg.Server.Port) assert.Equal(t, "localhost", cfg.Server.Host) assert.Equal(t, "local", cfg.Storage.Type) assert.Equal(t, "./testdata", cfg.Storage.Local.RootDir) } func TestServerCreation(t *testing.T) { cfg := &config.Config{ Database: config.DatabaseConfig{ Driver: "sqlite3", DSN: ":memory:", }, Server: config.ServerConfig{ Port: 8080, Host: "localhost", }, Storage: config.StorageConfig{ Type: "local", Local: config.LocalStorage{ RootDir: "./testdata", }, }, } // Create ent client client := server.NewEntClient(cfg) require.NotNil(t, client) defer client.Close() // Test schema creation err := client.Schema.Create(context.Background()) require.NoError(t, err) // Test server creation srv, err := server.New(cfg, client) require.NoError(t, err) require.NotNil(t, srv) } func TestServerStartAndShutdown(t *testing.T) { cfg := &config.Config{ Database: config.DatabaseConfig{ Driver: "sqlite3", DSN: ":memory:", }, Server: config.ServerConfig{ Port: 0, // Use random available port Host: "localhost", }, Storage: config.StorageConfig{ Type: "local", Local: config.LocalStorage{ RootDir: "./testdata", }, }, } client := server.NewEntClient(cfg) require.NotNil(t, client) defer client.Close() err := client.Schema.Create(context.Background()) require.NoError(t, err) srv, err := server.New(cfg, client) require.NoError(t, err) // Start server in goroutine go func() { err := srv.Start() if err != nil { t.Logf("Server stopped: %v", err) } }() // Give server time to start time.Sleep(100 * time.Millisecond) // Test graceful shutdown ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() err = srv.Shutdown(ctx) assert.NoError(t, err) }