xtablo-source/supabase/tests/README.md
2025-11-16 20:34:33 +01:00

4.5 KiB

Supabase Database Tests

This directory contains comprehensive pgTAP tests for the Xtablo database, covering all tables, RLS policies, triggers, functions, views, and indexes.

Prerequisites

  • Supabase CLI installed (minimum version v1.11.4)
  • Local Supabase project initialized

Test Files

The tests are organized into 10 files, covering different aspects of the database:

  1. 01_schema_structure.test.sql - Tests table existence, columns, data types, and basic constraints
  2. 02_rls_policies_core.test.sql - Tests RLS policies for core tables (tablos, tablo_access, tablo_invites)
  3. 03_rls_policies_notes.test.sql - Tests RLS policies for notes and note sharing
  4. 04_rls_policies_other.test.sql - Tests RLS policies for feedbacks and events
  5. 05_triggers.test.sql - Tests all database triggers and trigger functions
  6. 06_stripe_functions.test.sql - Tests Stripe integration functions and security
  7. 07_views.test.sql - Tests database views and their behavior
  8. 08_indexes_performance.test.sql - Tests index coverage and performance optimizations
  9. 09_notifications.test.sql - Tests notifications table structure, triggers, and trigger behavior
  10. 10_rls_policies_notifications.test.sql - Tests RLS policies for notifications table

Running Tests

Run All Tests

To run all database tests:

supabase test db

Run Specific Test File

To run a specific test file:

supabase test db --file supabase/tests/database/01_schema_structure.test.sql

Run Tests with Verbose Output

supabase test db --verbose

Test Coverage

Tables Tested

  • profiles
  • feedbacks
  • tablos
  • tablo_access
  • tablo_invites
  • events
  • notes
  • shared_notes
  • note_access
  • notifications

RLS Policies Tested

  • User isolation and access control
  • Tablo ownership and sharing
  • Note privacy and public sharing
  • Event access based on tablo permissions
  • Feedback insertion restrictions
  • Notification visibility and update permissions

Triggers Tested

  • Auto-creation of tablo_access for owners
  • Profile last_signed_in updates
  • Tablo invite status updates on login
  • Stripe subscription profile updates
  • Notification creation for all major table changes (tablos, tasks, events, notes, tablo_access, tablo_invites)

Functions Tested

  • Stripe customer and subscription queries
  • User payment status checks
  • Security definer permissions
  • Active subscription retrieval

Views Tested

  • user_tablos view with access levels
  • active_subscriptions view
  • Security invoker settings

Indexes Tested

  • Foreign key indexes
  • Query optimization indexes
  • Unique constraints
  • Performance coverage

Test Results

After running tests, you'll see output like:

supabase/tests/database/01_schema_structure.test.sql .. ok
supabase/tests/database/02_rls_policies_core.test.sql .. ok
supabase/tests/database/03_rls_policies_notes.test.sql .. ok
supabase/tests/database/09_notifications.test.sql .. ok
supabase/tests/database/10_rls_policies_notifications.test.sql .. ok
All tests successful.
Files=10, Tests=382, 1 wallclock secs
Result: PASS

Troubleshooting

Test Failures

If tests fail, check:

  1. All migrations have been applied to your local database
  2. The stripe schema exists (from stripe-sync-engine)
  3. The pgTAP extension is installed

Missing pgTAP Extension

If you get errors about pgTAP not being found, ensure it's enabled in your Supabase project.

Database State

Tests use transactions and rollback at the end, so they won't affect your database state. Each test file creates its own test data and cleans up automatically.

Continuous Integration

These tests can be integrated into your CI/CD pipeline:

# In your CI script
supabase start
supabase db reset
supabase test db

Writing New Tests

When adding new features:

  1. Add schema tests to 01_schema_structure.test.sql
  2. Add RLS policy tests to the appropriate RLS test file
  3. Add trigger/function tests to 05_triggers.test.sql or 06_stripe_functions.test.sql
  4. Update the plan count at the top of each file

Use the pgTAP documentation for available test functions: https://pgtap.org/documentation.html

Total Test Count

  • 382 tests across 10 test files (71 notifications schema/triggers/NULL-actor + 19 notifications RLS)
  • Comprehensive coverage of all database components
  • Security-focused testing for RLS and permissions
  • Full notification system coverage including triggers, RLS, and NULL actor (service role) scenarios