Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

V14 QA Added acceptance tests for Members and Member Group #16074

Merged
merged 62 commits into from
Jun 3, 2024
Merged
Show file tree
Hide file tree
Changes from 61 commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
ed815dc
Updated tests for Member Group - not done
nhudinh0309 Mar 13, 2024
20b89af
Added api tests for Member
nhudinh0309 Mar 18, 2024
6821442
Added api tests for Member Group
nhudinh0309 Mar 18, 2024
3759c26
Added ui tests for Members
nhudinh0309 Mar 18, 2024
e1cb0c8
Added ui tests for Member Group
nhudinh0309 Mar 18, 2024
27ac9de
Added tests for Member Type
nhudinh0309 Mar 25, 2024
628567c
Added code to block unnecessary resources
nhudinh0309 Mar 26, 2024
8c57d33
Merge branch 'v14/dev' into v14/QA/speed-up-tests
nhudinh0309 Mar 26, 2024
93973a1
Updated createFolder
nhudinh0309 Mar 26, 2024
a42970f
Bumped version of test helper
nhudinh0309 Mar 26, 2024
f9378a5
Changed clickCreateButton to clickCreateLink due to UI changes
nhudinh0309 Mar 26, 2024
2538ea5
Merge branch 'v14/QA/fix-failing-tests' into v14/QA/speed-up-tests
nhudinh0309 Mar 26, 2024
7a19a7f
Bumped version of json builder
nhudinh0309 Mar 26, 2024
4c18688
Reversed previous code
nhudinh0309 Mar 26, 2024
f1f94a2
Removed waitForTimeout
nhudinh0309 Mar 27, 2024
428370c
Removed waitForTimeout after login
nhudinh0309 Mar 27, 2024
df2d13d
Bumped version of json builder
nhudinh0309 Mar 27, 2024
9ff8c73
Changed delete folder method
nhudinh0309 Mar 27, 2024
5d64ca8
Merge branch 'v14/QA/fix-failing-tests' into v14/QA/speed-up-tests
nhudinh0309 Mar 27, 2024
ce690ab
Merge branch 'v14/dev' into v14/QA/fix-failing-tests
nhudinh0309 Mar 27, 2024
8e0f81b
Bumped version of test helper
nhudinh0309 Mar 28, 2024
1b0ce8b
Merge branch 'v14/dev' into v14/QA/fix-failing-tests
nhudinh0309 Mar 28, 2024
18d4ee9
Merge branch 'v14/QA/fix-failing-tests' into v14/QA/speed-up-tests
nhudinh0309 Mar 28, 2024
22edc58
Update create link
nhudinh0309 Mar 28, 2024
8750e96
Removed waitForTimeout
nhudinh0309 Mar 28, 2024
e495dca
Added skip tests since currently only can view relations
nhudinh0309 Mar 28, 2024
9f740b5
Merge branch 'v14/QA/fix-failing-tests' into v14/QA/speed-up-tests
nhudinh0309 Mar 28, 2024
01ef6b3
Added more explicit wait
nhudinh0309 Apr 2, 2024
98d4443
Removed hard wait
nhudinh0309 Apr 2, 2024
ab0d202
Removed invalid verification step due to paging
nhudinh0309 Apr 2, 2024
4ed55fd
Moved get set telemetry level from test to before/after test
nhudinh0309 Apr 2, 2024
fd0865c
Merge branch 'v14/dev' into v14/QA/speed-up-tests
nhudinh0309 Apr 3, 2024
d374cc5
Bumped version of test helper
nhudinh0309 Apr 3, 2024
d876755
Merge branch 'v14/dev' into v14/QA/speed-up-tests
nhudinh0309 Apr 3, 2024
de248bb
Merge branch 'v14/dev' into v14/QA/speed-up-tests
nhudinh0309 Apr 4, 2024
8554c22
Added smoke tags - not done
nhudinh0309 Apr 4, 2024
cb6e670
Added smoke tags
nhudinh0309 Apr 5, 2024
22b0571
Merge branch 'v14/dev' into v14/QA/member-acceptance-tests
nhudinh0309 Apr 16, 2024
ed5f80e
Changed locator due to Ui changes
nhudinh0309 Apr 16, 2024
8743e51
Changed update to rename method due to test helpers change
nhudinh0309 Apr 16, 2024
53171ac
Merge branch 'v14/dev' into v14/QA/member-acceptance-tests
nhudinh0309 Apr 17, 2024
1a4220d
Bumped version of test helpers
nhudinh0309 Apr 17, 2024
1db813b
Removed tests for MemberType
nhudinh0309 Apr 17, 2024
db2b98c
Merge branch 'v14/dev' into v14/QA/seperate-smoke-acceptance-tests
nhudinh0309 Apr 17, 2024
26ab2dd
Fixed merge conflict
nhudinh0309 Apr 17, 2024
c276180
Merge branch 'v14/dev' into v14/QA/member-acceptance-tests
nhudinh0309 Apr 17, 2024
03cdc24
Merge branch 'v14/dev' into v14/QA/seperate-smoke-acceptance-tests
nhudinh0309 Apr 17, 2024
e3720f1
Added code to run smoke E2E tests after each build instead of full E2…
nhudinh0309 Apr 17, 2024
884a706
Merge branch 'v14/dev' into v14/QA/seperate-smoke-acceptance-tests
nhudinh0309 Apr 17, 2024
33c7944
Updated command to run smoke test
nhudinh0309 Apr 17, 2024
7ea4a66
Added more smoke tag
nhudinh0309 Apr 17, 2024
ea711ad
Merge branch 'v14/QA/seperate-smoke-acceptance-tests' into v14/QA/mem…
nhudinh0309 Apr 17, 2024
ec1069c
Added smoke tags
nhudinh0309 Apr 17, 2024
259943f
Merge branch 'v14/dev' into v14/QA/member-acceptance-tests
nhudinh0309 May 14, 2024
24f4db8
Merge branch 'v14/dev' into v14/QA/member-acceptance-tests
nhudinh0309 May 29, 2024
022486d
Updated the syntax of smoke tag
nhudinh0309 May 30, 2024
c1fbaf2
Added smoke tag to make all tests run in the pipeline
nhudinh0309 May 30, 2024
1947d0a
Bumped version of test helper
nhudinh0309 May 30, 2024
ec02a1e
Fixed comment
nhudinh0309 May 31, 2024
b616328
Removed unnecessary lines
nhudinh0309 May 31, 2024
4eea129
Merge branch 'v14/dev' into v14/QA/member-acceptance-tests
nhudinh0309 May 31, 2024
3f9d04c
Removed test.describle
nhudinh0309 Jun 3, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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,50 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";

// Remove it before merging
test.describe('Member Group tests', {tag: '@smoke'}, () => {
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,216 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";

// Remove it before merging
test.describe('Members tests', {tag: '@smoke'}, () => {
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);
nhudinh0309 marked this conversation as resolved.
Show resolved Hide resolved

// 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();

nhudinh0309 marked this conversation as resolved.
Show resolved Hide resolved
// 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();
});
});
Loading