1
- import type { Page } from "@playwright/test" ;
2
1
import { expect } from "@playwright/test" ;
3
2
import { v4 as uuidv4 } from "uuid" ;
4
3
@@ -10,7 +9,6 @@ import { test } from "./lib/fixtures";
10
9
import {
11
10
bookOptinEvent ,
12
11
bookTimeSlot ,
13
- createHttpServer ,
14
12
createUserWithSeatedEventAndAttendees ,
15
13
gotoRoutingLink ,
16
14
selectFirstAvailableTimeSlotNextMonth ,
@@ -24,54 +22,16 @@ test.afterEach(async ({ users }) => {
24
22
await users . deleteAll ( ) ;
25
23
} ) ;
26
24
27
- async function createWebhookReceiver ( page : Page ) {
28
- const webhookReceiver = createHttpServer ( ) ;
29
-
30
- await page . goto ( `/settings/developer/webhooks` ) ;
31
-
32
- // --- add webhook
33
- await page . click ( '[data-testid="new_webhook"]' ) ;
34
-
35
- await page . fill ( '[name="subscriberUrl"]' , webhookReceiver . url ) ;
36
-
37
- await page . fill ( '[name="secret"]' , "secret" ) ;
38
-
39
- await Promise . all ( [
40
- page . click ( "[type=submit]" ) ,
41
- page . waitForURL ( ( url ) => url . pathname . endsWith ( "/settings/developer/webhooks" ) ) ,
42
- ] ) ;
43
-
44
- // page contains the url
45
- expect ( page . locator ( `text='${ webhookReceiver . url } '` ) ) . toBeDefined ( ) ;
46
-
47
- return webhookReceiver ;
48
- }
49
-
50
25
test . describe ( "BOOKING_CREATED" , async ( ) => {
51
26
test ( "add webhook & test that creating an event triggers a webhook call" , async ( {
52
27
page,
53
28
users,
29
+ webhooks,
54
30
} , _testInfo ) => {
55
- const webhookReceiver = createHttpServer ( ) ;
56
31
const user = await users . create ( ) ;
57
32
const [ eventType ] = user . eventTypes ;
58
33
await user . apiLogin ( ) ;
59
- await page . goto ( `/settings/developer/webhooks` ) ;
60
-
61
- // --- add webhook
62
- await page . click ( '[data-testid="new_webhook"]' ) ;
63
-
64
- await page . fill ( '[name="subscriberUrl"]' , webhookReceiver . url ) ;
65
-
66
- await page . fill ( '[name="secret"]' , "secret" ) ;
67
-
68
- await Promise . all ( [
69
- page . click ( "[type=submit]" ) ,
70
- page . waitForURL ( ( url ) => url . pathname . endsWith ( "/settings/developer/webhooks" ) ) ,
71
- ] ) ;
72
-
73
- // page contains the url
74
- expect ( page . locator ( `text='${ webhookReceiver . url } '` ) ) . toBeDefined ( ) ;
34
+ const webhookReceiver = await webhooks . createReceiver ( ) ;
75
35
76
36
// --- Book the first available day next month in the pro user's "30min"-event
77
37
await page . goto ( `/${ user . username } /${ eventType . slug } ` ) ;
@@ -169,8 +129,8 @@ test.describe("BOOKING_REJECTED", async () => {
169
129
test ( "can book an event that requires confirmation and then that booking can be rejected by organizer" , async ( {
170
130
page,
171
131
users,
132
+ webhooks,
172
133
} ) => {
173
- const webhookReceiver = createHttpServer ( ) ;
174
134
// --- create a user
175
135
const user = await users . create ( ) ;
176
136
@@ -182,24 +142,7 @@ test.describe("BOOKING_REJECTED", async () => {
182
142
183
143
// --- login as that user
184
144
await user . apiLogin ( ) ;
185
-
186
- await page . goto ( `/settings/developer/webhooks` ) ;
187
-
188
- // --- add webhook
189
- await page . click ( '[data-testid="new_webhook"]' ) ;
190
-
191
- await page . fill ( '[name="subscriberUrl"]' , webhookReceiver . url ) ;
192
-
193
- await page . fill ( '[name="secret"]' , "secret" ) ;
194
-
195
- await Promise . all ( [
196
- page . click ( "[type=submit]" ) ,
197
- page . waitForURL ( ( url ) => url . pathname . endsWith ( "/settings/developer/webhooks" ) ) ,
198
- ] ) ;
199
-
200
- // page contains the url
201
- expect ( page . locator ( `text='${ webhookReceiver . url } '` ) ) . toBeDefined ( ) ;
202
-
145
+ const webhookReceiver = await webhooks . createReceiver ( ) ;
203
146
await page . goto ( "/bookings/unconfirmed" ) ;
204
147
await page . click ( '[data-testid="reject"]' ) ;
205
148
await page . click ( '[data-testid="rejection-confirm"]' ) ;
@@ -293,30 +236,14 @@ test.describe("BOOKING_REQUESTED", async () => {
293
236
test ( "can book an event that requires confirmation and get a booking requested event" , async ( {
294
237
page,
295
238
users,
239
+ webhooks,
296
240
} ) => {
297
- const webhookReceiver = createHttpServer ( ) ;
298
241
// --- create a user
299
242
const user = await users . create ( ) ;
300
243
301
244
// --- login as that user
302
245
await user . apiLogin ( ) ;
303
-
304
- await page . goto ( `/settings/developer/webhooks` ) ;
305
-
306
- // --- add webhook
307
- await page . click ( '[data-testid="new_webhook"]' ) ;
308
-
309
- await page . fill ( '[name="subscriberUrl"]' , webhookReceiver . url ) ;
310
-
311
- await page . fill ( '[name="secret"]' , "secret" ) ;
312
-
313
- await Promise . all ( [
314
- page . click ( "[type=submit]" ) ,
315
- page . waitForURL ( ( url ) => url . pathname . endsWith ( "/settings/developer/webhooks" ) ) ,
316
- ] ) ;
317
-
318
- // page contains the url
319
- expect ( page . locator ( `text='${ webhookReceiver . url } '` ) ) . toBeDefined ( ) ;
246
+ const webhookReceiver = await webhooks . createReceiver ( ) ;
320
247
321
248
// --- visit user page
322
249
await page . goto ( `/${ user . username } ` ) ;
@@ -410,13 +337,18 @@ test.describe("BOOKING_REQUESTED", async () => {
410
337
} ) ;
411
338
412
339
test . describe ( "BOOKING_RESCHEDULED" , async ( ) => {
413
- test ( "can reschedule a booking and get a booking rescheduled event" , async ( { page, users, bookings } ) => {
340
+ test ( "can reschedule a booking and get a booking rescheduled event" , async ( {
341
+ page,
342
+ users,
343
+ bookings,
344
+ webhooks,
345
+ } ) => {
414
346
const user = await users . create ( ) ;
415
347
const [ eventType ] = user . eventTypes ;
416
348
417
349
await user . apiLogin ( ) ;
418
350
419
- const webhookReceiver = await createWebhookReceiver ( page ) ;
351
+ const webhookReceiver = await webhooks . createReceiver ( ) ;
420
352
421
353
const booking = await bookings . create ( user . id , user . username , eventType . id , {
422
354
status : BookingStatus . ACCEPTED ,
@@ -451,6 +383,7 @@ test.describe("BOOKING_RESCHEDULED", async () => {
451
383
page,
452
384
users,
453
385
bookings,
386
+ webhooks,
454
387
} ) => {
455
388
const { user, eventType, booking } = await createUserWithSeatedEventAndAttendees ( { users, bookings } , [
456
389
{ name : "John First" , email : "first+seats@cal.com" , timeZone : "Europe/Berlin" } ,
@@ -464,7 +397,7 @@ test.describe("BOOKING_RESCHEDULED", async () => {
464
397
465
398
await user . apiLogin ( ) ;
466
399
467
- const webhookReceiver = await createWebhookReceiver ( page ) ;
400
+ const webhookReceiver = await webhooks . createReceiver ( ) ;
468
401
469
402
const bookingAttendees = await prisma . attendee . findMany ( {
470
403
where : { bookingId : booking . id } ,
@@ -670,24 +603,13 @@ test.describe("MEETING_ENDED, MEETING_STARTED", async () => {
670
603
} ) ;
671
604
672
605
test . describe ( "FORM_SUBMITTED" , async ( ) => {
673
- test ( "on submitting user form, triggers user webhook" , async ( { page, users, routingForms } ) => {
674
- const webhookReceiver = createHttpServer ( ) ;
606
+ test ( "on submitting user form, triggers user webhook" , async ( { page, users, routingForms, webhooks } ) => {
675
607
const user = await users . create ( null , {
676
608
hasTeam : true ,
677
609
} ) ;
678
610
679
611
await user . apiLogin ( ) ;
680
-
681
- await page . goto ( `/settings/developer/webhooks/new` ) ;
682
-
683
- // Add webhook
684
- await page . fill ( '[name="subscriberUrl"]' , webhookReceiver . url ) ;
685
- await page . fill ( '[name="secret"]' , "secret" ) ;
686
- await page . click ( "[type=submit]" ) ;
687
-
688
- // Page contains the url
689
- expect ( page . locator ( `text='${ webhookReceiver . url } '` ) ) . toBeDefined ( ) ;
690
-
612
+ const webhookReceiver = await webhooks . createReceiver ( ) ;
691
613
await page . waitForLoadState ( "networkidle" ) ;
692
614
693
615
const form = await routingForms . create ( {
@@ -736,21 +658,12 @@ test.describe("FORM_SUBMITTED", async () => {
736
658
webhookReceiver . close ( ) ;
737
659
} ) ;
738
660
739
- test ( "on submitting team form, triggers team webhook" , async ( { page, users, routingForms } ) => {
740
- const webhookReceiver = createHttpServer ( ) ;
661
+ test ( "on submitting team form, triggers team webhook" , async ( { page, users, routingForms, webhooks } ) => {
741
662
const user = await users . create ( null , {
742
663
hasTeam : true ,
743
664
} ) ;
744
665
await user . apiLogin ( ) ;
745
-
746
- await page . goto ( `/settings/developer/webhooks` ) ;
747
- const teamId = await clickFirstTeamWebhookCta ( page ) ;
748
-
749
- // Add webhook
750
- await page . fill ( '[name="subscriberUrl"]' , webhookReceiver . url ) ;
751
- await page . fill ( '[name="secret"]' , "secret" ) ;
752
- await page . click ( "[type=submit]" ) ;
753
-
666
+ const { webhookReceiver, teamId } = await webhooks . createTeamReceiver ( ) ;
754
667
const form = await routingForms . create ( {
755
668
name : "Test Form" ,
756
669
userId : user . id ,
@@ -798,40 +711,14 @@ test.describe("FORM_SUBMITTED", async () => {
798
711
} ) ;
799
712
} ) ;
800
713
801
- async function clickFirstTeamWebhookCta ( page : Page ) {
802
- await page . click ( '[data-testid="new_webhook"]' ) ;
803
- await page . click ( '[data-testid="option-team-1"]' ) ;
804
- await page . waitForURL ( ( u ) => u . pathname === "/settings/developer/webhooks/new" ) ;
805
- const url = page . url ( ) ;
806
- const teamId = Number ( new URL ( url ) . searchParams . get ( "teamId" ) ) as number ;
807
- return teamId ;
808
- }
809
-
810
714
test . describe ( "BOOKING_NO_SHOW_UPDATED" , async ( ) => {
811
- test ( "on marking an attendee as no-show, triggers webhook" , async ( { page, users } ) => {
812
- const webhookReceiver = createHttpServer ( ) ;
715
+ test ( "on marking an attendee as no-show, triggers webhook" , async ( { page, users, webhooks } ) => {
813
716
// --- create a user
814
717
const user = await users . create ( ) ;
815
718
816
719
// --- login as that user
817
720
await user . apiLogin ( ) ;
818
-
819
- await page . goto ( `/settings/developer/webhooks` ) ;
820
-
821
- // --- add webhook
822
- await page . click ( '[data-testid="new_webhook"]' ) ;
823
-
824
- await page . fill ( '[name="subscriberUrl"]' , webhookReceiver . url ) ;
825
-
826
- await page . fill ( '[name="secret"]' , "secret" ) ;
827
-
828
- await Promise . all ( [
829
- page . click ( "[type=submit]" ) ,
830
- page . waitForURL ( ( url ) => url . pathname . endsWith ( "/settings/developer/webhooks" ) ) ,
831
- ] ) ;
832
-
833
- // page contains the url
834
- expect ( page . locator ( `text='${ webhookReceiver . url } '` ) ) . toBeDefined ( ) ;
721
+ const webhookReceiver = await webhooks . createReceiver ( ) ;
835
722
836
723
// --- visit user page
837
724
await page . goto ( `/${ user . username } ` ) ;
0 commit comments