PostgreSQL Integration Tests
This directory contains Docker-based integration tests for the PostgreSQL reader.
Quick Start
Run integration tests with Docker:
# From project root
make docker-test
Or use the script directly:
./tests/postgres/run_tests.sh
Manual Testing
Start the PostgreSQL test database:
make docker-up
Run tests with the running database:
export RELSPEC_TEST_PG_CONN="postgres://relspec:relspec_test_password@localhost:5433/relspec_test"
go test -v ./pkg/readers/pgsql/
Stop the database:
make docker-down
Test Database Contents
The test database (relspec_test) contains:
Schemas (3)
- public: Main schema with user and blog data
- analytics: Event tracking and analytics data
- inventory: Product inventory management
Tables (14 total)
- public.users: User accounts with various data types
- public.posts: Blog posts with foreign keys
- public.comments: Nested comments (self-referencing FK)
- public.categories: Post categories
- public.post_categories: Many-to-many junction table
- analytics.events: Event tracking
- analytics.page_views: Page view analytics
- analytics.conversions: Conversion tracking
- inventory.products: Product catalog
- inventory.warehouses: Warehouse locations
- inventory.stock: Product stock by warehouse
Views (8 total)
- public.active_users: Active users only
- public.published_posts: Published posts with author info
- public.post_stats: Post statistics
- analytics.daily_stats: Daily aggregated statistics
- analytics.top_pages: Most viewed pages
- inventory.available_products: Available products with stock
- inventory.low_stock_products: Products with low inventory
Sequences (5 total)
- public.users_id_seq: Users ID sequence
- public.posts_id_seq: Posts ID sequence (with cycle)
- analytics.events_id_seq: Events ID sequence
- Plus auto-generated sequences for serial columns
Constraint Types
- Primary Keys: All tables have PKs
- Foreign Keys: Including cross-schema references
- Unique Constraints: Username, email, SKU, etc.
- Check Constraints: Age limits, status validation, balance checks
Index Types
- btree: Standard B-tree indexes
- gin: GIN indexes for JSONB and array columns
- hash: Hash indexes for session lookups
- Unique: Unique indexes
- Partial: Conditional indexes (WHERE clauses)
- Composite: Multi-column indexes
Connection Details
- Host: localhost
- Port: 5433 (to avoid conflicts with local PostgreSQL)
- Database: relspec_test
- User: relspec
- Password: relspec_test_password
Full connection string:
postgres://relspec:relspec_test_password@localhost:5433/relspec_test
Requirements
- Docker or Docker Compose
- Go 1.25+
Makefile Targets
make docker-up- Start PostgreSQL containermake docker-down- Stop PostgreSQL containermake docker-test- Run full test suite with automatic cleanupmake docker-test-integration- Run integration tests only
Test Coverage
The tests verify:
- Schema introspection (excluding system schemas)
- Table metadata extraction
- View definitions and columns
- Sequence properties and ownership
- Column data types and constraints
- Primary key detection
- Foreign key relationships with referential actions
- Unique and check constraints
- Index types and definitions
- Cross-schema relationships
- Data type mapping
- Error handling