-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
V14 QA Added acceptance tests for Members and Member Group (#16074)
* 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
1 parent
e0c64e4
commit 1f8b7f3
Showing
6 changed files
with
360 additions
and
5 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
45 changes: 45 additions & 0 deletions
45
tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Member/Member.spec.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | ||
}); | ||
}); |
50 changes: 50 additions & 0 deletions
50
tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Member/MemberGroup.spec.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | ||
}); | ||
}); |
47 changes: 47 additions & 0 deletions
47
tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Members/MemberGroups.spec.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | ||
}); |
213 changes: 213 additions & 0 deletions
213
tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Members/Members.spec.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | ||
}); |