mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 13:15:43 +00:00 
			
		
		
		
	Add SelectionList concept (#8054)
* Add SelectionList model, APIs and simple tests * Add managment entries * Add field to serializer * add more tests for parameters * Add support for SelectionList to CUI * Add selection option to PUI * fix display * add PUI admin entries * remove get_api_url * fix modeldict * Add models for meta * Add test for inactive lists * Add locking and testing for locking * ignore unneeded section * Add PUI testing for adding parameter * Add selectionList admin * also allow creating entries * extend tests * force click * and more testing * adapt test? * more assurance? * make test more robust * more retries but shorter runs * Update playwright.config.ts * Add docs * Add note regarding administration * Adapt to https://github.com/inventree/InvenTree/pull/8093 * make help text more descriptive * fix migration * remove unneeded UI entries * add lables and describtions to TableFields * factor out selectionList forms * add key to button * cleanup imports * add editable fields * Add function to add row * fix render warning * remove dead parameter * fix migrations * fix migrations * fix format * autofix * fix migrations * fix create / update loop * fix addition of empty lists * extend tests * adjust changelog entry * fix updating loop * update test name * merge migrations * simplify request * - Add entry count to list - Move parameter table to default accordion * fix test * fix test clearing section --------- Co-authored-by: Oliver Walters <oliver.henry.walters@gmail.com>
This commit is contained in:
		
							
								
								
									
										100
									
								
								src/frontend/tests/settings/selectionList.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								src/frontend/tests/settings/selectionList.spec.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,100 @@ | ||||
| import { test } from '../baseFixtures'; | ||||
| import { baseUrl } from '../defaults'; | ||||
| import { doQuickLogin } from '../login'; | ||||
|  | ||||
| test('PUI - Admin - Parameter', async ({ page }) => { | ||||
|   await doQuickLogin(page, 'admin', 'inventree'); | ||||
|   await page.getByRole('button', { name: 'admin' }).click(); | ||||
|   await page.getByRole('menuitem', { name: 'Admin Center' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Part Parameters' }).click(); | ||||
|  | ||||
|   await page.getByRole('button', { name: 'Selection Lists' }).click(); | ||||
|   await page.waitForLoadState('networkidle'); | ||||
|  | ||||
|   // clean old data if exists | ||||
|   await page | ||||
|     .getByRole('cell', { name: 'some list' }) | ||||
|     .waitFor({ timeout: 200 }) | ||||
|     .then(async (cell) => { | ||||
|       await page | ||||
|         .getByRole('cell', { name: 'some list' }) | ||||
|         .locator('..') | ||||
|         .getByLabel('row-action-menu-') | ||||
|         .click(); | ||||
|       await page.getByRole('menuitem', { name: 'Delete' }).click(); | ||||
|       await page.getByRole('button', { name: 'Delete' }).click(); | ||||
|     }) | ||||
|     .catch(() => {}); | ||||
|  | ||||
|   // clean old data if exists | ||||
|   await page.getByRole('button', { name: 'Part Parameter Template' }).click(); | ||||
|   await page.waitForLoadState('networkidle'); | ||||
|   await page | ||||
|     .getByRole('cell', { name: 'my custom parameter' }) | ||||
|     .waitFor({ timeout: 200 }) | ||||
|     .then(async (cell) => { | ||||
|       await page | ||||
|         .getByRole('cell', { name: 'my custom parameter' }) | ||||
|         .locator('..') | ||||
|         .getByLabel('row-action-menu-') | ||||
|         .click(); | ||||
|       await page.getByRole('menuitem', { name: 'Delete' }).click(); | ||||
|       await page.getByRole('button', { name: 'Delete' }).click(); | ||||
|     }) | ||||
|     .catch(() => {}); | ||||
|  | ||||
|   // Add selection list | ||||
|   await page.getByRole('button', { name: 'Selection Lists' }).click(); | ||||
|   await page.waitForLoadState('networkidle'); | ||||
|   await page.getByLabel('action-button-add-selection-').waitFor(); | ||||
|   await page.getByLabel('action-button-add-selection-').click(); | ||||
|   await page.getByLabel('text-field-name').fill('some list'); | ||||
|   await page.getByLabel('text-field-description').fill('Listdescription'); | ||||
|   await page.getByRole('button', { name: 'Submit' }).click(); | ||||
|   await page.getByRole('cell', { name: 'some list' }).waitFor(); | ||||
|   await page.waitForTimeout(200); | ||||
|  | ||||
|   // Add parameter | ||||
|   await page.waitForLoadState('networkidle'); | ||||
|   await page.getByRole('button', { name: 'Part Parameter Template' }).click(); | ||||
|   await page.getByLabel('action-button-add-parameter').waitFor(); | ||||
|   await page.getByLabel('action-button-add-parameter').click(); | ||||
|   await page.getByLabel('text-field-name').fill('my custom parameter'); | ||||
|   await page.getByLabel('text-field-description').fill('description'); | ||||
|   await page | ||||
|     .locator('div') | ||||
|     .filter({ hasText: /^Search\.\.\.$/ }) | ||||
|     .nth(2) | ||||
|     .click(); | ||||
|   await page | ||||
|     .getByRole('option', { name: 'some list' }) | ||||
|     .locator('div') | ||||
|     .first() | ||||
|     .click(); | ||||
|   await page.getByRole('button', { name: 'Submit' }).click(); | ||||
|   await page.getByRole('cell', { name: 'my custom parameter' }).click(); | ||||
|  | ||||
|   // Fill parameter | ||||
|   await page.goto(`${baseUrl}/part/104/parameters/`); | ||||
|   await page.getByLabel('Parameters').getByText('Parameters').waitFor(); | ||||
|   await page.waitForLoadState('networkidle'); | ||||
|   await page.getByLabel('action-button-add-parameter').waitFor(); | ||||
|   await page.getByLabel('action-button-add-parameter').click(); | ||||
|   await page.waitForTimeout(200); | ||||
|   await page.getByText('New Part Parameter').waitFor(); | ||||
|   await page | ||||
|     .getByText('Template *Parameter') | ||||
|     .locator('div') | ||||
|     .filter({ hasText: /^Search\.\.\.$/ }) | ||||
|     .nth(2) | ||||
|     .click(); | ||||
|   await page | ||||
|     .getByText('Template *Parameter') | ||||
|     .locator('div') | ||||
|     .filter({ hasText: /^Search\.\.\.$/ }) | ||||
|     .locator('input') | ||||
|     .fill('my custom parameter'); | ||||
|   await page.getByRole('option', { name: 'my custom parameter' }).click(); | ||||
|   await page.getByLabel('choice-field-data').fill('2'); | ||||
|   await page.getByRole('button', { name: 'Submit' }).click(); | ||||
| }); | ||||
		Reference in New Issue
	
	Block a user