Skip to content
e2e-test-scenarios logo

E2E Test Scenarios

e2e-test-scenarios

End-to-end testing scenarios for Supabase - complete workflow tests from project creation to AI features, validation scripts, and comprehensive test suites. Use when testing Supabase integrations, validating AI workflows, running E2E tests, verifying production readiness, or when user mentions Su...

SKILL.md

Full skill instructions

e2e-test-scenarios

Instructions

This skill provides comprehensive end-to-end testing capabilities for Supabase applications, covering database operations, authentication flows, AI features (pgvector), realtime subscriptions, and production readiness validation.

Phase 1: Setup Test Environment

  1. Initialize test environment:

    bash scripts/​setup-test-env.sh
    

    This creates:

    • Test database configuration
    • Environment variables for testing
    • Test data fixtures
    • CI/​CD configuration templates
  2. Configure test database:

    • Use dedicated test project or local Supabase instance
    • Never run tests against production
    • Set SUPABASE_TEST_URL and SUPABASE_TEST_ANON_KEY
    • Enable pgTAP extension for database tests
  3. Install dependencies:

    npm install --save-dev @supabase/​supabase-js jest @types/​jest
    # or
    pnpm add -D @supabase/​supabase-js vitest
    

Phase 2: Database Workflow Testing

Test complete database operations from schema to queries:

  1. Run database E2E tests:

    bash scripts/​test-database-workflow.sh
    

    This validates:

    • Schema creation and migrations
    • Table relationships and foreign keys
    • RLS policies enforcement
    • Triggers and functions
    • Data integrity constraints
  2. Use pgTAP for SQL-level tests:

    # Run all database tests
    supabase test db
    
    # Run specific test file
    supabase test db --file tests/​database/​users.test.sql
    
  3. Test schema migrations:

    # Test migration up/​down
    supabase db reset --linked
    supabase db push
    
    # Verify schema state
    bash scripts/​validate-schema.sh
    

Phase 3: Authentication Flow Testing

Test complete auth workflows end-to-end:

  1. Run authentication E2E tests:

    bash scripts/​test-auth-workflow.sh
    

    This validates:

    • Email/​password signup and login
    • Magic link authentication
    • OAuth provider flows (Google, GitHub, etc.)
    • Session management and refresh
    • Password reset flows
    • Email verification
    • Multi-factor authentication (MFA)
  2. Test RLS with authenticated users:

    // See templates/​auth-tests.ts for complete examples
    test('authenticated users see only their data', async () => {
      const { data, error } = await supabase
        .from('private_notes')
        .select('*');
    
      expect(data).toHaveLength(userNoteCount);
      expect(data.every(note => note.user_id === userId)).toBe(true);
    });
    
  3. Test session persistence:

    # Run session validation tests
    npm test -- auth-session.test.ts
    

Phase 4: AI Features Testing (pgvector)

Test vector search and semantic operations:

  1. Run AI features E2E tests:

    bash scripts/​test-ai-features.sh
    

    This validates:

    • pgvector extension is enabled
    • Embedding storage and retrieval
    • Vector similarity search accuracy
    • HNSW/​IVFFlat index performance
    • Hybrid search (keyword + semantic)
    • Embedding dimension consistency
  2. Test vector search accuracy:

    // See templates/​vector-search-tests.ts
    test('semantic search returns relevant results', async () => {
      const queryEmbedding = await generateEmbedding('machine learning');
    
      const { data } = await supabase.rpc('match_documents', {
        query_embedding: queryEmbedding
        match_threshold: 0.7
        match_count: 5
      });
    
      expect(data.length).toBeGreaterThan(0);
      expect(data[0].similarity).toBeGreaterThan(0.7);
    });
    
  3. Test embedding operations:

    # Validate embedding pipeline
    npm test -- embedding-workflow.test.ts
    
  4. Performance benchmarking:

    # Run performance tests
    bash scripts/​benchmark-vector-search.sh [TABLE_NAME] [VECTOR_DIM]
    

Phase 5: Realtime Features Testing

