Skip to content

Commit e679124

Browse files
authored
V16 QA Added acceptance tests for Webhook (#19545)
* Added tests for webhook * Added tests for webhook trigger * Bumped version * Make all Webhook tests run in the pipeline * Fixed comment * Reverted npm command
1 parent 50272f7 commit e679124

File tree

4 files changed

+441
-12
lines changed

4 files changed

+441
-12
lines changed

tests/Umbraco.Tests.AcceptanceTest/package-lock.json

Lines changed: 9 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/Umbraco.Tests.AcceptanceTest/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
"typescript": "^4.8.3"
2121
},
2222
"dependencies": {
23-
"@umbraco/json-models-builders": "^2.0.35",
24-
"@umbraco/playwright-testhelpers": "^16.0.23",
23+
"@umbraco/json-models-builders": "^2.0.36",
24+
"@umbraco/playwright-testhelpers": "^16.0.25",
2525
"camelize": "^1.0.0",
2626
"dotenv": "^16.3.1",
2727
"node-fetch": "^2.6.7"
Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
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

Comments
 (0)