A community based topic aggregation platform built on atproto
1package integration_test 2 3import ( 4 "os" 5 "testing" 6 7 "Coves/internal/atproto/carstore" 8 "Coves/internal/core/repository" 9 "Coves/internal/db/postgres" 10 "database/sql" 11 _ "github.com/lib/pq" 12 "github.com/pressly/goose/v3" 13 postgresDriver "gorm.io/driver/postgres" 14 "gorm.io/gorm" 15) 16 17func TestRepositoryIntegration(t *testing.T) { 18 // Skip if not running integration tests 19 if testing.Short() { 20 t.Skip("Skipping integration test") 21 } 22 23 // Use test database URL from environment or default 24 dbURL := os.Getenv("TEST_DATABASE_URL") 25 if dbURL == "" { 26 dbURL = "postgres://test_user:test_password@localhost:5434/coves_test?sslmode=disable" 27 } 28 29 // Connect to test database with sql.DB for migrations 30 sqlDB, err := sql.Open("postgres", dbURL) 31 if err != nil { 32 t.Fatalf("Failed to connect to test database: %v", err) 33 } 34 defer sqlDB.Close() 35 36 // Run migrations 37 if err := goose.Up(sqlDB, "../../internal/db/migrations"); err != nil { 38 t.Fatalf("Failed to run migrations: %v", err) 39 } 40 41 // Connect with GORM for carstore 42 gormDB, err := gorm.Open(postgresDriver.Open(dbURL), &gorm.Config{ 43 DisableForeignKeyConstraintWhenMigrating: true, 44 PrepareStmt: false, 45 }) 46 if err != nil { 47 t.Fatalf("Failed to create GORM connection: %v", err) 48 } 49 50 // Create temporary directory for carstore 51 tempDir, err := os.MkdirTemp("", "carstore_integration_test") 52 if err != nil { 53 t.Fatalf("Failed to create temp dir: %v", err) 54 } 55 defer os.RemoveAll(tempDir) 56 57 // Initialize carstore 58 carDirs := []string{tempDir} 59 repoStore, err := carstore.NewRepoStore(gormDB, carDirs) 60 if err != nil { 61 t.Fatalf("Failed to create repo store: %v", err) 62 } 63 64 // Create repository repo 65 repoRepo := postgres.NewRepositoryRepo(sqlDB) 66 67 // Create service with both repo and repoStore 68 service := repository.NewService(repoRepo, repoStore) 69 70 // Test creating a repository 71 did := "did:plc:testuser123" 72 service.SetSigningKey(did, "mock-signing-key") 73 74 repo, err := service.CreateRepository(did) 75 if err != nil { 76 t.Fatalf("Failed to create repository: %v", err) 77 } 78 79 if repo.DID != did { 80 t.Errorf("Expected DID %s, got %s", did, repo.DID) 81 } 82 83 // Test getting the repository 84 fetchedRepo, err := service.GetRepository(did) 85 if err != nil { 86 t.Fatalf("Failed to get repository: %v", err) 87 } 88 89 if fetchedRepo.DID != did { 90 t.Errorf("Expected DID %s, got %s", did, fetchedRepo.DID) 91 } 92 93 // Clean up 94 err = service.DeleteRepository(did) 95 if err != nil { 96 t.Fatalf("Failed to delete repository: %v", err) 97 } 98 99 // Clean up test data 100 gormDB.Exec("DELETE FROM repositories") 101 gormDB.Exec("DELETE FROM user_maps") 102 gormDB.Exec("DELETE FROM car_shards") 103}