Test realtime subscriptions and presence:

  1. Run realtime E2E tests:

    bash scripts/​test-realtime-workflow.sh
    

    This validates:

    • Database change subscriptions
    • Broadcast messaging
    • Presence tracking
    • Connection handling
    • Reconnection logic
    • Subscription cleanup
  2. Test database change subscriptions:

    // See templates/​realtime-tests.ts
    test('receives real-time updates on insert', async () => {
      const updates = [];
    
      const subscription = supabase
        .channel('test-channel')
        .on('postgres_changes'
          { event: 'INSERT', schema: 'public', table: 'messages' }
          (payload) => updates.push(payload)
        )
        .subscribe();
    
      await supabase.from('messages').insert({ content: 'test' });
    
      await waitFor(() => expect(updates).toHaveLength(1));
    });
    
  3. Test presence and broadcast:

    # Run presence tests
    npm test -- presence.test.ts
    

Phase 6: Complete Integration Tests

Run full workflow tests simulating real user scenarios:

  1. Execute complete E2E test suite:

    bash scripts/​run-e2e-tests.sh
    

    This runs:

    • User signup → profile creation → data CRUD → logout
    • Document upload → embedding generation → semantic search
    • Chat message → realtime delivery → read receipts
    • Multi-user collaboration scenarios
    • Error handling and recovery
  2. Run test scenarios in parallel:

    # Run all test suites
    npm test -- --maxWorkers=4
    
    # Run specific workflow
    npm test -- workflows/​document-rag.test.ts
    
  3. Generate test reports:

    # Generate coverage report
    npm test -- --coverage
    
    # Generate HTML report
    npm test -- --coverage --coverageReporters=html
    

Phase 7: CI/​CD Integration

Setup automated testing in CI/​CD pipelines:

  1. Use GitHub Actions template:

    # Copy CI config to your repo
    cp templates/​ci-config.yml .github/​workflows/​supabase-tests.yml
    
  2. Configure test secrets:

    • Add SUPABASE_TEST_URL to GitHub secrets
    • Add SUPABASE_TEST_ANON_KEY to GitHub secrets
    • Add SUPABASE_TEST_SERVICE_ROLE_KEY for admin tests
  3. Run tests on pull requests:

    • Automatic test execution on PR creation
    • Blocking PRs if tests fail
    • Test result reporting in PR comments

Phase 8: Cleanup and Teardown

Clean up test resources after testing:

  1. Run cleanup script:

    bash scripts/​cleanup-test-resources.sh
    

    This removes:

    • Test users and sessions
    • Test data from tables
    • Temporary test databases
    • Test file uploads
  2. Reset test database:

    # Reset to clean state
    supabase db reset --linked
    
    # Or use migration-based reset
    bash scripts/​reset-test-db.sh
    

Test Coverage Areas

Database Testing

  • Schema Validation: Table structure, columns, constraints
  • Migration Testing: Up/​down migrations, rollback safety
  • RLS Policies: Access control, policy enforcement
  • Functions & Triggers: Database logic, event handlers
  • Performance: Query optimization, index usage

Authentication Testing

  • User Flows: Signup, login, logout, password reset
  • Provider Integration: OAuth, magic links, phone auth
  • Session Management: Token refresh, expiration, persistence
  • MFA: Setup, verification, recovery codes
  • Security: Rate limiting, brute force protection

AI Features Testing

  • Vector Operations: Insert, update, delete embeddings
  • Similarity Search: Accuracy, relevance, threshold tuning
  • Index Performance: HNSW vs IVFFlat, query speed
  • Hybrid Search: Combined keyword and semantic search
  • Dimension Validation: Embedding size consistency

Realtime Testing

  • Subscriptions: Database changes, broadcasts, presence
  • Connection Management: Connect, disconnect, reconnect
  • Message Delivery: Ordering, reliability, deduplication
  • Performance: Latency, throughput, concurrent users
  • Cleanup: Subscription disposal, memory leaks

Integration Testing

  • Multi-Component: Auth + Database + Storage
  • User Journeys: Complete workflows end-to-end
  • Error Scenarios: Network failures, invalid data, rate limits
  • Edge Cases: Concurrent updates, race conditions, timeouts

Test Data Strategies

Fixture Management

// Load test fixtures
const testData = await loadFixtures('users', 'posts', 'comments');

// Seed database
await seedDatabase(testData);

// Cleanup after tests
afterAll(async () => {
  await cleanupFixtures();
});

Factory Patterns

// Create test users with factories
const user = await createTestUser({
  email: '[email protected]'
  metadata: { role: 'admin' }
});

