mirror of
https://github.com/inventree/InvenTree.git
synced 2025-07-21 20:26:29 +00:00
[PUI] Error pages (#7554)
* Add <PermissionDenied /> page * Check permissions for admin center * Wrap <PartDetail> page in an error handler - Display client or server errors * Add error handlers to other detail pages * Refactor error pages * Add playwright tests * Refactor component locations * Get test to work
This commit is contained in:
src/frontend
src
components
errors
ClientError.tsxGenericErrorPage.tsxNotAuthenticated.tsxNotFound.tsxPermissionDenied.tsxServerError.tsx
forms
nav
hooks
pages
router.tsxtests
@@ -64,7 +64,8 @@ export const test = baseTest.extend({
|
||||
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' &&
|
||||
!url.startsWith('chrome://')
|
||||
!url.startsWith('chrome://') &&
|
||||
url.indexOf('99999') < 0
|
||||
)
|
||||
messages.push(msg);
|
||||
});
|
||||
|
@@ -31,10 +31,14 @@ export const doQuickLogin = async (
|
||||
password = password ?? user.password;
|
||||
url = url ?? baseUrl;
|
||||
|
||||
// await page.goto(logoutUrl);
|
||||
await page.goto(`${url}/login/?login=${username}&password=${password}`);
|
||||
await page.waitForURL('**/platform/home');
|
||||
await page
|
||||
.getByRole('heading', { name: 'Welcome to your Dashboard,' })
|
||||
.waitFor();
|
||||
};
|
||||
|
||||
export const doLogout = async (page) => {
|
||||
await page.goto(`${baseUrl}/logout/`);
|
||||
await page.waitForURL('**/platform/login');
|
||||
};
|
||||
|
@@ -224,3 +224,13 @@ test('PUI - Pages - Part - Notes', async ({ page }) => {
|
||||
// Check that the original notes are still present
|
||||
await page.getByText('This is some data').waitFor();
|
||||
});
|
||||
|
||||
test('PUI - Pages - Part - 404', async ({ page }) => {
|
||||
await doQuickLogin(page);
|
||||
|
||||
await page.goto(`${baseUrl}/part/99999/`);
|
||||
await page.getByText('Page Not Found', { exact: true }).waitFor();
|
||||
|
||||
// Clear out any console error messages
|
||||
await page.evaluate(() => console.clear());
|
||||
});
|
||||
|
@@ -54,4 +54,5 @@ test('PUI - Quick Login Test', async ({ page }) => {
|
||||
// Logout (via URL)
|
||||
await page.goto(`${baseUrl}/logout/`);
|
||||
await page.waitForURL('**/platform/login');
|
||||
await page.getByLabel('username');
|
||||
});
|
||||
|
@@ -1,6 +1,6 @@
|
||||
import { test } from './baseFixtures.js';
|
||||
import { baseUrl } from './defaults.js';
|
||||
import { doQuickLogin } from './login.js';
|
||||
import { doLogout, doQuickLogin } from './login.js';
|
||||
|
||||
test('PUI - Parts', async ({ page }) => {
|
||||
await doQuickLogin(page);
|
||||
@@ -141,57 +141,6 @@ test('PUI - Scanning', async ({ page }) => {
|
||||
await page.getByRole('option', { name: 'Manual input' }).click();
|
||||
});
|
||||
|
||||
test('PUI - Admin', async ({ page }) => {
|
||||
// Note here we login with admin access
|
||||
await doQuickLogin(page, 'admin', 'inventree');
|
||||
|
||||
// User settings
|
||||
await page.getByRole('button', { name: 'admin' }).click();
|
||||
await page.getByRole('menuitem', { name: 'Account settings' }).click();
|
||||
await page.getByRole('tab', { name: 'Security' }).click();
|
||||
//await page.getByRole('tab', { name: 'Dashboard' }).click();
|
||||
await page.getByRole('tab', { name: 'Display Options' }).click();
|
||||
await page.getByText('Date Format').waitFor();
|
||||
await page.getByRole('tab', { name: 'Search' }).click();
|
||||
await page.getByText('Regex Search').waitFor();
|
||||
await page.getByRole('tab', { name: 'Notifications' }).click();
|
||||
await page.getByRole('tab', { name: 'Reporting' }).click();
|
||||
await page.getByText('Inline report display').waitFor();
|
||||
|
||||
// System Settings
|
||||
await page.getByRole('link', { name: 'Switch to System Setting' }).click();
|
||||
await page.getByText('Base URL', { exact: true }).waitFor();
|
||||
await page.getByRole('tab', { name: 'Login' }).click();
|
||||
await page.getByRole('tab', { name: 'Barcodes' }).click();
|
||||
await page.getByRole('tab', { name: 'Notifications' }).click();
|
||||
await page.getByRole('tab', { name: 'Pricing' }).click();
|
||||
await page.getByRole('tab', { name: 'Labels' }).click();
|
||||
await page.getByRole('tab', { name: 'Reporting' }).click();
|
||||
await page.getByRole('tab', { name: 'Part Categories' }).click();
|
||||
//wait page.locator('#mantine-9hqbwrml8-tab-parts').click();
|
||||
//await page.locator('#mantine-9hqbwrml8-tab-stock').click();
|
||||
await page.getByRole('tab', { name: 'Stocktake' }).click();
|
||||
await page.getByRole('tab', { name: 'Build Orders' }).click();
|
||||
await page.getByRole('tab', { name: 'Purchase Orders' }).click();
|
||||
await page.getByRole('tab', { name: 'Sales Orders' }).click();
|
||||
await page.getByRole('tab', { name: 'Return Orders' }).click();
|
||||
|
||||
// Admin Center
|
||||
await page.getByRole('button', { name: 'admin' }).click();
|
||||
await page.getByRole('menuitem', { name: 'Admin Center' }).click();
|
||||
await page.getByRole('tab', { name: 'Background Tasks' }).click();
|
||||
await page.getByRole('tab', { name: 'Error Reports' }).click();
|
||||
await page.getByRole('tab', { name: 'Currencies' }).click();
|
||||
await page.getByRole('tab', { name: 'Project Codes' }).click();
|
||||
await page.getByRole('tab', { name: 'Custom Units' }).click();
|
||||
await page.getByRole('tab', { name: 'Part Parameters' }).click();
|
||||
await page.getByRole('tab', { name: 'Category Parameters' }).click();
|
||||
await page.getByRole('tab', { name: 'Label Templates' }).click();
|
||||
await page.getByRole('tab', { name: 'Report Templates' }).click();
|
||||
await page.getByRole('tab', { name: 'Plugins' }).click();
|
||||
await page.getByRole('tab', { name: 'Machines' }).click();
|
||||
});
|
||||
|
||||
test('PUI - Language / Color', async ({ page }) => {
|
||||
await doQuickLogin(page);
|
||||
|
||||
|
83
src/frontend/tests/pui_settings.spec.ts
Normal file
83
src/frontend/tests/pui_settings.spec.ts
Normal file
@@ -0,0 +1,83 @@
|
||||
import { test } from './baseFixtures.js';
|
||||
import { baseUrl } from './defaults.js';
|
||||
import { doLogout, doQuickLogin } from './login.js';
|
||||
|
||||
test('PUI - Admin', async ({ page }) => {
|
||||
// Note here we login with admin access
|
||||
await doQuickLogin(page, 'admin', 'inventree');
|
||||
|
||||
// User settings
|
||||
await page.getByRole('button', { name: 'admin' }).click();
|
||||
await page.getByRole('menuitem', { name: 'Account settings' }).click();
|
||||
await page.getByRole('tab', { name: 'Security' }).click();
|
||||
|
||||
await page.getByRole('tab', { name: 'Display Options' }).click();
|
||||
await page.getByText('Date Format').waitFor();
|
||||
await page.getByRole('tab', { name: 'Search' }).click();
|
||||
await page.getByText('Regex Search').waitFor();
|
||||
await page.getByRole('tab', { name: 'Notifications' }).click();
|
||||
await page.getByRole('tab', { name: 'Reporting' }).click();
|
||||
await page.getByText('Inline report display').waitFor();
|
||||
|
||||
// System Settings
|
||||
await page.getByRole('link', { name: 'Switch to System Setting' }).click();
|
||||
await page.getByText('Base URL', { exact: true }).waitFor();
|
||||
await page.getByRole('tab', { name: 'Login' }).click();
|
||||
await page.getByRole('tab', { name: 'Barcodes' }).click();
|
||||
await page.getByRole('tab', { name: 'Notifications' }).click();
|
||||
await page.getByRole('tab', { name: 'Pricing' }).click();
|
||||
await page.getByRole('tab', { name: 'Labels' }).click();
|
||||
await page.getByRole('tab', { name: 'Reporting' }).click();
|
||||
await page.getByRole('tab', { name: 'Part Categories' }).click();
|
||||
|
||||
await page.getByRole('tab', { name: 'Stocktake' }).click();
|
||||
await page.getByRole('tab', { name: 'Build Orders' }).click();
|
||||
await page.getByRole('tab', { name: 'Purchase Orders' }).click();
|
||||
await page.getByRole('tab', { name: 'Sales Orders' }).click();
|
||||
await page.getByRole('tab', { name: 'Return Orders' }).click();
|
||||
|
||||
// Admin Center
|
||||
await page.getByRole('button', { name: 'admin' }).click();
|
||||
await page.getByRole('menuitem', { name: 'Admin Center' }).click();
|
||||
await page.getByRole('tab', { name: 'Background Tasks' }).click();
|
||||
await page.getByRole('tab', { name: 'Error Reports' }).click();
|
||||
await page.getByRole('tab', { name: 'Currencies' }).click();
|
||||
await page.getByRole('tab', { name: 'Project Codes' }).click();
|
||||
await page.getByRole('tab', { name: 'Custom Units' }).click();
|
||||
await page.getByRole('tab', { name: 'Part Parameters' }).click();
|
||||
await page.getByRole('tab', { name: 'Category Parameters' }).click();
|
||||
await page.getByRole('tab', { name: 'Label Templates' }).click();
|
||||
await page.getByRole('tab', { name: 'Report Templates' }).click();
|
||||
await page.getByRole('tab', { name: 'Plugins' }).click();
|
||||
await page.getByRole('tab', { name: 'Machines' }).click();
|
||||
});
|
||||
|
||||
test('PUI - Admin - Unauthorized', async ({ page }) => {
|
||||
// Try to access "admin" page with a non-staff user
|
||||
await doQuickLogin(page, 'allaccess', 'nolimits');
|
||||
|
||||
await page.goto(`${baseUrl}/settings/admin/`);
|
||||
await page.waitForURL('**/settings/admin/**');
|
||||
|
||||
// Should get a permission denied message
|
||||
await page.getByText('Permission Denied').waitFor();
|
||||
await page
|
||||
.getByRole('button', { name: 'Return to the index page' })
|
||||
.waitFor();
|
||||
|
||||
// Try to access user settings page (should be accessible)
|
||||
await page.goto(`${baseUrl}/settings/user/`);
|
||||
await page.waitForURL('**/settings/user/**');
|
||||
|
||||
await page.getByRole('tab', { name: 'Display Options' }).click();
|
||||
await page.getByRole('tab', { name: 'Account' }).click();
|
||||
|
||||
// Try to access global settings page
|
||||
await page.goto(`${baseUrl}/settings/system/`);
|
||||
await page.waitForURL('**/settings/system/**');
|
||||
|
||||
await page.getByText('Permission Denied').waitFor();
|
||||
await page
|
||||
.getByRole('button', { name: 'Return to the index page' })
|
||||
.waitFor();
|
||||
});
|
Reference in New Issue
Block a user