QA Strategy & Test Infrastructure
Version: 3.0.0 Date: 2026-05-07
Goal: Establish a comprehensive, automated testing pipeline for Tower — backend unit tests, integration tests with real services, front-end unit tests, and Playwright e2e tests.
Solution: Multi-layer test strategy with Docker-based integration environment, CI pipeline rework, and full front-end test harness.
Features:
- Backend unit tests audited and fixed (guards, services, storage, source providers)
- Integration tests with real MinIO, Azurite, Gitea, WireMock, FTP via
docker-compose.test.yml - Seed scripts for test data (MinIO, Azurite, Gitea)
- Mock
bcyip-toolkitbinary for offline protect workflow testing TestHelperclass with S3/Azure/FTP helpers and webhook trigger utilities- Front-end unit tests (Dashboard, login, activate, RenderWhen, format, tasks)
- Playwright e2e tests (auth, dashboard, storage flow, workflow creation)
- Jest coverage threshold + JUnit/Cobertura reporting
- CI deduplication via
workflow:rules(one pipeline per push) - 4 CI test stages: unit back, integration back, unit front, e2e front
Implementation Details:
--experimental-vm-modulesrequired for AWS SDK v3 Jest VM compatibilityjest.setSystemTime()requires epoch ms (not Date) after@sinonjs/fake-timersupgrade- Integration and e2e auto on MR→master; manual otherwise
Files Modified:
.gitlab-ci.yml- Full CI rework, workflow rules, split test stages, artifactsdocker-compose.test.yml- Test service definitionstest/helpers/test-helper.ts- TestHelper classtest/helpers/webhook-fixtures.ts- Webhook trigger factoriestest/integration/*.spec.ts- Golden-path and storage integration teststest/setup/seed-*.sh- Container seed scriptstest/mocks/bcyip-toolkit- Mock binarytest/wiremock/mappings/*.json- WireMock stubstest/run-integration.sh- Local integration runnersrc/**/*.spec.ts- Backend unit test audit and fixesui/e2e/*.spec.ts- Playwright e2e testsui/src/**/*.test.tsx- Vitest unit testsui/playwright.config.ts- Playwright configurationui/src/test/render.tsx- Test render helper with providerspackage.json-@nestjs/{core,common,platform-express}→ 11.1.18, npm overrides for transitive vulnssrc/core/data/data.service.spec.ts- FixedsetSystemTimeepoch format