// Create related data
const posts = await createTestPosts(user.id, 5);

Isolation Strategies

  • Test Database: Dedicated test project
  • Transaction Rollback: Rollback after each test
  • Namespace Prefixes: test_ prefix for test data
  • Time-based Cleanup: Delete data older than X hours

Performance Benchmarks

Query Performance Targets

  • Simple queries: < 50ms
  • Vector similarity search: < 100ms
  • Hybrid search: < 200ms
  • Complex joins: < 300ms

Realtime Latency Targets

  • Message delivery: < 100ms
  • Presence updates: < 200ms
  • Database changes: < 500ms

Throughput Targets

  • Authenticated requests: 100+ req/​s
  • Vector searches: 50+ req/​s
  • Realtime messages: 1000+ msg/​s

Common Test Patterns

Pattern 1: Auth-Protected Resource Test

test('authenticated user CRUD operations', async () => {
  // 1. Sign up user
  const { user } = await supabase.auth.signUp({
    email: '[email protected]'
    password: 'test123'
  });

  // 2. Create resource
  const { data } = await supabase
    .from('notes')
    .insert({ content: 'test note' })
    .select()
    .single();

  // 3. Verify ownership
  expect(data.user_id).toBe(user.id);

  // 4. Update resource
  await supabase
    .from('notes')
    .update({ content: 'updated' })
    .eq('id', data.id);

  // 5. Delete resource
  await supabase.from('notes').delete().eq('id', data.id);
});

Pattern 2: Vector Search Workflow Test

test('document RAG workflow', async () => {
  // 1. Upload document
  const doc = await uploadDocument('test.pdf');

  // 2. Generate embeddings
  const chunks = await chunkDocument(doc);
  const embeddings = await generateEmbeddings(chunks);

  // 3. Store in database
  await supabase.from('document_chunks').insert(
    chunks.map((chunk, i) => ({
      content: chunk
      embedding: embeddings[i]
      document_id: doc.id
    }))
  );

  // 4. Perform semantic search
  const query = 'What is the main topic?';
  const queryEmbedding = await generateEmbedding(query);

  const { data } = await supabase.rpc('match_documents', {
    query_embedding: queryEmbedding
    match_count: 5
  });

  // 5. Verify results
  expect(data.length).toBeGreaterThan(0);
  expect(data[0].similarity).toBeGreaterThan(0.7);
});

Pattern 3: Realtime Collaboration Test

test('multi-user realtime chat', async () => {
  // 1. Create two users
  const user1 = await createTestUser();
  const user2 = await createTestUser();

  // 2. Subscribe to messages
  const user1Messages = [];
  const user2Messages = [];

  const sub1 = await subscribeToMessages(user1, user1Messages);
  const sub2 = await subscribeToMessages(user2, user2Messages);

  // 3. User 1 sends message
  await sendMessage(user1, 'Hello from user 1');

  // 4. Verify both users receive it
  await waitFor(() => {
    expect(user1Messages).toHaveLength(1);
    expect(user2Messages).toHaveLength(1);
  });

  // 5. Cleanup subscriptions
  await sub1.unsubscribe();
  await sub2.unsubscribe();
});

Troubleshooting

Tests Failing Intermittently

  • Race Conditions: Add proper wait conditions
  • Async Issues: Ensure all promises are awaited
  • Cleanup: Verify test isolation and cleanup
  • Timeouts: Increase timeout for slow operations

Tests Passing Locally but Failing in CI

  • Environment: Verify env variables in CI
  • Timing: CI may be slower, increase timeouts
  • Parallelization: Check for shared state issues
  • Dependencies: Ensure all deps are installed

Slow Test Execution

  • Parallel Tests: Use --maxWorkers flag
  • Test Selection: Run only changed tests
  • Database Reset: Use faster cleanup methods
  • Mocking: Mock external services

Database Connection Issues

  • Connection Pooling: Limit concurrent connections
  • Cleanup: Properly close connections after tests
  • Retries: Implement connection retry logic
  • Timeouts: Set appropriate connection timeouts

Files Reference

