mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 13:15:43 +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:
		| @@ -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