setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $connection = new PdoConnection($pdo); // Create repositories $campaignRepo = new PreSaveCampaignRepository($connection); $registrationRepo = new PreSaveRegistrationRepository($connection); $tokenRepo = new OAuthTokenRepository($connection); echo "✓ Database connected and repositories created" . PHP_EOL . PHP_EOL; // Test 1: Create campaign echo "Test 1: Creating campaign..." . PHP_EOL; $campaign = PreSaveCampaign::create( title: 'Test Album', artistName: 'Test Artist', coverImageUrl: 'https://example.com/cover.jpg', releaseDate: Timestamp::fromFloat(time() + (7 * 24 * 60 * 60)), trackUrls: [ TrackUrl::create(StreamingPlatform::SPOTIFY, '3n3Ppam7vgaVa1iaRUc9Lp'), ], description: 'Test description', startDate: Timestamp::now() ); $savedCampaign = $campaignRepo->save($campaign); echo "✓ Campaign created with ID: {$savedCampaign->id}" . PHP_EOL . PHP_EOL; $campaign = $savedCampaign; // Test 2: Create registration echo "Test 2: Creating registration..." . PHP_EOL; $registration = PreSaveRegistration::create( campaignId: $campaign->id, userId: 'test_user', platform: StreamingPlatform::SPOTIFY ); $savedRegistration = $registrationRepo->save($registration); $registration = $savedRegistration; echo "✓ Registration created with ID: {$registration->id}" . PHP_EOL . PHP_EOL; // Test 3: Find registrations echo "Test 3: Finding registrations..." . PHP_EOL; $found = $registrationRepo->findByCampaign($campaign->id); echo "✓ Found " . count($found) . " registration(s)" . PHP_EOL . PHP_EOL; // Test 4: Publish campaign echo "Test 4: Publishing campaign..." . PHP_EOL; $publishedCampaign = $campaign->publish(); $campaignRepo->save($publishedCampaign); echo "✓ Campaign status: {$publishedCampaign->status->value}" . PHP_EOL . PHP_EOL; // Test 5: Process registration (mark as completed) echo "Test 5: Processing registration..." . PHP_EOL; $processed = $registration->markAsCompleted(); $registrationRepo->save($processed); echo "✓ Registration status: {$processed->status->value}" . PHP_EOL . PHP_EOL; // Cleanup echo "Cleanup..." . PHP_EOL; $campaignRepo->delete($campaign->id); echo "✓ Campaign deleted" . PHP_EOL . PHP_EOL; echo "=== All tests passed! ===" . PHP_EOL;