package bootstrap import ( "os" "path/filepath" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "tercul/internal/platform/config" "github.com/weaviate/weaviate-go-client/v5/weaviate" "gorm.io/driver/sqlite" "gorm.io/gorm" ) func TestNewWeaviateClient(t *testing.T) { cfg := &config.Config{ WeaviateHost: "localhost:8080", WeaviateScheme: "http", } client, err := NewWeaviateClient(cfg) require.NoError(t, err) assert.NotNil(t, client) } func TestBootstrap(t *testing.T) { // Skip if integration tests are not enabled if testing.Short() { t.Skip("Skipping integration test in short mode") } // Setup test database using SQLite dbPath := filepath.Join(t.TempDir(), "test.db") testDB, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{}) require.NoError(t, err) defer func() { sqlDB, _ := testDB.DB() if sqlDB != nil { _ = sqlDB.Close() } _ = os.Remove(dbPath) }() // Setup test config cfg := &config.Config{ Environment: "test", WeaviateHost: "localhost:8080", WeaviateScheme: "http", } // Create a mock Weaviate client (in real tests, you'd use a test container) weaviateClient, err := weaviate.NewClient(weaviate.Config{ Host: cfg.WeaviateHost, Scheme: cfg.WeaviateScheme, }) require.NoError(t, err) // Test bootstrap deps, err := Bootstrap(cfg, testDB, weaviateClient) require.NoError(t, err) assert.NotNil(t, deps) assert.NotNil(t, deps.Config) assert.NotNil(t, deps.Database) assert.NotNil(t, deps.WeaviateClient) assert.NotNil(t, deps.Repos) assert.NotNil(t, deps.Application) assert.NotNil(t, deps.JWTManager) assert.NotNil(t, deps.AnalysisRepo) assert.NotNil(t, deps.SentimentProvider) } func TestBootstrapWithMetrics(t *testing.T) { // Skip if integration tests are not enabled if testing.Short() { t.Skip("Skipping integration test in short mode") } // Setup test database using SQLite dbPath := filepath.Join(t.TempDir(), "test.db") testDB, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{}) require.NoError(t, err) defer func() { sqlDB, _ := testDB.DB() if sqlDB != nil { _ = sqlDB.Close() } _ = os.Remove(dbPath) }() // Setup test config cfg := &config.Config{ Environment: "test", WeaviateHost: "localhost:8080", WeaviateScheme: "http", } // Create a mock Weaviate client weaviateClient, err := weaviate.NewClient(weaviate.Config{ Host: cfg.WeaviateHost, Scheme: cfg.WeaviateScheme, }) require.NoError(t, err) // Test bootstrap with metrics deps, err := BootstrapWithMetrics(cfg, testDB, weaviateClient) require.NoError(t, err) assert.NotNil(t, deps) assert.NotNil(t, deps.Application) }