1
- import { defineConfig } from "@playwright/test" ;
1
+ import { defineConfig , ReporterDescription } from "@playwright/test" ;
2
2
import { generateSimpleLayout } from "./slack-layout-simple" ;
3
3
4
+
5
+
6
+ function getReporters ( ) : ReporterDescription [ ] {
7
+ const videoReporter : ReporterDescription = [
8
+ "./reporters/s3-video-reporter.ts" ,
9
+ {
10
+ outputFile : "test-results/video-urls.json" ,
11
+ uploadVideos : true ,
12
+ } ,
13
+ ] ;
14
+ const s3Reporter : ReporterDescription = [
15
+ "./node_modules/playwright-slack-report/dist/src/SlackReporter.js" ,
16
+ {
17
+ slackWebHookUrl : process . env . SLACK_WEBHOOK_URL ,
18
+ sendResults : "always" , // always send results
19
+ maxNumberOfFailuresToShow : 10 ,
20
+ layout : generateSimpleLayout , // Use our simple layout
21
+ } ,
22
+ ] ;
23
+ const githubReporter : ReporterDescription = [ "github" ] ;
24
+ const htmlReporter : ReporterDescription = [ "html" , { open : "never" } ] ;
25
+ const cleanReporter : ReporterDescription = [ "./clean-reporter.js" ] ;
26
+
27
+ const addVideoAndSlack = process . env . SLACK_WEBHOOK_URL && process . env . AWS_S3_BUCKET_NAME ;
28
+
29
+ return [
30
+ process . env . CI ? githubReporter : undefined ,
31
+ addVideoAndSlack ? videoReporter : undefined ,
32
+ addVideoAndSlack ? s3Reporter : undefined ,
33
+ htmlReporter ,
34
+ cleanReporter ,
35
+ ] . filter ( Boolean ) as ReporterDescription [ ] ;
36
+ }
37
+
38
+ function getBaseUrl ( ) : string {
39
+ if ( process . env . BASE_URL ) {
40
+ return new URL ( process . env . BASE_URL ) . toString ( ) ;
41
+ }
42
+ console . error ( "BASE_URL is not set" ) ;
43
+ process . exit ( 1 ) ;
44
+ }
45
+
4
46
export default defineConfig ( {
5
47
timeout : process . env . CI ? 300_000 : 120_000 , // 5min in CI, 2min locally for AI tests
6
- workers : 1 , // Serial execution to avoid race conditions and AI service conflicts
7
48
testDir : "./tests" ,
8
- retries : process . env . CI ? 3 : 0 , // More retries for flaky AI tests in CI, 0 for local
9
- fullyParallel : false , // Serial execution for deterministic AI test results
49
+ retries : process . env . CI ? 1 : 0 , // More retries for flaky AI tests in CI, 0 for local
50
+ fullyParallel : true ,
10
51
use : {
11
52
headless : true ,
12
53
viewport : { width : 1280 , height : 720 } ,
@@ -20,6 +61,7 @@ export default defineConfig({
20
61
actionTimeout : 60_000 , // 1 minute for AI-driven actions (clicking, filling)
21
62
// Test isolation - ensure clean state between tests
22
63
testIdAttribute : "data-testid" ,
64
+ baseURL : getBaseUrl ( ) ,
23
65
} ,
24
66
expect : {
25
67
timeout : 90_000 , // 1.5 minutes for AI-generated content to appear
@@ -38,53 +80,5 @@ export default defineConfig({
38
80
} ,
39
81
} ,
40
82
] ,
41
- reporter : process . env . CI
42
- ? [
43
- [ "github" ] ,
44
- [ "html" , { open : "never" } ] ,
45
- // S3 video uploader (runs first to upload videos)
46
- [
47
- "./reporters/s3-video-reporter.ts" ,
48
- {
49
- outputFile : "test-results/video-urls.json" ,
50
- uploadVideos : true ,
51
- } ,
52
- ] ,
53
- // Slack notifications (runs after videos are uploaded)
54
- [
55
- "./node_modules/playwright-slack-report/dist/src/SlackReporter.js" ,
56
- {
57
- slackWebHookUrl : process . env . SLACK_WEBHOOK_URL ,
58
- sendResults : "always" , // always send results
59
- maxNumberOfFailuresToShow : 10 ,
60
- layout : generateSimpleLayout , // Use our simple layout
61
- } ,
62
- ] ,
63
- ]
64
- : process . env . SLACK_WEBHOOK_URL && process . env . AWS_S3_BUCKET_NAME
65
- ? [
66
- // Full local testing with S3 + Slack (when both are configured)
67
- [
68
- "./reporters/s3-video-reporter.ts" ,
69
- {
70
- outputFile : "test-results/video-urls.json" ,
71
- uploadVideos : true ,
72
- } ,
73
- ] ,
74
- [
75
- "./node_modules/playwright-slack-report/dist/src/SlackReporter.js" ,
76
- {
77
- slackWebHookUrl : process . env . SLACK_WEBHOOK_URL ,
78
- sendResults : "always" ,
79
- maxNumberOfFailuresToShow : 10 ,
80
- layout : generateSimpleLayout ,
81
- } ,
82
- ] ,
83
- [ "html" , { open : "never" } ] ,
84
- ]
85
- : [
86
- // Standard local testing
87
- [ "./clean-reporter.js" ] ,
88
- [ "html" , { open : "never" } ] ,
89
- ] ,
83
+ reporter : getReporters ( ) ,
90
84
} ) ;
0 commit comments