1
+ import { expect } from "@playwright/test" ;
2
+ import { test } from '@umbraco/playwright-testhelpers' ;
3
+
4
+ const webhookName = 'Test Webhook' ;
5
+ let webhookSiteToken = '' ;
6
+
7
+ test . beforeEach ( async ( { umbracoUi, umbracoApi} ) => {
8
+ await umbracoApi . webhook . ensureNameNotExists ( webhookName ) ;
9
+ await umbracoUi . goToBackOffice ( ) ;
10
+ webhookSiteToken = await umbracoApi . webhook . generateWebhookSiteToken ( ) ;
11
+ } ) ;
12
+
13
+ test . afterEach ( async ( { umbracoApi} ) => {
14
+ await umbracoApi . webhook . ensureNameNotExists ( webhookName ) ;
15
+ } ) ;
16
+
17
+ test ( 'can create a webhook' , async ( { umbracoApi, umbracoUi} ) => {
18
+ // Arrange
19
+ const event = 'Content Deleted' ;
20
+ const webhookSiteUrl = umbracoApi . webhook . webhookSiteUrl + webhookSiteToken ;
21
+ await umbracoUi . webhook . goToWebhooks ( ) ;
22
+
23
+ // Act
24
+ await umbracoUi . webhook . clickWebhookCreateButton ( ) ;
25
+ await umbracoUi . webhook . enterWebhookName ( webhookName ) ;
26
+ await umbracoUi . webhook . enterUrl ( webhookSiteUrl ) ;
27
+ await umbracoUi . webhook . clickChooseEventButton ( ) ;
28
+ await umbracoUi . webhook . clickTextButtonWithName ( event ) ;
29
+ await umbracoUi . webhook . clickSubmitButton ( ) ;
30
+ await umbracoUi . webhook . clickSaveButton ( ) ;
31
+
32
+ // Assert
33
+ await umbracoUi . webhook . isSuccessStateVisibleForSaveButton ( ) ;
34
+ expect ( await umbracoApi . webhook . doesNameExist ( webhookName ) ) . toBeTruthy ( ) ;
35
+ expect ( await umbracoApi . webhook . doesWebhookHaveUrl ( webhookName , webhookSiteUrl ) ) . toBeTruthy ( ) ;
36
+ expect ( await umbracoApi . webhook . doesWebhookHaveEvent ( webhookName , event ) ) . toBeTruthy ( ) ;
37
+ await umbracoApi . webhook . isWebhookEnabled ( webhookName ) ;
38
+ } ) ;
39
+
40
+ test ( 'can update webhook name' , async ( { umbracoApi, umbracoUi} ) => {
41
+ // Arrange
42
+ const updatedName = 'Updated Webhook' ;
43
+ await umbracoApi . webhook . createDefaultWebhook ( webhookName , webhookSiteToken ) ;
44
+ await umbracoUi . webhook . goToWebhookWithName ( webhookName ) ;
45
+
46
+ // Act
47
+ await umbracoUi . webhook . enterWebhookName ( updatedName ) ;
48
+ await umbracoUi . webhook . clickSaveButton ( ) ;
49
+
50
+ // Assert
51
+ await umbracoUi . webhook . isSuccessStateVisibleForSaveButton ( ) ;
52
+ expect ( await umbracoApi . webhook . doesNameExist ( updatedName ) ) . toBeTruthy ( ) ;
53
+ expect ( await umbracoApi . webhook . doesNameExist ( webhookName ) ) . toBeFalsy ( ) ;
54
+ } ) ;
55
+
56
+ test ( 'can delete a webhook' , async ( { umbracoApi, umbracoUi} ) => {
57
+ // Arrange
58
+ await umbracoApi . webhook . createDefaultWebhook ( webhookName , webhookSiteToken ) ;
59
+ await umbracoUi . webhook . goToWebhooks ( ) ;
60
+
61
+ // Act
62
+ await umbracoUi . webhook . clickDeleteWebhookWithName ( webhookName ) ;
63
+ await umbracoUi . webhook . clickConfirmToDeleteButton ( ) ;
64
+
65
+ // Assert
66
+ expect ( await umbracoApi . webhook . doesNameExist ( webhookName ) ) . toBeFalsy ( ) ;
67
+ } ) ;
68
+
69
+ test ( 'can add content type for a webhook' , async ( { umbracoApi, umbracoUi} ) => {
70
+ // Arrange
71
+ const contentTypeName = 'Test Document Type For Webhook' ;
72
+ const documentTypeId = await umbracoApi . documentType . createDefaultDocumentType ( contentTypeName ) ;
73
+ await umbracoApi . webhook . createDefaultWebhook ( webhookName , webhookSiteToken ) ;
74
+ await umbracoUi . webhook . goToWebhookWithName ( webhookName ) ;
75
+
76
+ // Act
77
+ await umbracoUi . webhook . clickChooseContentTypeButton ( ) ;
78
+ await umbracoUi . webhook . clickModalMenuItemWithName ( contentTypeName ) ;
79
+ await umbracoUi . webhook . clickChooseModalButton ( ) ;
80
+ await umbracoUi . webhook . clickSaveButton ( ) ;
81
+
82
+ // Assert
83
+ await umbracoUi . webhook . isSuccessStateVisibleForSaveButton ( ) ;
84
+ expect ( await umbracoApi . webhook . doesNameExist ( webhookName ) ) . toBeTruthy ( ) ;
85
+ expect ( await umbracoApi . webhook . doesWebhookHaveContentTypeId ( webhookName , documentTypeId ) ) . toBeTruthy ( ) ;
86
+
87
+ // Clean
88
+ await umbracoApi . documentType . ensureNameNotExists ( contentTypeName ) ;
89
+ } ) ;
90
+
91
+ test ( 'can add header for a webhook' , async ( { umbracoApi, umbracoUi} ) => {
92
+ // Arrange
93
+ const headerName = 'test-header-name' ;
94
+ const headerValue = 'test-header-value' ;
95
+ await umbracoApi . webhook . createDefaultWebhook ( webhookName , webhookSiteToken ) ;
96
+ await umbracoUi . webhook . goToWebhookWithName ( webhookName ) ;
97
+
98
+ // Act
99
+ await umbracoUi . webhook . clickAddHeadersButton ( ) ;
100
+ await umbracoUi . webhook . enterHeaderName ( headerName ) ;
101
+ await umbracoUi . webhook . enterHeaderValue ( headerValue ) ;
102
+ await umbracoUi . webhook . clickSaveButton ( ) ;
103
+
104
+ // Assert
105
+ await umbracoUi . webhook . isSuccessStateVisibleForSaveButton ( ) ;
106
+ expect ( await umbracoApi . webhook . doesNameExist ( webhookName ) ) . toBeTruthy ( ) ;
107
+ expect ( await umbracoApi . webhook . doesWebhookHaveHeader ( webhookName , headerName , headerValue ) ) . toBeTruthy ( ) ;
108
+ } ) ;
109
+
110
+ test ( 'can disable a webhook' , async ( { umbracoApi, umbracoUi} ) => {
111
+ // Arrange
112
+ await umbracoApi . webhook . createDefaultWebhook ( webhookName , webhookSiteToken ) ;
113
+ await umbracoUi . webhook . goToWebhookWithName ( webhookName ) ;
114
+
115
+ // Act
116
+ await umbracoUi . webhook . clickEnabledToggleButton ( ) ;
117
+ await umbracoUi . webhook . clickSaveButton ( ) ;
118
+
119
+ // Assert
120
+ await umbracoUi . webhook . isSuccessStateVisibleForSaveButton ( ) ;
121
+ expect ( await umbracoApi . webhook . doesNameExist ( webhookName ) ) . toBeTruthy ( ) ;
122
+ await umbracoApi . webhook . isWebhookEnabled ( webhookName , false ) ;
123
+ } ) ;
124
+
125
+ test ( 'cannot remove all events from a webhook' , async ( { umbracoApi, umbracoUi} ) => {
126
+ // Arrange
127
+ const event = 'Content Deleted' ;
128
+ await umbracoApi . webhook . createDefaultWebhook ( webhookName , webhookSiteToken , event ) ;
129
+ await umbracoUi . webhook . goToWebhookWithName ( webhookName ) ;
130
+
131
+ // Act
132
+ await umbracoUi . webhook . clickRemoveButtonForName ( event ) ;
133
+ await umbracoUi . webhook . clickSaveButton ( ) ;
134
+
135
+ // Assert
136
+ await umbracoUi . content . isErrorNotificationVisible ( ) ;
137
+ } ) ;
138
+
139
+ test ( 'can remove a content type from a webhook' , async ( { umbracoApi, umbracoUi} ) => {
140
+ // Arrange
141
+ const event = 'Media Saved' ;
142
+ const mediaTypeName = 'Audio' ;
143
+ const mediaTypeData = await umbracoApi . mediaType . getByName ( mediaTypeName ) ;
144
+ await umbracoApi . webhook . createWebhookForSpecificContentType ( webhookName , webhookSiteToken , event , mediaTypeName ) ;
145
+ expect ( await umbracoApi . webhook . doesWebhookHaveContentTypeId ( webhookName , mediaTypeData . id ) ) . toBeTruthy ( ) ;
146
+ await umbracoUi . webhook . goToWebhookWithName ( webhookName ) ;
147
+
148
+ // Act
149
+ await umbracoUi . webhook . clickRemoveButtonForName ( mediaTypeName ) ;
150
+ await umbracoUi . webhook . clickConfirmRemoveButton ( ) ;
151
+ await umbracoUi . webhook . clickSaveButton ( ) ;
152
+
153
+ // Assert
154
+ await umbracoUi . webhook . isSuccessStateVisibleForSaveButton ( ) ;
155
+ expect ( await umbracoApi . webhook . doesWebhookHaveContentTypeId ( webhookName , mediaTypeData . id ) ) . toBeFalsy ( ) ;
156
+ } ) ;
157
+
158
+ test ( 'can remove a header from a webhook' , async ( { umbracoApi, umbracoUi} ) => {
159
+ // Arrange
160
+ const event = 'Content Published' ;
161
+ const headerName = 'test-header-name' ;
162
+ const headerValue = 'automation-test' ;
163
+ await umbracoApi . webhook . createWebhookWithHeader ( webhookName , webhookSiteToken , event , headerName , headerValue ) ;
164
+ expect ( await umbracoApi . webhook . doesWebhookHaveHeader ( webhookName , headerName , headerValue ) ) . toBeTruthy ( ) ;
165
+ await umbracoUi . webhook . goToWebhookWithName ( webhookName ) ;
166
+
167
+ // Act
168
+ await umbracoUi . webhook . clickHeaderRemoveButton ( ) ;
169
+ await umbracoUi . webhook . clickSaveButton ( ) ;
170
+
171
+ // Assert
172
+ await umbracoUi . webhook . isSuccessStateVisibleForSaveButton ( ) ;
173
+ expect ( await umbracoApi . webhook . doesWebhookHaveHeader ( webhookName , headerName , headerValue ) ) . toBeFalsy ( ) ;
174
+ } ) ;
175
+
176
+ test ( 'cannot add both content event and media event for a webhook' , async ( { umbracoApi, umbracoUi} ) => {
177
+ // Arrange
178
+ const event = 'Content Published' ;
179
+ await umbracoApi . webhook . createDefaultWebhook ( webhookName , webhookSiteToken , event ) ;
180
+ await umbracoUi . webhook . goToWebhookWithName ( webhookName ) ;
181
+
182
+ // Act
183
+ await umbracoUi . webhook . clickChooseEventButton ( ) ;
184
+
185
+ // Assert
186
+ await umbracoUi . webhook . isModalMenuItemWithNameDisabled ( 'Media Saved' ) ;
187
+ await umbracoUi . webhook . isModalMenuItemWithNameDisabled ( 'Media Deleted' ) ;
188
+ } ) ;
0 commit comments