import type { BrowserContext, Page } from '@playwright/test'; import { DEFAULT_USER_CREDENTIALS } from './config/constants'; import { Users } from './fixtures/userStates'; import { AdminUsers, Authenticated, Login } from './page-objects'; import { test, expect } from './utils/test'; import type { ITestUser } from './utils/user-helpers'; import { createTestUser } from './utils/user-helpers'; let user: ITestUser; let adminUsers: AdminUsers; test.describe.serial('Admin > Users', () => { test.beforeAll('Create a new user', async ({ api }) => { user = await createTestUser(api); }); test.afterAll('Delete the new user', async () => { await user.delete(); }); test.describe('Login', () => { let context: BrowserContext; let page: Page; let poLogin: Login; let poAuth: Authenticated; test.beforeAll(async ({ browser }) => { context = await browser.newContext(); page = await context.newPage(); poLogin = new Login(page); poAuth = new Authenticated(page); }); test.afterAll(async () => { await context.close(); }); test('Login as a newly created user and verify its status is active', async () => { await poLogin.goto('/login'); await test.step('should log in as the newly created user', async () => { await poLogin.login(user.data.username, DEFAULT_USER_CREDENTIALS.password); }); await test.step('Assert user is logged in', async () => { await poAuth.waitForDisplay(); }); }); }); test.describe('Admin > Users Status Management', () => { test.use({ storageState: Users.admin.state }); test.beforeEach('Go to /admin/users', async ({ page }) => { adminUsers = new AdminUsers(page); await adminUsers.goto(); }); test('After the first login, the user gets listed under the Active tab', async () => { await test.step('should be visible in the All tab', async () => { await adminUsers.getTabByName().click(); await adminUsers.searchUser(user.data.username); }); await test.step('should not be visible in the Pending tab', async () => { await adminUsers.getTabByName('Pending').click(); await expect(adminUsers.getUserRowByUsername(user.data.username)).not.toBeVisible(); }); await test.step('should be visible in the Active tab', async () => { await adminUsers.getTabByName('Active').click(); await expect(adminUsers.getUserRowByUsername(user.data.username)).toBeVisible(); }); await test.step('should not be visible in the Deactivated tab', async () => { await adminUsers.getTabByName('Deactivated').click(); await expect(adminUsers.getUserRowByUsername(user.data.username)).not.toBeVisible(); }); }); }); });