mirror of
https://github.com/inventree/InvenTree.git
synced 2025-06-17 20:45:44 +00:00
Refactor login state management (#7158)
* Refactor login state management - Previously relied only on presence of cookie - Cookie may not actually be *valid* - Inspect actual login state by looking at userState values - Ensures better sequencing of global state API requests - Login state is now correctly preseed across browsers * Ignore errors for user/me/ API endpoint in playwright test * Do not request notifications unless logged in * Prevent duplicate licenses * Update src/frontend/src/views/DesktopAppView.tsx Co-authored-by: Matthias Mair <code@mjmair.com> * Simplify checkLoginState * Fix bug in return types * Update playwright tests * linting * Remove error msg * Use token auth for API calls - Will (hopefully) allow us to bypass csrfmiddle request handling? * Refetch token if not available * Use cache for DISPLAY_FULL_NAMES setting * Update src/frontend/tests/baseFixtures.ts Co-authored-by: Matthias Mair <code@mjmair.com> * PUI test updates * Tweak doLogout function * Revert change to baseFixtures.ts * Cleanup * Fix highlighted property * Test cleanup --------- Co-authored-by: Matthias Mair <code@mjmair.com>
This commit is contained in:
@ -59,6 +59,8 @@ export const test = baseTest.extend({
|
||||
if (
|
||||
msg.type() === 'error' &&
|
||||
!msg.text().startsWith('ERR: ') &&
|
||||
url != 'http://localhost:8000/api/user/me/' &&
|
||||
url != 'http://localhost:8000/api/user/token/' &&
|
||||
url != 'http://localhost:8000/api/barcode/' &&
|
||||
url != 'http://localhost:8000/api/news/?search=&offset=0&limit=25' &&
|
||||
url != 'https://docs.inventree.org/en/versions.json' &&
|
||||
|
@ -9,7 +9,6 @@ export const doLogin = async (page, username?: string, password?: string) => {
|
||||
password = password ?? user.password;
|
||||
|
||||
await page.goto(logoutUrl);
|
||||
await page.goto(loginUrl);
|
||||
await expect(page).toHaveTitle(RegExp('^InvenTree.*$'));
|
||||
await page.waitForURL('**/platform/login');
|
||||
await page.getByLabel('username').fill(username);
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { expect, test } from './baseFixtures.js';
|
||||
import { baseUrl, user } from './defaults.js';
|
||||
import { baseUrl, loginUrl, user } from './defaults.js';
|
||||
import { doLogin, doQuickLogin } from './login.js';
|
||||
|
||||
test('PUI - Basic Login Test', async ({ page }) => {
|
||||
@ -17,6 +17,22 @@ test('PUI - Basic Login Test', async ({ page }) => {
|
||||
await page
|
||||
.getByRole('heading', { name: `Welcome to your Dashboard, ${user.name}` })
|
||||
.click();
|
||||
|
||||
// Check that the username is provided
|
||||
await page.getByText(user.username);
|
||||
|
||||
await expect(page).toHaveTitle(RegExp('^InvenTree'));
|
||||
|
||||
// Go to the dashboard
|
||||
await page.goto(baseUrl);
|
||||
await page.waitForURL('**/platform');
|
||||
|
||||
// Logout (via menu)
|
||||
await page.getByRole('button', { name: 'Ally Access' }).click();
|
||||
await page.getByRole('menuitem', { name: 'Logout' }).click();
|
||||
|
||||
await page.waitForURL('**/platform/login');
|
||||
await page.getByLabel('username');
|
||||
});
|
||||
|
||||
test('PUI - Quick Login Test', async ({ page }) => {
|
||||
@ -34,4 +50,8 @@ test('PUI - Quick Login Test', async ({ page }) => {
|
||||
await page
|
||||
.getByRole('heading', { name: `Welcome to your Dashboard, ${user.name}` })
|
||||
.click();
|
||||
|
||||
// Logout (via URL)
|
||||
await page.goto(`${baseUrl}/logout/`);
|
||||
await page.waitForURL('**/platform/login');
|
||||
});
|
||||
|
@ -71,9 +71,10 @@ test('PUI - Parts - Supplier Parts', async ({ page }) => {
|
||||
test('PUI - Sales', async ({ page }) => {
|
||||
await doQuickLogin(page);
|
||||
|
||||
await page.goto(`${baseUrl}/sales/`);
|
||||
|
||||
await page.goto(`${baseUrl}/sales/index/`);
|
||||
await page.waitForURL('**/platform/sales/**');
|
||||
|
||||
await page.getByRole('tab', { name: 'Sales Orders' }).click();
|
||||
await page.waitForURL('**/platform/sales/index/salesorders');
|
||||
await page.getByRole('tab', { name: 'Return Orders' }).click();
|
||||
|
||||
|
@ -5,8 +5,12 @@ import { doQuickLogin } from './login.js';
|
||||
test('PUI - Stock', async ({ page }) => {
|
||||
await doQuickLogin(page);
|
||||
|
||||
await page.goto(`${baseUrl}/stock`);
|
||||
await page.goto(`${baseUrl}/stock/location/index/`);
|
||||
await page.waitForURL('**/platform/stock/location/**');
|
||||
|
||||
await page.getByRole('tab', { name: 'Location Details' }).click();
|
||||
await page.waitForURL('**/platform/stock/location/index/details');
|
||||
|
||||
await page.getByRole('tab', { name: 'Stock Items' }).click();
|
||||
await page.getByRole('cell', { name: '1551ABK' }).click();
|
||||
await page.getByRole('tab', { name: 'Stock', exact: true }).click();
|
||||
|
Reference in New Issue
Block a user