File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -95,6 +95,26 @@ ssh ${VPS_HOST} "/usr/local/bin/restore-db.sh /var/backups/kelas-db/prod_2026011
9595ssh ${VPS_HOST} " tail -50 /var/log/kelas-backup.log"
9696```
9797
98+ ## E2E Testing Docker/Production
99+
100+ Run smoke tests against Docker container or production:
101+
102+ ``` bash
103+ # Test local Docker container (localhost:3000)
104+ npm run test:e2e:docker -- e2e/smoke.spec.ts
105+
106+ # Test production deployment
107+ npm run test:e2e:production -- e2e/smoke.spec.ts
108+
109+ # Test custom URL
110+ DOCKER_URL=http://staging.example.com npm run test:e2e:docker -- e2e/smoke.spec.ts
111+ ```
112+
113+ ** Note:** Only smoke tests work against Docker/production. Full E2E suite
114+ requires the test database setup (see issue rb-myu for details).
115+
116+ See ` playwright.docker.config.ts ` for configuration details.
117+
98118## Future Improvements
99119
100120- ** Litestream** : Real-time replication to S3 (see epic rb-8xp)
Original file line number Diff line number Diff line change 1+ import { test , expect } from '@playwright/test'
2+
3+ /**
4+ * Smoke tests for public pages - no authentication required.
5+ * These can run against any environment: local, Docker, or production.
6+ *
7+ * Usage:
8+ * npm run test:e2e:production -- smoke.spec.ts
9+ * npm run test:e2e:docker -- smoke.spec.ts
10+ */
11+
12+ test . describe ( 'Public pages smoke tests' , ( ) => {
13+ test ( 'homepage loads and shows content' , async ( { page } ) => {
14+ await page . goto ( '/' )
15+ await expect ( page ) . toHaveTitle ( / R u m a h B e r b a g i / )
16+ await expect ( page . locator ( 'body' ) ) . toBeVisible ( )
17+ } )
18+
19+ test ( 'login page is accessible' , async ( { page } ) => {
20+ await page . goto ( '/login' )
21+ await expect ( page . locator ( 'body' ) ) . toBeVisible ( )
22+ await expect ( page . getByText ( 'Masuk ke akun Anda' ) ) . toBeVisible ( )
23+ await expect (
24+ page . getByRole ( 'button' , { name : / k i r i m l i n k / i } )
25+ ) . toBeVisible ( )
26+ } )
27+
28+ test ( 'returns 200 for main routes' , async ( { request } ) => {
29+ const routes = [ '/' , '/login' ]
30+
31+ for ( const route of routes ) {
32+ const response = await request . get ( route )
33+ expect ( response . status ( ) , `${ route } should return 200` ) . toBe ( 200 )
34+ }
35+ } )
36+ } )
Original file line number Diff line number Diff line change 2727 "test:e2e" : " playwright test" ,
2828 "test:e2e:dev" : " cross-env RUNNING_E2E=true start-server-and-test dev http-get://localhost:3000/ test:e2e" ,
2929 "test:e2e:run" : " cross-env RUNNING_E2E=true DATABASE_URL=file:./test.db start-server-and-test start:e2e http-get://localhost:3000/ test:e2e" ,
30+ "test:e2e:docker" : " playwright test --config=playwright.docker.config.ts" ,
31+ "test:e2e:production" : " cross-env BASE_URL=https://kelas.rumahberbagi.com playwright test --config=playwright.docker.config.ts" ,
3032 "type-check" : " tsc --noEmit" ,
3133 "setup" : " npm install && prisma migrate reset --force --schema=./prisma/schema.sqlite.prisma && npm run test:e2e:run" ,
3234 "presetup" : " npx playwright install-deps"
Original file line number Diff line number Diff line change 1+ import { PlaywrightTestConfig , devices } from '@playwright/test'
2+ import { Fixtures } from './e2e/base-test'
3+
4+ /**
5+ * Playwright configuration for testing Docker/Kamal deployments
6+ *
7+ * Usage:
8+ * npm run test:e2e:docker # Test local Docker container (localhost:3000)
9+ * npm run test:e2e:production # Test production (kelas.rumahberbagi.com)
10+ * DOCKER_URL=http://host:port npm run test:e2e:docker # Custom URL
11+ *
12+ * This config differs from the main config:
13+ * - Uses DOCKER_URL env var for flexible target URLs
14+ * - No test server (expects container already running)
15+ * - Reduced test parallelism for stability
16+ * - Smoke tests subset by default (can be overridden)
17+ */
18+
19+ const baseURL =
20+ process . env . DOCKER_URL || process . env . BASE_URL || 'http://localhost:3000'
21+
22+ const config : PlaywrightTestConfig < Fixtures > = {
23+ forbidOnly : ! ! process . env . CI ,
24+ retries : process . env . CI ? 2 : 1 ,
25+ testDir : './e2e' ,
26+ globalTimeout : 10 * 60 * 1000 ,
27+ timeout : 30000 ,
28+ workers : 2 ,
29+ use : {
30+ trace : 'on-first-retry' ,
31+ baseURL,
32+ screenshot : 'only-on-failure' ,
33+ } ,
34+ projects : [
35+ {
36+ name : 'chromium' ,
37+ use : { ...devices [ 'Desktop Chrome' ] } ,
38+ } ,
39+ {
40+ name : 'mobile' ,
41+ use : {
42+ browserName : 'chromium' ,
43+ ...devices [ 'Pixel 4' ] ,
44+ } ,
45+ } ,
46+ ] ,
47+ }
48+
49+ export default config
You can’t perform that action at this time.
0 commit comments