Skip to content

Commit

Permalink
V14 QA Added acceptance tests for Members and Member Group (#16074)
Browse files Browse the repository at this point in the history
* Updated tests for Member Group - not done

* Added api tests for Member

* Added api tests for Member Group

* Added ui tests for Members

* Added ui tests for Member Group

* Added tests for Member Type

* Added code to block unnecessary resources

* Updated createFolder

* Bumped version of test helper

* Changed clickCreateButton to clickCreateLink due to UI changes

* Bumped version of json builder

* Reversed previous code

* Removed waitForTimeout

* Removed waitForTimeout after login

* Bumped version of json builder

* Changed delete folder method

* Bumped version of test helper

* Update create link

* Removed waitForTimeout

* Added skip tests since currently only can view relations

* Added more explicit wait

* Removed hard wait

* Removed invalid verification step due to paging

* Moved get set telemetry level from test to before/after test

* Bumped version of test helper

* Added smoke tags - not done

* Added smoke tags

* Changed locator due to Ui changes

* Changed update to rename method due to test helpers change

* Bumped version of test helpers

* Removed tests for MemberType

* Fixed merge conflict

* Added code to run smoke E2E tests after each build instead of full E2E tests

* Updated command to run smoke test

* Added more smoke tag

* Added smoke tags

* Updated the syntax of smoke tag

* Added smoke tag to make all tests run in the pipeline

* Bumped version of test helper

* Fixed comment

* Removed unnecessary lines

* Removed test.describle
  • Loading branch information
nhudinh0309 authored Jun 3, 2024
1 parent e0c64e4 commit 1f8b7f3
Show file tree
Hide file tree
Showing 6 changed files with 360 additions and 5 deletions.
8 changes: 4 additions & 4 deletions tests/Umbraco.Tests.AcceptanceTest/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion tests/Umbraco.Tests.AcceptanceTest/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
},
"dependencies": {
"@umbraco/json-models-builders": "^2.0.5",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.54",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.57",
"camelize": "^1.0.0",
"dotenv": "^16.3.1",
"faker": "^4.1.0",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import {test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";

test.describe('Member tests', () => {
let memberId = '';
let memberTypeId = '';
const memberName = 'TestMember';
const memberTypeName = 'TestMemberType';
const username = 'testmember';
const email = 'testmember@acceptance.test';
const password = '0123456789';

test.beforeEach(async ({umbracoApi}) => {
await umbracoApi.memberType.ensureNameNotExists(memberTypeName);
await umbracoApi.member.ensureNameNotExists(memberName);
});

test.afterEach(async ({umbracoApi}) => {
await umbracoApi.memberType.ensureNameNotExists(memberTypeName);
await umbracoApi.member.ensureNameNotExists(memberName);
});

test('can create a member', async ({umbracoApi}) => {
// Arrange
memberTypeId = await umbracoApi.memberType.createDefaultMemberType(memberTypeName);

// Act
memberId = await umbracoApi.member.createDefaultMember(memberName, memberTypeId, email, username, password);

// Assert
expect(await umbracoApi.member.doesExist(memberId)).toBeTruthy();
});

test('can delete a member', async ({umbracoApi}) => {
// Arrange
memberTypeId = await umbracoApi.memberType.createDefaultMemberType(memberTypeName);
memberId = await umbracoApi.member.createDefaultMember(memberName, memberTypeId, email, username, password);

// Act
await umbracoApi.member.delete(memberId);

// Assert
expect(await umbracoApi.member.doesExist(memberId)).toBeFalsy();
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import {test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";

test.describe('Member Group tests', () => {
let memberGroupId = '';
const memberGroupName = 'TestMemberGroup';

test.beforeEach(async ({umbracoApi}) => {
await umbracoApi.memberGroup.ensureNameNotExists(memberGroupName);
});

test.afterEach(async ({umbracoApi}) => {
await umbracoApi.memberGroup.ensureNameNotExists(memberGroupName);
});

test('can create a member group', async ({umbracoApi}) => {
// Act
memberGroupId = await umbracoApi.memberGroup.create(memberGroupName);

// Assert
expect(await umbracoApi.memberGroup.doesExist(memberGroupId)).toBeTruthy();
});

test('can rename a member group', async ({umbracoApi}) => {
// Arrange
const wrongMemberGroupName = 'Wrong Name';
await umbracoApi.memberGroup.ensureNameNotExists(wrongMemberGroupName);
memberGroupId = await umbracoApi.memberGroup.create(wrongMemberGroupName);
expect(await umbracoApi.memberGroup.doesExist(memberGroupId)).toBeTruthy();

// Act
await umbracoApi.memberGroup.rename(memberGroupId, memberGroupName);

// Assert
expect(await umbracoApi.memberGroup.doesNameExist(memberGroupName)).toBeTruthy();
expect(await umbracoApi.memberGroup.doesNameExist(wrongMemberGroupName)).toBeFalsy();
});

test('can delete a member group', async ({umbracoApi}) => {
// Arrange
memberGroupId = await umbracoApi.memberGroup.create(memberGroupName);
expect(await umbracoApi.memberGroup.doesExist(memberGroupId)).toBeTruthy();

// Act
await umbracoApi.memberGroup.delete(memberGroupId);

// Assert
expect(await umbracoApi.memberGroup.doesExist(memberGroupId)).toBeFalsy();
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";

const memberGroupName = 'Test Member Group';

test.beforeEach(async ({umbracoApi, umbracoUi}) => {
await umbracoApi.memberGroup.ensureNameNotExists(memberGroupName);
await umbracoUi.goToBackOffice();
await umbracoUi.memberGroup.goToSection(ConstantHelper.sections.members);
});

test.afterEach(async ({umbracoApi}) => {
await umbracoApi.memberGroup.ensureNameNotExists(memberGroupName);
});

test('can create a member group', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
// Act
await umbracoUi.memberGroup.clickMemberGroupsTab();
await umbracoUi.memberGroup.clickCreateButton();
await umbracoUi.memberGroup.enterMemberGroupName(memberGroupName);
await umbracoUi.memberGroup.clickSaveButton();

// Assert
await umbracoUi.memberGroup.isSuccessNotificationVisible();
await umbracoUi.memberGroup.clickLeftArrowButton();
await umbracoUi.memberGroup.isMemberGroupNameVisible(memberGroupName);
expect(await umbracoApi.memberGroup.doesNameExist(memberGroupName)).toBeTruthy();
});

// TODO: Remove skip when the front-end is ready. Currently it is impossible to delete a member group.
test.skip('can delete a member group', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.memberGroup.create(memberGroupName);
expect(await umbracoApi.memberGroup.doesNameExist(memberGroupName)).toBeTruthy();

// Act
await umbracoUi.memberGroup.clickMemberGroupsTab();
await umbracoUi.memberGroup.clickMemberGroupLinkByName(memberGroupName);
await umbracoUi.memberGroup.clickActionsButton();
await umbracoUi.memberGroup.clickDeleteButton();
await umbracoUi.memberGroup.clickConfirmToDeleteButton();

// Assert
await umbracoUi.memberGroup.isSuccessNotificationVisible();
await umbracoUi.memberGroup.isMemberGroupNameVisible(memberGroupName, false);
expect(await umbracoApi.memberGroup.doesNameExist(memberGroupName)).toBeFalsy();
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";

let memberId = '';
let memberTypeId = '';
const defaultMemberTypeName = 'Member';
const memberName = 'Test Member';
const memberTypeName = 'Test Member Type';
const comment = 'This is test comment';
const username = 'testmember';
const email = 'testmember@acceptance.test';
const password = '0123456789';

test.beforeEach(async ({umbracoApi, umbracoUi}) => {
await umbracoApi.memberType.ensureNameNotExists(memberTypeName);
await umbracoApi.member.ensureNameNotExists(memberName);
await umbracoUi.goToBackOffice();
});

test.afterEach(async ({umbracoApi}) => {
await umbracoApi.memberType.ensureNameNotExists(memberTypeName);
await umbracoApi.member.ensureNameNotExists(memberName);
});

test('can create a member', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoUi.member.goToSection(ConstantHelper.sections.members);

// Act
await umbracoUi.member.clickCreateButton();
await umbracoUi.member.enterMemberName(memberName);
await umbracoUi.member.enterUsername(username);
await umbracoUi.member.enterEmail(email);
await umbracoUi.member.enterPassword(password);
await umbracoUi.member.enterConfirmPassword(password);
await umbracoUi.member.clickDetailsTab();
await umbracoUi.member.enterComments(comment);
await umbracoUi.member.clickSaveButton();

// Assert
await umbracoUi.member.isSuccessNotificationVisible();
expect(await umbracoApi.member.doesNameExist(memberName)).toBeTruthy();
});

test('can edit comments', async ({umbracoApi, umbracoUi}) => {
// Arrange
const defaultMemberTypeData = await umbracoApi.memberType.getByName(defaultMemberTypeName);
memberId = await umbracoApi.member.createDefaultMember(memberName, defaultMemberTypeData.id, email, username, password);
await umbracoUi.member.goToSection(ConstantHelper.sections.members);

// Act
await umbracoUi.member.clickMemberLinkByName(memberName);
await umbracoUi.member.clickDetailsTab();
await umbracoUi.member.enterComments(comment);
await umbracoUi.member.clickSaveButton();

// Assert
await umbracoUi.member.isSuccessNotificationVisible();
const memberData = await umbracoApi.member.get(memberId);
expect(memberData.values[0].value).toBe(comment);
});

test('can edit username', async ({umbracoApi, umbracoUi}) => {
// Arrange
const updatedUsername = 'updatedusername';
memberTypeId = await umbracoApi.memberType.createDefaultMemberType(memberTypeName);
memberId = await umbracoApi.member.createDefaultMember(memberName, memberTypeId, email, username, password);
await umbracoUi.member.goToSection(ConstantHelper.sections.members);

// Act
await umbracoUi.member.clickMemberLinkByName(memberName);
await umbracoUi.member.enterUsername(updatedUsername);
await umbracoUi.member.clickSaveButton();

// Assert
await umbracoUi.member.isSuccessNotificationVisible();
const memberData = await umbracoApi.member.get(memberId);
expect(memberData.username).toBe(updatedUsername);
});

test('can edit email', async ({umbracoApi, umbracoUi}) => {
// Arrange
const updatedEmail = 'updated@acceptance.test';
memberTypeId = await umbracoApi.memberType.createDefaultMemberType(memberTypeName);
memberId = await umbracoApi.member.createDefaultMember(memberName, memberTypeId, email, username, password);
await umbracoUi.member.goToSection(ConstantHelper.sections.members);

// Act
await umbracoUi.member.clickMemberLinkByName(memberName);
await umbracoUi.member.enterEmail(updatedEmail);
await umbracoUi.member.clickSaveButton();

// Assert
await umbracoUi.member.isSuccessNotificationVisible();
const memberData = await umbracoApi.member.get(memberId);
expect(memberData.email).toBe(updatedEmail);
});

test('can edit password', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
// Arrange
const updatedPassword = '9876543210';
memberTypeId = await umbracoApi.memberType.createDefaultMemberType(memberTypeName);
memberId = await umbracoApi.member.createDefaultMember(memberName, memberTypeId, email, username, password);
await umbracoUi.member.goToSection(ConstantHelper.sections.members);

// Act
await umbracoUi.member.clickMemberLinkByName(memberName);
await umbracoUi.member.clickChangePasswordButton();
await umbracoUi.member.enterNewPassword(updatedPassword);
await umbracoUi.member.enterConfirmPassword(updatedPassword);
await umbracoUi.member.clickSaveButton();

// Assert
await umbracoUi.member.isSuccessNotificationVisible();
});

test('can add member group', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
// Arrange
const memberGroupName = 'TestMemberGroup';
await umbracoApi.memberGroup.ensureNameNotExists(memberGroupName);
const memberGroupId = await umbracoApi.memberGroup.create(memberGroupName);
memberTypeId = await umbracoApi.memberType.createDefaultMemberType(memberTypeName);
memberId = await umbracoApi.member.createDefaultMember(memberName, memberTypeId, email, username, password);
await umbracoUi.member.goToSection(ConstantHelper.sections.members);

// Act
await umbracoUi.member.clickMemberLinkByName(memberName);
await umbracoUi.member.chooseMemberGroup(memberGroupName);
await umbracoUi.member.clickSaveButton();

// Assert
await umbracoUi.member.isSuccessNotificationVisible();
const memberData = await umbracoApi.member.get(memberId);
expect(memberData.groups[0]).toBe(memberGroupId);

// Clean
await umbracoApi.memberGroup.ensureNameNotExists(memberGroupName);
});

test('can remove member group', async ({umbracoApi, umbracoUi}) => {
// Arrange
const memberGroupName = 'TestMemberGroup';
await umbracoApi.memberGroup.ensureNameNotExists(memberGroupName);
const memberGroupId = await umbracoApi.memberGroup.create(memberGroupName);
memberTypeId = await umbracoApi.memberType.createDefaultMemberType(memberTypeName);
memberId = await umbracoApi.member.createMemberWithMemberGroup(memberName, memberTypeId, email, username, password, memberGroupId);
await umbracoUi.member.goToSection(ConstantHelper.sections.members);

// Act
await umbracoUi.member.clickMemberLinkByName(memberName);
await umbracoUi.member.clickRemoveMemberGroupByName(memberGroupName);
await umbracoUi.member.clickConfirmRemoveButton();
await umbracoUi.member.clickSaveButton();

// Assert
await umbracoUi.member.isSuccessNotificationVisible();
const memberData = await umbracoApi.member.get(memberId);
expect(memberData.groups.length).toBe(0);

// Clean
await umbracoApi.memberGroup.ensureNameNotExists(memberGroupName);
});

test('can view member info', async ({umbracoApi, umbracoUi}) => {
// Arrange
memberTypeId = await umbracoApi.memberType.createDefaultMemberType(memberTypeName);
memberId = await umbracoApi.member.createDefaultMember(memberName, memberTypeId, email, username, password);
await umbracoUi.member.goToSection(ConstantHelper.sections.members);

// Act
await umbracoUi.member.clickMemberLinkByName(memberName);

// Assert
const memberData = await umbracoApi.member.get(memberId);
await umbracoUi.member.doesMemberInfoHaveValue('Failed login attempts', memberData.failedPasswordAttempts.toString());
await umbracoUi.member.doesMemberInfoHaveValue('Last lockout date', memberData.lastLoginDate == null ? 'never' : memberData.lastLoginDate);
await umbracoUi.member.doesMemberInfoHaveValue('Last login', memberData.lastLoginDate == null ? 'never' : memberData.lastLoginDate);
await umbracoUi.member.doesMemberInfoHaveValue('Password changed', new Date(memberData.lastPasswordChangeDate).toLocaleString());
});

test('can enable approved', async ({umbracoApi, umbracoUi}) => {
// Arrange
memberTypeId = await umbracoApi.memberType.createDefaultMemberType(memberTypeName);
memberId = await umbracoApi.member.createDefaultMember(memberName, memberTypeId, email, username, password);
await umbracoUi.member.goToSection(ConstantHelper.sections.members);

// Act
await umbracoUi.member.clickMemberLinkByName(memberName);
await umbracoUi.member.clickApprovedSlider();
await umbracoUi.member.clickSaveButton();

// Assert
await umbracoUi.member.isSuccessNotificationVisible();
const memberData = await umbracoApi.member.get(memberId);
expect(memberData.isApproved).toBe(true);
});

test('can delete member', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
// Arrange
memberTypeId = await umbracoApi.memberType.createDefaultMemberType(memberTypeName);
memberId = await umbracoApi.member.createDefaultMember(memberName, memberTypeId, email, username, password);
await umbracoUi.member.goToSection(ConstantHelper.sections.members);

// Act
await umbracoUi.member.clickMemberLinkByName(memberName);
await umbracoUi.memberGroup.clickActionsButton();
await umbracoUi.memberGroup.clickDeleteButton();
await umbracoUi.memberGroup.clickConfirmToDeleteButton();

// Assert
await umbracoUi.member.isSuccessNotificationVisible();
expect(await umbracoApi.member.doesNameExist(memberName)).toBeFalsy();
});

0 comments on commit 1f8b7f3

Please sign in to comment.