2.6 KiB
2.6 KiB
description
| description |
|---|
| Integrate phase - test adapters with real infrastructure |
Phase 3: Integrate
Purpose
Test adapter implementations (database, external APIs) with real infrastructure using Testcontainers.
Prerequisites
- Phase 2 (Implement) completed
- Unit tests passing
Applicability (Default: REQUIRED)
This phase is REQUIRED by default. You may ONLY skip it if ALL of the following are true:
- No storage/repository files were modified or created
- No external API client files were modified or created
- No database queries or schemas were changed
- No message queue, cache, or I/O adapter code was touched
If ANY adapter was modified, you MUST write integration tests.
If This Phase Fails
If integration tests fail:
- Check container logs for errors
- Verify schema matches expectations
- Fix adapter implementation
- Re-run tests before proceeding
Steps
1. Setup Testcontainers
Go Example:
func TestPostgresStorage_Integration(t *testing.T) {
if testing.Short() {
t.Skip("skipping integration test")
}
ctx := context.Background()
// Start PostgreSQL container
postgres, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
ContainerRequest: testcontainers.ContainerRequest{
Image: "postgres:16-alpine",
ExposedPorts: []string{"5432/tcp"},
Env: map[string]string{
"POSTGRES_USER": "test",
"POSTGRES_PASSWORD": "test",
"POSTGRES_DB": "test",
},
WaitingFor: wait.ForListeningPort("5432/tcp"),
},
Started: true,
})
require.NoError(t, err)
defer postgres.Terminate(ctx)
// Get connection string and run tests
}
2. Write Integration Tests
Test file naming: *_integration_test.go or *.integration.spec.ts
func TestPostgresStorage_CreateTask(t *testing.T) {
// Uses real PostgreSQL from Testcontainers
storage := NewPostgresStorage(pool)
task, err := storage.Create(ctx, userID, req)
require.NoError(t, err)
assert.NotEqual(t, uuid.Nil, task.ID)
}
3. Run Integration Tests
# Go - run all tests including integration
go test -v ./...
4. Manual Check (Optional)
- If UI involved, launch a browser to verify the basic flow.
- If API involved, use
curlorclientto hit the endpoint.
Completion Criteria
- Integration tests written for all adapters
- Tests pass with real infrastructure (Testcontainers)
- Database queries verified against real PostgreSQL
Next Phase
Proceed to Phase 4: Verify (/4-verify)