2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-11-14 03:46:44 +00:00
Files
InvenTree/src/frontend/tests/pui_machines.spec.ts
Oliver ae16823d5d [ui] Settings fix (#10239)
* Enhance playwright test

* Update zustand

* Fix machine settings

* Fix for PluginSettingList

* Fix user plugin settings

* Fix issue in RelatedModelField

* Enforce values when rebuilding a form

* Update react-hook-form

* Enhanced playwright testing
2025-08-28 16:57:02 +10:00

133 lines
4.4 KiB
TypeScript

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.waitForLoadState('networkidle');
await page.waitForTimeout(1000);
// Create machine config if it does not already exist
const exists: boolean = await page
.getByRole('cell', { name: 'my-dummy-machine' })
.isVisible({ timeout: 250 });
if (!exists) {
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();
} else {
// Machine already exists - just click on it to open the "machine drawer"
await page.getByRole('cell', { name: 'my-dummy-machine' }).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();
const setting_value = await page
.getByRole('textbox', { name: 'text-field-value' })
.inputValue();
await page
.getByRole('textbox', { name: 'text-field-value' })
.fill(`${setting_value}-2`);
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();
});