Scripts:

  • scripts/​setup-test-env.sh - Initialize test environment
  • scripts/​run-e2e-tests.sh - Execute complete test suite
  • scripts/​test-database-workflow.sh - Database E2E tests
  • scripts/​test-auth-workflow.sh - Authentication E2E tests
  • scripts/​test-ai-features.sh - Vector search E2E tests
  • scripts/​test-realtime-workflow.sh - Realtime E2E tests
  • scripts/​cleanup-test-resources.sh - Clean up test data
  • scripts/​validate-schema.sh - Validate database schema
  • scripts/​benchmark-vector-search.sh - Performance benchmarks
  • scripts/​reset-test-db.sh - Reset test database

Templates:

  • templates/​test-suite-template.ts - Jest/​Vitest boilerplate
  • templates/​database-tests.ts - Database operation tests
  • templates/​auth-tests.ts - Authentication flow tests
  • templates/​vector-search-tests.ts - pgvector tests
  • templates/​realtime-tests.ts - Realtime subscription tests
  • templates/​ci-config.yml - GitHub Actions CI/​CD
  • templates/​jest.config.js - Jest configuration
  • templates/​vitest.config.ts - Vitest configuration

Examples:

  • examples/​complete-test-workflow.md - Full E2E testing guide
  • examples/​ci-cd-integration.md - CI/​CD setup guide
  • examples/​test-data-strategies.md - Test data management
  • examples/​performance-benchmarks.md - Performance testing
  • examples/​mocking-strategies.md - Mocking external services

Plugin: supabase Version: 1.0.0 Last Updated: 2025-10-26

More Security skills

supabase logo
Security

supabase

Handles the full Supabase workflow from schema changes to deployment, with built-in security guardrails that catch common traps like RLS...

2.7K 308.9K
View

Comprehensive guides and best practices for Neon Serverless Postgres, covering setup, connection methods, authentication, and platform APIs.

98 216.2K
View

Guide for setting up and using Firebase Authentication. Use this skill when the user's app requires user sign-in, user management, or secure data access using auth rules.

462 163.8K
View

A skill to evaluate how secure Firestore security rules are. Use this when Firestore security rules are updated to ensure that the generated rules are extremely secure and robust.

462 127.7K
View

Official skill for integrating Firebase AI Logic (Gemini API) into web applications. Covers setup, multimodal inference, structured output, and security.

462 125.1K
View

Complete Better Auth server and client setup with database adapters, session management, plugins, and security configuration.

222 118.2K
View

Deploy and manage projects on Vercel using token-based authentication. Use when working with Vercel CLI using access tokens rather than interactive login — e.g. "deploy to vercel", "set up vercel", "add environment variables to vercel".

31.9K 116.1K
View
cloudflare logo
Security

cloudflare

Complete Cloudflare platform integration with decision trees for compute, storage, AI, networking, security, and infrastructure-as-code.

3K 110.7K
View

Run Azure compliance and security audits with azqr plus Key Vault expiration checks. Covers best-practice assessment, resource review, policy/compliance validation, and security posture checks. WHEN: compliance scan, security audit, BEFORE running azqr (compliance cli tool), Azure best practices, Key Vault expiration check, expired certificates, expiring secrets, orphaned resources, compliance assessment.

253 103K
View
gws-gmail logo
Security

gws-gmail

Send, read, and manage Gmail messages, drafts, labels, and account settings.

31.2K 78.9K
View

Comprehensive website auditing across 230+ rules in 21 categories including SEO, performance, security, and accessibility.

94 72.3K
View
gws-shared logo
Security

gws-shared

Shared authentication, CLI syntax, and output formatting patterns for gws Google Workspace commands.

31.2K 63.4K
View

Security AI tools

StarByFace logo
Security

StarByFace

Discover your celebrity doppelgänger with StarByFace!

Free
View
GeoSpy logo
Security

GeoSpy

GeoSpy: Pricing, Features, FAQs, and Alternatives for AI Teams

Free
View

Detect AI-generated voices to protect against audio fraud.

Paid
View

Ensure Your Content's Originality with AI Plagiarism Checker

Freemium
View
Img Upscaler logo
Security

Img Upscaler

Upscale images by 400% without quality loss

Freemium
View
AICheatCheck logo
Security

AICheatCheck

Accurately Detect AI-Generated Content with TheChecker.AI

Free
View
D
Security

Detect GPT

Chrome extension that detects and flags AI-generated content

Free
View