Skip to content

Commit 4a2b056

Browse files
authored
OBPIH-7004 Add impersonator user (#54)
1 parent 3247b16 commit 4a2b056

4 files changed

Lines changed: 124 additions & 105 deletions

File tree

.github/workflows/playwright.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ jobs:
5858
USER_ALT_PASSWORD: ${{ secrets.USER_ALT_PASSWORD }}
5959
USER_MANAGER_USERNAME: ${{ secrets.USER_MANAGER_USERNAME }}
6060
USER_MANAGER_PASSWORD: ${{ secrets.USER_MANAGER_PASSWORD }}
61+
USER_IMPERSONATOR_USERNAME: ${{ secrets.USER_IMPERSONATOR_USERNAME }}
62+
USER_IMPERSONATOR_PASSWORD: ${{ secrets.USER_IMPERSONATOR_PASSWORD }}
6163
LOCATION_MAIN: ${{ secrets.LOCATION_MAIN }}
6264
LOCATION_NO_MANAGE_INVENOTRY_DEPOT: ${{ secrets.LOCATION_NO_MANAGE_INVENOTRY_DEPOT }}
6365
LOCATION_SUPPLIER: ${{ secrets.LOCATION_SUPPLIER }}

src/config/AppConfig.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export enum USER_KEY {
1414
MAIN = 'main',
1515
ALTERNATIVE = 'alternative',
1616
MANAGER = 'manager',
17+
IMPERSONATOR = 'impersonator',
1718
}
1819

1920
export enum LOCATION_KEY {
@@ -109,6 +110,13 @@ class AppConfig {
109110
RoleType.ROLE_PURCHASE_APPROVER,
110111
]),
111112
}),
113+
impersonator: new TestUserConfig({
114+
key: USER_KEY.IMPERSONATOR,
115+
username: env.get('USER_IMPERSONATOR_USERNAME').required().asString(),
116+
password: env.get('USER_IMPERSONATOR_PASSWORD').required().asString(),
117+
storageFileName: '.auth-storage-IMPERSONATOR-USER.json',
118+
requiredRoles: new Set([RoleType.ROLE_SUPERUSER]),
119+
}),
112120
alternative: new TestUserConfig({
113121
key: USER_KEY.ALTERNATIVE,
114122
username: env.get('USER_ALT_USERNAME').required().asString(),

src/tests/locationChooser/locationInLocationChooserBasedOnUserPermissions.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import ImpersonateBanner from '@/components/ImpersonateBanner';
22
import LocationChooser from '@/components/LocationChooser';
33
import Navbar from '@/components/Navbar';
4+
import AppConfig from '@/config/AppConfig';
45
import { ActivityCode } from '@/constants/ActivityCodes';
56
import { LocationTypeCode } from '@/constants/LocationTypeCode';
67
import { expect, test } from '@/fixtures/fixtures';
@@ -707,6 +708,8 @@ test.describe('Check if ward location is present in location chooser based on us
707708
});
708709

709710
test.describe('Check if ward location is present in location chooser based on users permissions, location specific permission, impersonate mode', () => {
711+
test.use({ storageState: AppConfig.instance.users.impersonator.storagePath });
712+
710713
const uniqueIdentifier = new UniqueIdentifier();
711714

712715
let TEST_USER: CreateUserType;
Lines changed: 111 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import ImpersonateBanner from '@/components/ImpersonateBanner';
22
import Navbar from '@/components/Navbar';
3+
import AppConfig from '@/config/AppConfig';
34
import { expect, test } from '@/fixtures/fixtures';
45
import LoginPage from '@/pages/LoginPage';
56
import { CreateUserType } from '@/types';
@@ -9,131 +10,136 @@ let formData: CreateUserType;
910

1011
const uniqueIdentifier = new UniqueIdentifier();
1112

12-
test.beforeEach(
13-
async ({ page, navbar, userListPage, createUserPage, editUserPage }) => {
14-
formData = {
15-
username: uniqueIdentifier.generateUniqueString('created-user'),
16-
firstName: 'user_firstanme',
17-
lastName: 'user_lastname',
18-
password: 'testpassword123',
19-
};
20-
21-
await test.step('Go to create user page', async () => {
22-
await page.goto('./dashboard');
23-
await navbar.configurationButton.click();
24-
await navbar.users.click();
25-
await userListPage.createUserButton.click();
13+
test.describe('User Permissions', () => {
14+
test.use({ storageState: AppConfig.instance.users.impersonator.storagePath });
15+
16+
test.beforeEach(
17+
async ({ page, navbar, userListPage, createUserPage, editUserPage }) => {
18+
formData = {
19+
username: uniqueIdentifier.generateUniqueString('created-user'),
20+
firstName: 'user_firstanme',
21+
lastName: 'user_lastname',
22+
password: 'testpassword123',
23+
};
24+
25+
await test.step('Go to create user page', async () => {
26+
await page.goto('./dashboard');
27+
await navbar.configurationButton.click();
28+
await navbar.users.click();
29+
await userListPage.createUserButton.click();
30+
});
31+
32+
await test.step('Create new test user', async () => {
33+
await createUserPage.fillUserForm(formData);
34+
await createUserPage.saveButton.click();
35+
await expect(editUserPage.summary).toContainText(
36+
`${formData.firstName} ${formData.lastName}`
37+
);
38+
await editUserPage.userDetailsTabSection.activateUserCheckBox.click();
39+
await editUserPage.userDetailsTabSection.saveButton.click();
40+
});
41+
42+
await editUserPage.authorizationTab.click();
43+
}
44+
);
45+
46+
test.afterEach(async ({ editUserPage, userListPage }) => {
47+
await test.step('Go to edit user page', async () => {
48+
await userListPage.goToPage();
49+
await userListPage.searchByNameField.fill(formData.username);
50+
await userListPage.findButton.click();
51+
await userListPage.getUserToEdit(formData.username).click();
2652
});
2753

28-
await test.step('Create new test user', async () => {
29-
await createUserPage.fillUserForm(formData);
30-
await createUserPage.saveButton.click();
31-
await expect(editUserPage.summary).toContainText(
32-
`${formData.firstName} ${formData.lastName}`
33-
);
34-
await editUserPage.userDetailsTabSection.activateUserCheckBox.click();
35-
await editUserPage.userDetailsTabSection.saveButton.click();
54+
await test.step('Delete user', async () => {
55+
await editUserPage.actionButton.click();
56+
await editUserPage.clickDeleteUser();
3657
});
3758

38-
await editUserPage.authorizationTab.click();
39-
}
40-
);
41-
42-
test.afterEach(async ({ editUserPage, userListPage }) => {
43-
await test.step('Go to edit user page', async () => {
44-
await userListPage.goToPage();
45-
await userListPage.searchByNameField.fill(formData.username);
46-
await userListPage.findButton.click();
47-
await userListPage.getUserToEdit(formData.username).click();
48-
});
49-
50-
await test.step('Delete user', async () => {
51-
await editUserPage.actionButton.click();
52-
await editUserPage.clickDeleteUser();
59+
await test.step('Assert that user does not exists in the list', async () => {
60+
await userListPage.searchByNameField.fill(formData.username);
61+
await userListPage.findButton.click();
62+
await expect(userListPage.getUserToEdit(formData.username)).toBeHidden();
63+
});
5364
});
5465

55-
await test.step('Assert that user does not exists in the list', async () => {
56-
await userListPage.searchByNameField.fill(formData.username);
57-
await userListPage.findButton.click();
58-
await expect(userListPage.getUserToEdit(formData.username)).toBeHidden();
59-
});
60-
});
66+
//tests are covering all steps from test case OBPIH-4622 Users
67+
test('Add default location for user and auto-login to location', async ({
68+
editUserPage,
69+
mainLocationService,
70+
emptyUserContext,
71+
}) => {
72+
await editUserPage.authorizationTabSection.defaultRoleSelect.click();
6173

62-
//tests are covering all steps from test case OBPIH-4622 Users
63-
test('Add default location for user and auto-login to location', async ({
64-
editUserPage,
65-
mainLocationService,
66-
emptyUserContext,
67-
}) => {
68-
await editUserPage.authorizationTabSection.defaultRoleSelect.click();
74+
await test.step('Select role "Manager"', async () => {
75+
await editUserPage.authorizationTab.click();
76+
await editUserPage.authorizationTabSection.defaultRoleSelect.click();
77+
await editUserPage.authorizationTabSection.getUserRole('Manager').click();
78+
});
6979

70-
await test.step('Select role "Manager"', async () => {
71-
await editUserPage.authorizationTab.click();
72-
await editUserPage.authorizationTabSection.defaultRoleSelect.click();
73-
await editUserPage.authorizationTabSection.getUserRole('Manager').click();
74-
});
80+
await test.step('Select default location', async () => {
81+
await editUserPage.authorizationTabSection.defaultLocationSelect.click();
82+
const location = await mainLocationService.getLocation();
83+
await editUserPage.authorizationTabSection
84+
.getDefaultLocation(location.name)
85+
.click();
86+
});
7587

76-
await test.step('Select default location', async () => {
77-
await editUserPage.authorizationTabSection.defaultLocationSelect.click();
78-
const location = await mainLocationService.getLocation();
79-
await editUserPage.authorizationTabSection
80-
.getDefaultLocation(location.name)
81-
.click();
82-
});
88+
await editUserPage.authorizationTabSection.autoLoginCheckbox.click();
89+
await editUserPage.authorizationTabSection.saveButton.click();
8390

84-
await editUserPage.authorizationTabSection.autoLoginCheckbox.click();
85-
await editUserPage.authorizationTabSection.saveButton.click();
91+
const newUserPage = await emptyUserContext.newPage();
92+
const newUserLoginPage = new LoginPage(newUserPage);
8693

87-
const newUserPage = await emptyUserContext.newPage();
88-
const newUserLoginPage = new LoginPage(newUserPage);
94+
await test.step('Login as new created user', async () => {
95+
await newUserLoginPage.goToPage();
96+
await newUserLoginPage.fillLoginForm(formData.username, formData.password);
97+
await newUserLoginPage.loginButton.click();
98+
});
8999

90-
await test.step('Login as new created user', async () => {
91-
await newUserLoginPage.goToPage();
92-
await newUserLoginPage.fillLoginForm(formData.username, formData.password);
93-
await newUserLoginPage.loginButton.click();
100+
await expect(newUserPage.getByText('My Dashboard')).toBeVisible();
94101
});
95102

96-
await expect(newUserPage.getByText('My Dashboard')).toBeVisible();
97-
});
103+
test('Impersonate created user', async ({ editUserPage }) => {
98104

99-
test('Impersonate created user', async ({ editUserPage }) => {
100-
await test.step('Select role "Manager"', async () => {
101-
await editUserPage.authorizationTabSection.defaultRoleSelect.click();
102-
await editUserPage.authorizationTabSection.getUserRole('Manager').click();
103-
await editUserPage.authorizationTabSection.saveButton.click();
104-
});
105+
await test.step('Select role "Manager"', async () => {
106+
await editUserPage.authorizationTabSection.defaultRoleSelect.click();
107+
await editUserPage.authorizationTabSection.getUserRole('Manager').click();
108+
await editUserPage.authorizationTabSection.saveButton.click();
109+
});
105110

106-
const newPage = await editUserPage.clickImpersonateButton();
107-
const impersonateBanner = new ImpersonateBanner(newPage);
108-
const newPageNavbar = new Navbar(newPage);
111+
const newPage = await editUserPage.clickImpersonateButton();
112+
const impersonateBanner = new ImpersonateBanner(newPage);
113+
const newPageNavbar = new Navbar(newPage);
109114

110-
await test.step('Check impersonate banner visibility on initial page', async () => {
111-
await impersonateBanner.isLoaded(formData.username);
112-
await expect(newPageNavbar.configurationButton).toBeHidden();
113-
});
115+
await test.step('Check impersonate banner visibility on initial page', async () => {
116+
await impersonateBanner.isLoaded(formData.username);
117+
await expect(newPageNavbar.configurationButton).toBeHidden();
118+
});
114119

115-
await test.step('Check impersonate banner visibility on list purchase order page', async () => {
116-
await newPageNavbar.purchasing.click();
117-
await newPageNavbar.listPurchaseOrders.click();
118-
await impersonateBanner.isLoaded(formData.username);
119-
});
120+
await test.step('Check impersonate banner visibility on list purchase order page', async () => {
121+
await newPageNavbar.purchasing.click();
122+
await newPageNavbar.listPurchaseOrders.click();
123+
await impersonateBanner.isLoaded(formData.username);
124+
});
120125

121-
await test.step('Check impersonate banner visibility on create outbound page', async () => {
122-
await newPageNavbar.outbound.click();
123-
await newPageNavbar.createOutboundMovement.click();
124-
await impersonateBanner.isLoaded(formData.username);
125-
});
126+
await test.step('Check impersonate banner visibility on create outbound page', async () => {
127+
await newPageNavbar.outbound.click();
128+
await newPageNavbar.createOutboundMovement.click();
129+
await impersonateBanner.isLoaded(formData.username);
130+
});
126131

127-
await test.step('Check impersonate banner visibility on product list page', async () => {
128-
await newPageNavbar.products.click();
129-
await newPageNavbar.listProducts.click();
130-
await impersonateBanner.isLoaded(formData.username);
131-
});
132+
await test.step('Check impersonate banner visibility on product list page', async () => {
133+
await newPageNavbar.products.click();
134+
await newPageNavbar.listProducts.click();
135+
await impersonateBanner.isLoaded(formData.username);
136+
});
132137

133-
await test.step('Check impersonate banner visibility when logging out of impersonate user', async () => {
134-
await impersonateBanner.logoutButton.click();
135-
expect(impersonateBanner.isLoaded(formData.username)).rejects.toThrow();
136-
});
138+
await test.step('Check impersonate banner visibility when logging out of impersonate user', async () => {
139+
await impersonateBanner.logoutButton.click();
140+
expect(impersonateBanner.isLoaded(formData.username)).rejects.toThrow();
141+
});
137142

138-
await newPage.close();
143+
await newPage.close();
144+
});
139145
});

0 commit comments

Comments
 (0)