mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 13:15:43 +00:00 
			
		
		
		
	Machine registry improvements (#10150)
* Add wrapper function for machine registry * Decorate entrypoint functions * Docstrings * Fix for boolean setting * Add playwright tests * Use proper entrypoints * Ensure settings are fetched correctly * Prevent recursion of machine registry decorator * Fix machine status display * Enhanced warning msg * Add simple machine sample printer * Adds playwright tests for machine UI * re-throw exception * Define 'machine' plugin mixin class * Adjust machine discovery * Use plugin mixins for registering machine types and drivers * Adjust unit test * Remove plugin static files when deactivating * Force machine reload when plugin registry changes * Add plugins specific to testing framework * Add test for plugin loading sequence * Add session caching - Significantly reduce DB hits * Enhanced unit testing and test plugins * Refactor unit tests * Further unit test fixes * Adjust instance rendering * Display table of available drivers * Cleanup * ADjust unit test * Tweak unit test * Add docs on new mixin type * Tweak machine overview docs * Tweak playwright tests * Additional unit test * Add unit test for calling machine func * Enhanced playwright tests * Account for database not being ready
This commit is contained in:
		
							
								
								
									
										113
									
								
								src/frontend/tests/pui_machines.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								src/frontend/tests/pui_machines.spec.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,113 @@ | ||||
| import test from 'playwright/test'; | ||||
| import { clickOnRowMenu, navigate } from './helpers'; | ||||
| import { doCachedLogin } from './login'; | ||||
| import { setPluginState } from './settings'; | ||||
|  | ||||
| test('Machines - Admin Panel', async ({ browser }) => { | ||||
|   const page = await doCachedLogin(browser, { | ||||
|     username: 'admin', | ||||
|     password: 'inventree', | ||||
|     url: 'settings/admin/machine' | ||||
|   }); | ||||
|  | ||||
|   await page.getByRole('button', { name: 'Machines' }).click(); | ||||
|   await page.getByRole('button', { name: 'Machine Drivers' }).click(); | ||||
|   await page.getByRole('button', { name: 'Machine Types' }).click(); | ||||
|   await page.getByRole('button', { name: 'Machine Errors' }).click(); | ||||
|  | ||||
|   await page.getByText('There are no machine registry errors').waitFor(); | ||||
| }); | ||||
|  | ||||
| test('Machines - Activation', async ({ browser, request }) => { | ||||
|   const page = await doCachedLogin(browser, { | ||||
|     username: 'admin', | ||||
|     password: 'inventree', | ||||
|     url: 'settings/admin/machine' | ||||
|   }); | ||||
|  | ||||
|   // Ensure that the sample machine plugin is enabled | ||||
|   await setPluginState({ | ||||
|     request, | ||||
|     plugin: 'sample-printer-machine-plugin', | ||||
|     state: true | ||||
|   }); | ||||
|  | ||||
|   await page.reload(); | ||||
|  | ||||
|   await page.getByRole('button', { name: 'action-button-add-machine' }).click(); | ||||
|   await page | ||||
|     .getByRole('textbox', { name: 'text-field-name' }) | ||||
|     .fill('my-dummy-machine'); | ||||
|   await page | ||||
|     .getByRole('textbox', { name: 'choice-field-machine_type' }) | ||||
|     .fill('label'); | ||||
|   await page.getByRole('option', { name: 'Label Printer' }).click(); | ||||
|  | ||||
|   await page.getByRole('textbox', { name: 'choice-field-driver' }).click(); | ||||
|   await page | ||||
|     .getByRole('option', { name: 'Sample Label Printer Driver' }) | ||||
|     .click(); | ||||
|   await page.getByRole('button', { name: 'Submit' }).click(); | ||||
|  | ||||
|   // Creating the new machine opens the "machine drawer" | ||||
|  | ||||
|   // Check for "machine type" settings | ||||
|   await page.getByText('Scope the printer to a specific location').waitFor(); | ||||
|  | ||||
|   // Check for "machine driver" settings | ||||
|   await page.getByText('Custom string for connecting').waitFor(); | ||||
|  | ||||
|   // Edit the available setting | ||||
|   await page.getByRole('button', { name: 'edit-setting-CONNECTION' }).click(); | ||||
|   await page | ||||
|     .getByRole('textbox', { name: 'text-field-value' }) | ||||
|     .fill('a new value'); | ||||
|   await page.getByRole('button', { name: 'Submit' }).click(); | ||||
|   await page.getByText('Setting CONNECTION updated successfully').waitFor(); | ||||
|  | ||||
|   // Close the drawer | ||||
|   await page.getByRole('banner').getByRole('button').first().click(); | ||||
|   const cell = await page.getByRole('cell', { name: 'my-dummy-machine' }); | ||||
|  | ||||
|   // Let's restart the machine now | ||||
|   await clickOnRowMenu(cell); | ||||
|   await page.getByRole('menuitem', { name: 'Edit' }).waitFor(); | ||||
|   await page.getByRole('menuitem', { name: 'Restart' }).click(); | ||||
|   await page.getByText('Machine restarted').waitFor(); | ||||
|  | ||||
|   // Let's print something with the machine | ||||
|   await navigate(page, 'stock/location/1/stock-items'); | ||||
|  | ||||
|   await page.getByRole('checkbox', { name: 'Select all records' }).click(); | ||||
|   await page | ||||
|     .getByRole('tabpanel', { name: 'Stock Items' }) | ||||
|     .getByLabel('action-menu-printing-actions') | ||||
|     .click(); | ||||
|   await page | ||||
|     .getByRole('menuitem', { | ||||
|       name: 'action-menu-printing-actions-print-labels' | ||||
|     }) | ||||
|     .click(); | ||||
|  | ||||
|   await page.getByLabel('related-field-plugin').fill('machine'); | ||||
|   await page.getByText('InvenTreeLabelMachine').click(); | ||||
|  | ||||
|   await page | ||||
|     .getByRole('textbox', { name: 'choice-field-machine' }) | ||||
|     .fill('dummy'); | ||||
|   await page.getByRole('option', { name: 'my-dummy-machine' }).click(); | ||||
|  | ||||
|   await page | ||||
|     .getByRole('button', { name: 'Print', exact: true }) | ||||
|     .first() | ||||
|     .click(); | ||||
|   await page.getByText('Process completed successfully').waitFor(); | ||||
|  | ||||
|   await navigate(page, 'settings/admin/machine/'); | ||||
|  | ||||
|   // Finally, delete the machine configuration | ||||
|   await clickOnRowMenu(cell); | ||||
|   await page.getByRole('menuitem', { name: 'Delete' }).click(); | ||||
|   await page.getByRole('button', { name: 'Delete' }).click(); | ||||
|   await page.getByText('Machine successfully deleted.').waitFor(); | ||||
| }); | ||||
		Reference in New Issue
	
	Block a user