mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 13:15:43 +00:00 
			
		
		
		
	Build start date (#8915)
* Add 'start_date' to Build model * Add to serializer * Add filtering and ordering * Update BuildOrderTable - Add new column - Add new filtering options * Add sanity check for start_date * Add 'start_date' field to BuildOrder form * Update docs * Bump API version * Tweak unit testing * Display 'start_date' on build page * Refactor UI tests * Fix for 'date' field in forms * Add additional unit tests * Fix helper func * Remove debug msg
This commit is contained in:
		| @@ -43,7 +43,11 @@ export const setTableChoiceFilter = async (page, filter, value) => { | ||||
|   await page.getByRole('button', { name: 'Add Filter' }).click(); | ||||
|   await page.getByPlaceholder('Select filter').fill(filter); | ||||
|   await page.getByPlaceholder('Select filter').click(); | ||||
|   await page.getByRole('option', { name: filter }).click(); | ||||
|  | ||||
|   // Construct a regex to match the filter name exactly | ||||
|   const filterRegex = new RegExp(`^${filter}$`, 'i'); | ||||
|  | ||||
|   await page.getByRole('option', { name: filterRegex }).click(); | ||||
|  | ||||
|   await page.getByPlaceholder('Select filter value').click(); | ||||
|   await page.getByRole('option', { name: value }).click(); | ||||
|   | ||||
| @@ -87,6 +87,33 @@ test('Build Order - Basic Tests', async ({ page }) => { | ||||
|     .waitFor(); | ||||
| }); | ||||
|  | ||||
| test('Build Order - Edit', async ({ page }) => { | ||||
|   await doQuickLogin(page); | ||||
|  | ||||
|   await page.goto(`${baseUrl}/manufacturing/build-order/22/`); | ||||
|  | ||||
|   // Check for expected text items | ||||
|   await page.getByText('Building for sales order').first().waitFor(); | ||||
|   await page.getByText('2024-08-08').waitFor(); // Created date | ||||
|   await page.getByText('2025-01-01').waitFor(); // Start date | ||||
|   await page.getByText('2025-01-22').waitFor(); // Target date | ||||
|  | ||||
|   await page.keyboard.press('Control+E'); | ||||
|  | ||||
|   // Edit start date | ||||
|   await page.getByLabel('date-field-start_date').fill('2026-09-09'); | ||||
|  | ||||
|   // Submit the form | ||||
|   await page.getByRole('button', { name: 'Submit' }).click(); | ||||
|  | ||||
|   // Expect error | ||||
|   await page.getByText('Errors exist for one or more form fields').waitFor(); | ||||
|   await page.getByText('Target date must be after start date').waitFor(); | ||||
|  | ||||
|   // Cancel the form | ||||
|   await page.getByRole('button', { name: 'Cancel' }).click(); | ||||
| }); | ||||
|  | ||||
| test('Build Order - Build Outputs', async ({ page }) => { | ||||
|   await doQuickLogin(page); | ||||
|  | ||||
|   | ||||
| @@ -1,51 +1,38 @@ | ||||
| import { test } from './baseFixtures.js'; | ||||
| import { baseUrl } from './defaults.js'; | ||||
| import { | ||||
|   clearTableFilters, | ||||
|   closeFilterDrawer, | ||||
|   openFilterDrawer | ||||
| } from './helpers.js'; | ||||
| import { clearTableFilters, setTableChoiceFilter } from './helpers.js'; | ||||
| import { doQuickLogin } from './login.js'; | ||||
|  | ||||
| // Helper function to set the value of a specific table filter | ||||
| const setFilter = async (page, name: string, value: string) => { | ||||
|   await openFilterDrawer(page); | ||||
|  | ||||
|   await page.getByRole('button', { name: 'Add Filter' }).click(); | ||||
|   await page.getByPlaceholder('Select filter').click(); | ||||
|   await page.getByRole('option', { name: name, exact: true }).click(); | ||||
|   await page.getByPlaceholder('Select filter value').click(); | ||||
|   await page.getByRole('option', { name: value, exact: true }).click(); | ||||
|  | ||||
|   await closeFilterDrawer(page); | ||||
| }; | ||||
|  | ||||
| test('Tables - Filters', async ({ page }) => { | ||||
|   await doQuickLogin(page); | ||||
|  | ||||
|   // Head to the "build order list" page | ||||
|   await page.goto(`${baseUrl}/manufacturing/index/`); | ||||
|  | ||||
|   await setFilter(page, 'Status', 'Complete'); | ||||
|   await setFilter(page, 'Responsible', 'allaccess'); | ||||
|   await setFilter(page, 'Project Code', 'PRJ-NIM'); | ||||
|   await clearTableFilters(page); | ||||
|  | ||||
|   await setTableChoiceFilter(page, 'Status', 'Complete'); | ||||
|   await setTableChoiceFilter(page, 'Responsible', 'allaccess'); | ||||
|   await setTableChoiceFilter(page, 'Project Code', 'PRJ-NIM'); | ||||
|  | ||||
|   await clearTableFilters(page); | ||||
|  | ||||
|   // Head to the "part list" page | ||||
|   await page.goto(`${baseUrl}/part/category/index/parts/`); | ||||
|  | ||||
|   await setFilter(page, 'Assembly', 'Yes'); | ||||
|   await setTableChoiceFilter(page, 'Assembly', 'Yes'); | ||||
|  | ||||
|   await clearTableFilters(page); | ||||
|  | ||||
|   // Head to the "purchase order list" page | ||||
|   await page.goto(`${baseUrl}/purchasing/index/purchaseorders/`); | ||||
|  | ||||
|   await setFilter(page, 'Status', 'Complete'); | ||||
|   await setFilter(page, 'Responsible', 'readers'); | ||||
|   await setFilter(page, 'Assigned to me', 'No'); | ||||
|   await setFilter(page, 'Project Code', 'PRO-ZEN'); | ||||
|   await clearTableFilters(page); | ||||
|  | ||||
|   await setTableChoiceFilter(page, 'Status', 'Complete'); | ||||
|   await setTableChoiceFilter(page, 'Responsible', 'readers'); | ||||
|   await setTableChoiceFilter(page, 'Assigned to me', 'No'); | ||||
|   await setTableChoiceFilter(page, 'Project Code', 'PRO-ZEN'); | ||||
|  | ||||
|   await clearTableFilters(page); | ||||
| }); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user