@@ -68,3 +68,55 @@ export async function seedPlaywrightUsers(
6868 }
6969 }
7070}
71+
72+ /**
73+ * Seed the full assignment chain for Playwright test users:
74+ * pw-uploader → pw-validator → pw-approver
75+ *
76+ * Idempotent: 409 Conflict means assignment already exists, skip.
77+ */
78+ export async function seedPlaywrightAssignments (
79+ adminToken : string ,
80+ ) : Promise < void > {
81+ const headers = { Authorization : `Bearer ${ adminToken } ` } ;
82+
83+ // Fetch user IDs by role
84+ const usersRes = await axios . get < {
85+ data : Array < { id : string ; email : string ; role : string } > ;
86+ } > ( `${ BACKEND_URL } /admin/users` , { headers } ) ;
87+ const users = usersRes . data . data ;
88+
89+ const uploader = users . find ( ( u ) => u . email === PLAYWRIGHT_USERS . uploader . email ) ;
90+ const validator = users . find ( ( u ) => u . email === PLAYWRIGHT_USERS . validator . email ) ;
91+ const approver = users . find ( ( u ) => u . email === PLAYWRIGHT_USERS . approver . email ) ;
92+
93+ if ( ! uploader || ! validator || ! approver ) {
94+ throw new Error ( '[seed] Could not find all Playwright users to create assignments' ) ;
95+ }
96+
97+ // uploader → validator
98+ try {
99+ await axios . post (
100+ `${ BACKEND_URL } /admin/assignments/uploaders` ,
101+ { uploaderId : uploader . id , validatorId : validator . id } ,
102+ { headers } ,
103+ ) ;
104+ } catch ( err ) {
105+ if ( axios . isAxiosError ( err ) && err . response ?. status === 409 ) {
106+ // already assigned
107+ } else throw err ;
108+ }
109+
110+ // validator → approver
111+ try {
112+ await axios . post (
113+ `${ BACKEND_URL } /admin/assignments/validators` ,
114+ { validatorId : validator . id , approverId : approver . id } ,
115+ { headers } ,
116+ ) ;
117+ } catch ( err ) {
118+ if ( axios . isAxiosError ( err ) && err . response ?. status === 409 ) {
119+ // already assigned
120+ } else throw err ;
121+ }
122+ }
0 commit comments