From 2193ded62db7502a7f15dbddda4c6eb785e05c68 Mon Sep 17 00:00:00 2001 From: Nhu Dinh <150406148+nhudinh0309@users.noreply.github.com> Date: Fri, 2 Feb 2024 01:46:49 +0700 Subject: [PATCH] V14 Added acceptance tests for Relation Types (#15653) * Fixed failing tests * Updated tests to use the updated helpers * Clean up tests * Enabled our pipeline for E2E testing * Updated the CMS URl for our E2E tests * Bumped version of our testHelpers * Did some fixing, still a bit more to do * Updated auth tests to use LoginUiHelper * Updated Telemetry tests to use TelemetryUiHelper * Updated LogViewer tests to use LogViewerUiHelper * Updated api tests to apply AAA pattern and fix failed tests * Removed unused import * Added api tests for RelationType * Added ui tests for Relation Type * Bumped test helper version * Added api tests for Relation Types * Updated ui tests for Relation types * Updated method due to the test helper changes * Bumped version * Fixed merged * Update tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Relation Types/RelationTypes.spec.ts Added ; Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com> * Update tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Relation Types/RelationTypes.spec.ts Updated name of method Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com> * Update tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Relation Types/RelationTypes.spec.ts Updated name of method Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com> --------- Co-authored-by: Andreas Zerbst Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com> --- .../package-lock.json | 8 +- .../Umbraco.Tests.AcceptanceTest/package.json | 2 +- .../RelationType/RelationType.spec.ts | 55 +++++++++ .../Relation Types/RelationTypes.spec.ts | 104 ++++++++++++++++++ 4 files changed, 164 insertions(+), 5 deletions(-) create mode 100644 tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/RelationType/RelationType.spec.ts create mode 100644 tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Relation Types/RelationTypes.spec.ts diff --git a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json index 5b94b7a72d..f6bf8d9533 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json @@ -8,7 +8,7 @@ "hasInstallScript": true, "dependencies": { "@umbraco/json-models-builders": "^2.0.1 ", - "@umbraco/playwright-testhelpers": "^2.0.0-beta.12", + "@umbraco/playwright-testhelpers": "^2.0.0-beta.17", "camelize": "^1.0.0", "dotenv": "^16.3.1", "faker": "^4.1.0", @@ -146,9 +146,9 @@ "integrity": "sha512-9tCqYEDHI5RYFQigXFwF1hnCwcWCOJl/hmll0lr5D2Ljjb0o4wphb69wikeJDz5qCEzXCoPvG6ss5SDP6IfOdg==" }, "node_modules/@umbraco/playwright-testhelpers": { - "version": "2.0.0-beta.12", - "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.12.tgz", - "integrity": "sha512-2lfFCVOMIfzu+cBOohEyc9dgsW5QnxmbKT4r0pXpB2U7DesASQ7Erg0RScxXnPmcjA+geIJ2bMmg7RhdlgJ/yQ==", + "version": "2.0.0-beta.17", + "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.17.tgz", + "integrity": "sha512-wUaF7AB+x0PHAyfAgGxvBvM+o6QKLcDM6itHjjOJLtnF0Q96JZlZ4wf4d9GcaBdpZkaYq5MBjZtXg8ZSzFFJuw==", "dependencies": { "@umbraco/json-models-builders": "2.0.1", "camelize": "^1.0.0", diff --git a/tests/Umbraco.Tests.AcceptanceTest/package.json b/tests/Umbraco.Tests.AcceptanceTest/package.json index 1764e81376..9819127902 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@umbraco/json-models-builders": "^2.0.1 ", - "@umbraco/playwright-testhelpers": "^2.0.0-beta.12", + "@umbraco/playwright-testhelpers": "^2.0.0-beta.17", "camelize": "^1.0.0", "dotenv": "^16.3.1", "faker": "^4.1.0", diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/RelationType/RelationType.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/RelationType/RelationType.spec.ts new file mode 100644 index 0000000000..9c6ac0b674 --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/RelationType/RelationType.spec.ts @@ -0,0 +1,55 @@ +import {test} from '@umbraco/playwright-testhelpers'; +import {expect} from "@playwright/test"; + +test.describe('Relation type tests', () => { + const relationTypeName = 'Test Relation Type'; + const objectTypeName = 'Document'; + let relationTypeId = ''; + let objectTypeId = ''; + + test.beforeEach(async ({umbracoApi}) => { + await umbracoApi.relationType.ensureNameNotExists(relationTypeName); + objectTypeId = await umbracoApi.objectTypes.getIdByName(objectTypeName); + }); + + test.afterEach(async ({umbracoApi}) => { + await umbracoApi.relationType.ensureNameNotExists(relationTypeName); + }); + + test('can create a relation type', async ({umbracoApi}) => { + // Act + relationTypeId = await umbracoApi.relationType.create(relationTypeName, false, false, objectTypeId, objectTypeId); + + // Assert + expect(await umbracoApi.relationType.doesExist(relationTypeId)).toBeTruthy(); + }); + + test('can update a relation type', async ({umbracoApi}) => { + // Arrange + const wrongRelationTypeName = 'Updated Relation Type'; + relationTypeId = await umbracoApi.relationType.create(wrongRelationTypeName, false, false, objectTypeId, objectTypeId); + const relationTypeData = await umbracoApi.relationType.get(relationTypeId); + + // Act + relationTypeData.name = relationTypeName; + await umbracoApi.relationType.update(relationTypeId, relationTypeData); + + // Assert + expect(await umbracoApi.relationType.doesExist(relationTypeId)).toBeTruthy(); + // Checks if the relation type name was updated + const updatedRelationType = await umbracoApi.relationType.get(relationTypeId); + expect(updatedRelationType.name).toEqual(relationTypeName); + }); + + test('can delete a relation type', async ({umbracoApi}) => { + // Arrange + relationTypeId = await umbracoApi.relationType.create(relationTypeName, false, false, objectTypeId, objectTypeId); + expect(await umbracoApi.relationType.doesExist(relationTypeId)).toBeTruthy(); + + //Act + await umbracoApi.relationType.delete(relationTypeId); + + // Assert + expect(await umbracoApi.relationType.doesExist(relationTypeId)).toBeFalsy(); + }); +}); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Relation Types/RelationTypes.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Relation Types/RelationTypes.spec.ts new file mode 100644 index 0000000000..c2d161b1f3 --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Relation Types/RelationTypes.spec.ts @@ -0,0 +1,104 @@ +import {test} from '@umbraco/playwright-testhelpers'; +import {expect} from "@playwright/test"; + +test.describe('Relation types tests', () => { + const relationTypeName = 'Test Relation Type'; + const objectTypeName = 'Document'; + let relationTypeId = ''; + let objectTypeId = ''; + + test.beforeEach(async ({umbracoApi, umbracoUi}) => { + await umbracoApi.relationType.ensureNameNotExists(relationTypeName); + await umbracoUi.goToBackOffice(); + await umbracoUi.relationType.goToSettingsTreeItem('Relation Types'); + objectTypeId = await umbracoApi.objectTypes.getIdByName(objectTypeName); + }); + + test.afterEach(async ({umbracoApi}) => { + await umbracoApi.relationType.ensureNameNotExists(relationTypeName); + }); + + test('can create a relation type', async ({umbracoApi, umbracoUi}) => { + // Act + await umbracoUi.relationType.clickActionsMenuAtRoot(); + await umbracoUi.relationType.clickCreateButton(); + await umbracoUi.relationType.enterRelationTypeName(relationTypeName); + await umbracoUi.relationType.selectParentOption(objectTypeName); + await umbracoUi.relationType.selectChildOption(objectTypeName); + await umbracoUi.relationType.clickSaveButton(); + + // Assert + await umbracoUi.relationType.isSuccessNotificationVisible(); + expect(await umbracoApi.relationType.doesNameExist(relationTypeName)).toBeTruthy(); + // TODO: when frontend is ready, verify the new relation type name is displayed in the Relation Types tree + }); + + test('can update name of a relation type', async ({umbracoApi, umbracoUi}) => { + // Arrange + const wrongRelationTypeName = 'Updated Relation Type'; + await umbracoApi.relationType.ensureNameNotExists(wrongRelationTypeName); + relationTypeId = await umbracoApi.relationType.create(wrongRelationTypeName, false, false, objectTypeId, objectTypeId); + + // Act + await umbracoUi.relationType.openRelationTypeByNameAtRoot(wrongRelationTypeName); + await umbracoUi.relationType.enterRelationTypeName(relationTypeName); + await umbracoUi.relationType.clickSaveButton(); + + // Assert + await umbracoUi.relationType.isSuccessNotificationVisible(); + const relationTypeData = await umbracoApi.relationType.get(relationTypeId); + expect(relationTypeData.name).toEqual(relationTypeName); + expect(await umbracoApi.relationType.doesNameExist(wrongRelationTypeName)).toBeFalsy(); + }); + + test('can update direction value of a relation type', async ({umbracoApi, umbracoUi}) => { + // Arrange + relationTypeId = await umbracoApi.relationType.create(relationTypeName, false, false, objectTypeId, objectTypeId); + + // Act + await umbracoUi.relationType.openRelationTypeByNameAtRoot(relationTypeName); + await umbracoUi.relationType.clickBidirectionalRadioButton(); + await umbracoUi.relationType.clickSaveButton(); + + // Assert + await umbracoUi.relationType.isSuccessNotificationVisible(); + const relationTypeData = await umbracoApi.relationType.get(relationTypeId); + expect(relationTypeData.isBidirectional).toEqual(true); + }); + + test('can update isDependency value of a relation type', async ({umbracoApi, umbracoUi}) => { + // Arrange + const updatedObjectTypeName = 'Media'; + relationTypeId = await umbracoApi.relationType.create(relationTypeName, false, false, objectTypeId, objectTypeId); + + // Act + await umbracoUi.relationType.openRelationTypeByNameAtRoot(relationTypeName); + await umbracoUi.relationType.clickIsDependencySlider(); + await umbracoUi.relationType.clickSaveButton(); + + // Assert + await umbracoUi.relationType.isSuccessNotificationVisible(); + const relationTypeData = await umbracoApi.relationType.get(relationTypeId); + expect(relationTypeData.isDependency).toEqual(true); + }); + + test('can delete a relation type', async ({umbracoApi, umbracoUi}) => { + // Arrange + await umbracoApi.relationType.create(relationTypeName, false, false, objectTypeId, objectTypeId); + + // Act + await umbracoUi.relationType.clickRootFolderCaretButton(); + await umbracoUi.relationType.clickActionsMenuForRelationType(relationTypeName); + await umbracoUi.relationType.clickDeleteExactLabel(); + await umbracoUi.relationType.clickConfirmToDeleteButton(); + + // Assert + await umbracoUi.relationType.isSuccessNotificationVisible(); + expect(await umbracoApi.relationType.doesNameExist(relationTypeName)).toBeFalsy(); + // TODO: when frontend is ready, verify the deleted relation type name is NOT displayed in the Relation Types tree + }); + + test.skip('can show relations of a relation type', async ({umbracoApi, umbracoUi}) => { + // TODO: implement this later as the frontend is missing now + }); +});