Skip to content

Commit 3b6e4a9

Browse files
authored
V15 QA Added acceptance tests for bulk trash dialog (#19125)
* Added tests for bulk trash content dialog * Updated tests for trash content dialog * Added tests for trash and bulk trash media dialog * Moved trash content tests into a folder * Bumped version * Make trash tests run in the pipeline * Make trash tests run in the pipeline * Fixed comments * Reverted npm command
1 parent b4528cf commit 3b6e4a9

File tree

5 files changed

+183
-14
lines changed

5 files changed

+183
-14
lines changed

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

Lines changed: 9 additions & 11 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.31",
24-
"@umbraco/playwright-testhelpers": "^15.0.44",
23+
"@umbraco/json-models-builders": "^2.0.33",
24+
"@umbraco/playwright-testhelpers": "^15.0.47",
2525
"camelize": "^1.0.0",
2626
"dotenv": "^16.3.1",
2727
"node-fetch": "^2.6.7"
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
2+
import {expect} from "@playwright/test";
3+
4+
let collectionId = '';
5+
const contentName = 'TestContent';
6+
const documentTypeName = 'TestDocumentTypeForContent';
7+
const childDocumentTypeName = 'TestChildDocumentType';
8+
const firstChildContentName = 'First Child Content';
9+
const secondChildContentName = 'Second Child Content';
10+
const collectionDataTypeName = 'List View - Content';
11+
const referenceHeadline = ConstantHelper.trashDeleteDialogMessage.bulkReferenceHeadline;
12+
const documentPickerName = ['TestPicker', 'DocumentTypeForPicker'];
13+
14+
test.beforeEach(async ({umbracoApi}) => {
15+
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
16+
await umbracoApi.document.ensureNameNotExists(contentName);
17+
const collectionDataTypeData = await umbracoApi.dataType.getByName(collectionDataTypeName);
18+
collectionId = collectionDataTypeData.id;
19+
});
20+
21+
test.afterEach(async ({umbracoApi}) => {
22+
await umbracoApi.document.ensureNameNotExists(contentName);
23+
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
24+
await umbracoApi.documentType.ensureNameNotExists(childDocumentTypeName);
25+
await umbracoApi.document.emptyRecycleBin();
26+
});
27+
28+
test('can bulk trash content nodes without a relation', async ({umbracoApi, umbracoUi}) => {
29+
// Arrange
30+
const childDocumentTypeId = await umbracoApi.documentType.createDefaultDocumentType(childDocumentTypeName);
31+
const documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNodeAndCollectionId(documentTypeName, childDocumentTypeId, collectionId);
32+
const contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId);
33+
await umbracoApi.document.createDefaultDocumentWithParent(firstChildContentName, childDocumentTypeId, contentId);
34+
await umbracoApi.document.createDefaultDocumentWithParent(secondChildContentName, childDocumentTypeId, contentId);
35+
await umbracoUi.goToBackOffice();
36+
await umbracoUi.content.goToSection(ConstantHelper.sections.content);
37+
38+
// Act
39+
await umbracoUi.content.goToContentWithName(contentName);
40+
await umbracoUi.content.selectContentWithNameInListView(firstChildContentName);
41+
await umbracoUi.content.selectContentWithNameInListView(secondChildContentName);
42+
await umbracoUi.content.clickTrashSelectedListItems();
43+
// Verify the references list not displayed
44+
await umbracoUi.content.isReferenceHeadlineVisible(false);
45+
await umbracoUi.content.clickConfirmTrashButton();
46+
47+
// // Assert
48+
await umbracoUi.content.isSuccessNotificationVisible();
49+
expect(await umbracoApi.document.doesNameExist(firstChildContentName)).toBeFalsy();
50+
expect(await umbracoApi.document.doesNameExist(secondChildContentName)).toBeFalsy();
51+
await umbracoUi.content.isItemVisibleInRecycleBin(firstChildContentName);
52+
await umbracoUi.content.isItemVisibleInRecycleBin(secondChildContentName);
53+
expect(await umbracoApi.document.doesItemExistInRecycleBin(firstChildContentName)).toBeTruthy();
54+
expect(await umbracoApi.document.doesItemExistInRecycleBin(secondChildContentName)).toBeTruthy();
55+
});
56+
57+
test('can bulk trash content nodes with a relation', async ({umbracoApi, umbracoUi}) => {
58+
// Arrange
59+
const childDocumentTypeId = await umbracoApi.documentType.createDefaultDocumentType(childDocumentTypeName);
60+
const documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNodeAndCollectionId(documentTypeName, childDocumentTypeId, collectionId);
61+
const contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId);
62+
await umbracoApi.document.publish(contentId);
63+
const firstChildContentId = await umbracoApi.document.createDefaultDocumentWithParent(firstChildContentName, childDocumentTypeId, contentId);
64+
await umbracoApi.document.publish(firstChildContentId);
65+
await umbracoApi.document.createDefaultDocumentWithParent(secondChildContentName, childDocumentTypeId, contentId);
66+
// Create a document that has a document picker with firstChildContentName
67+
await umbracoApi.document.createDefaultDocumentWithOneDocumentLink(documentPickerName[0], firstChildContentName, firstChildContentId, documentPickerName[1]);
68+
await umbracoUi.goToBackOffice();
69+
await umbracoUi.content.goToSection(ConstantHelper.sections.content);
70+
71+
// Act
72+
await umbracoUi.content.goToContentWithName(contentName);
73+
await umbracoUi.content.selectContentWithNameInListView(firstChildContentName);
74+
await umbracoUi.content.selectContentWithNameInListView(secondChildContentName);
75+
await umbracoUi.content.clickTrashSelectedListItems();
76+
// Verify the references list
77+
await umbracoUi.content.doesReferenceHeadlineHaveText(referenceHeadline);
78+
await umbracoUi.content.doesReferenceItemsHaveCount(1);
79+
await umbracoUi.content.isReferenceItemNameVisible(firstChildContentName);
80+
await umbracoUi.content.clickConfirmTrashButton();
81+
82+
// // Assert
83+
await umbracoUi.content.isSuccessNotificationVisible();
84+
expect(await umbracoApi.document.doesNameExist(firstChildContentName)).toBeFalsy();
85+
expect(await umbracoApi.document.doesNameExist(secondChildContentName)).toBeFalsy();
86+
await umbracoUi.content.isItemVisibleInRecycleBin(firstChildContentName);
87+
await umbracoUi.content.isItemVisibleInRecycleBin(secondChildContentName);
88+
expect(await umbracoApi.document.doesItemExistInRecycleBin(firstChildContentName)).toBeTruthy();
89+
expect(await umbracoApi.document.doesItemExistInRecycleBin(secondChildContentName)).toBeTruthy();
90+
91+
// Clean
92+
await umbracoApi.documentType.ensureNameNotExists(documentPickerName[1]);
93+
});

tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/TrashContent.spec.ts renamed to tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/TrashContent/TrashContent.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const contentName = 'TestContent';
66
const documentTypeName = 'TestDocumentTypeForContent';
77
const dataTypeName = 'Textstring';
88
const contentText = 'This is test content text';
9-
const referenceHeadline = 'The following items depend on this';
9+
const referenceHeadline = ConstantHelper.trashDeleteDialogMessage.referenceHeadline;
1010
const documentPickerName = ['TestPicker', 'DocumentTypeForPicker'];
1111

1212
test.beforeEach(async ({umbracoApi}) => {

tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Media/Media.spec.ts

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,8 @@ test('can trash a media item', async ({umbracoApi, umbracoUi}) => {
174174
// Act
175175
await umbracoUi.media.clickActionsMenuForName(mediaFileName);
176176
await umbracoUi.media.clickTrashButton();
177+
// Verify the references list not displayed
178+
await umbracoUi.content.isReferenceHeadlineVisible(false);
177179
await umbracoUi.media.clickConfirmTrashButton();
178180

179181
// Assert
@@ -245,3 +247,79 @@ test('can empty the recycle bin', async ({umbracoApi, umbracoUi}) => {
245247
expect(await umbracoApi.media.doesNameExist(mediaFileName)).toBeFalsy();
246248
expect(await umbracoApi.media.doesMediaItemExistInRecycleBin(mediaFileName)).toBeFalsy();
247249
});
250+
251+
test('can trash a media node with a relation', async ({umbracoApi, umbracoUi}) => {
252+
// Arrange
253+
const documentPickerName = ['TestPicker', 'DocumentTypeForPicker'];
254+
await umbracoApi.media.emptyRecycleBin();
255+
await umbracoApi.media.createDefaultMediaFile(mediaFileName);
256+
await umbracoApi.media.doesNameExist(mediaFileName);
257+
// Create a document that have media picker is firstMediaFileName
258+
await umbracoApi.document.createDefaultDocumentWithOneMediaLink(documentPickerName[0], mediaFileName, documentPickerName[1]);
259+
await umbracoUi.media.goToSection(ConstantHelper.sections.media);
260+
261+
// Act
262+
await umbracoUi.media.clickActionsMenuForName(mediaFileName);
263+
await umbracoUi.media.clickTrashButton();
264+
// Verify the references list
265+
await umbracoUi.media.doesReferenceHeadlineHaveText(ConstantHelper.trashDeleteDialogMessage.referenceHeadline);
266+
await umbracoUi.media.doesReferenceItemsHaveCount(1);
267+
await umbracoUi.media.isReferenceItemNameVisible(documentPickerName[0]);
268+
await umbracoUi.media.clickConfirmTrashButton();
269+
270+
// Assert
271+
await umbracoUi.media.doesSuccessNotificationHaveText(NotificationConstantHelper.success.movedToRecycleBin);
272+
await umbracoUi.media.isItemVisibleInRecycleBin(mediaFileName);
273+
expect(await umbracoApi.media.doesNameExist(mediaFileName)).toBeFalsy();
274+
expect(await umbracoApi.media.doesMediaItemExistInRecycleBin(mediaFileName)).toBeTruthy();
275+
276+
// Clean
277+
await umbracoApi.media.emptyRecycleBin();
278+
await umbracoApi.document.ensureNameNotExists(documentPickerName[0]);
279+
await umbracoApi.documentType.ensureNameNotExists(documentPickerName[1]);
280+
});
281+
282+
test('can bulk trash media nodes with a relation', async ({umbracoApi, umbracoUi}) => {
283+
// Arrange
284+
const firstMediaFileName = 'FirstMediaFile';
285+
const secondMediaFileName = 'SecondMediaFile';
286+
const documentPickerName1 = ['TestPicker1', 'DocumentTypeForPicker1'];
287+
const documentPickerName2 = ['TestPicker2', 'DocumentTypeForPicker2'];
288+
await umbracoApi.media.emptyRecycleBin();
289+
await umbracoApi.media.createDefaultMediaFile(firstMediaFileName);
290+
await umbracoApi.media.createDefaultMediaFile(secondMediaFileName);
291+
// Create a document that has a media picker with firstMediaFileName
292+
await umbracoApi.document.createDefaultDocumentWithOneMediaLink(documentPickerName1[0], firstMediaFileName, documentPickerName1[1]);
293+
// Create a document that has a media picker with secondMediaFileName
294+
await umbracoApi.document.createDefaultDocumentWithOneMediaLink(documentPickerName2[0], secondMediaFileName, documentPickerName2[1]);
295+
296+
// Act
297+
await umbracoUi.media.goToSection(ConstantHelper.sections.media);
298+
await umbracoUi.media.selectMediaWithName(firstMediaFileName);
299+
await umbracoUi.media.selectMediaWithName(secondMediaFileName);
300+
await umbracoUi.media.clickBulkTrashButton();
301+
// Verify the references list
302+
await umbracoUi.media.doesReferenceHeadlineHaveText(ConstantHelper.trashDeleteDialogMessage.bulkReferenceHeadline);
303+
await umbracoUi.media.doesReferenceItemsHaveCount(2);
304+
await umbracoUi.media.isReferenceItemNameVisible(firstMediaFileName);
305+
await umbracoUi.media.isReferenceItemNameVisible(secondMediaFileName);
306+
await umbracoUi.media.clickConfirmTrashButton();
307+
308+
// Assert
309+
await umbracoUi.media.isSuccessNotificationVisible();
310+
expect(await umbracoApi.media.doesNameExist(firstMediaFileName)).toBeFalsy();
311+
expect(await umbracoApi.media.doesNameExist(secondMediaFileName)).toBeFalsy();
312+
expect(await umbracoApi.media.doesMediaItemExistInRecycleBin(firstMediaFileName)).toBeTruthy();
313+
expect(await umbracoApi.media.doesMediaItemExistInRecycleBin(secondMediaFileName)).toBeTruthy();
314+
await umbracoUi.media.isItemVisibleInRecycleBin(firstMediaFileName);
315+
await umbracoUi.media.isItemVisibleInRecycleBin(secondMediaFileName, true, false);
316+
317+
// Clean
318+
await umbracoApi.media.ensureNameNotExists(firstMediaFileName);
319+
await umbracoApi.media.ensureNameNotExists(secondMediaFileName);
320+
await umbracoApi.document.ensureNameNotExists(documentPickerName1[0]);
321+
await umbracoApi.documentType.ensureNameNotExists(documentPickerName1[1]);
322+
await umbracoApi.document.ensureNameNotExists(documentPickerName2[0]);
323+
await umbracoApi.documentType.ensureNameNotExists(documentPickerName2[1]);
324+
await umbracoApi.media.emptyRecycleBin();
325+
});

0 commit comments

Comments
 (0)