mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 13:15:43 +00:00 
			
		
		
		
	Purchase Order Destination (#8403)
* Add "destination" field to PurchaseOrder * Add 'destination' field to API * Add location to PurchaseOrderDetail page * Display "destination" on PurchaseOrderDetail page * Pre-select location based on selected "destination" * Fix order of reception priority * Auto-expand the per-line destination field * Add "Purchase Order" detail to StockItemDetail page * Bug fix in PurchaseOrderForms * Split playwright tests * Docs updates * Bump API version * Unit test fixes * Fix more tests * Backport to CUI * Use PurchaseOrder destination when scanning items
This commit is contained in:
		
							
								
								
									
										85
									
								
								src/frontend/tests/pages/pui_purchase_order.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								src/frontend/tests/pages/pui_purchase_order.spec.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,85 @@ | ||||
| import { test } from '../baseFixtures.ts'; | ||||
| import { doQuickLogin } from '../login.ts'; | ||||
|  | ||||
| test('Purchase Orders - General', async ({ page }) => { | ||||
|   await doQuickLogin(page); | ||||
|  | ||||
|   await page.getByRole('tab', { name: 'Purchasing' }).click(); | ||||
|   await page.getByRole('cell', { name: 'PO0012' }).click(); | ||||
|   await page.waitForTimeout(200); | ||||
|  | ||||
|   await page.getByRole('tab', { name: 'Line Items' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Received Stock' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Attachments' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Purchasing' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Suppliers' }).click(); | ||||
|   await page.getByText('Arrow', { exact: true }).click(); | ||||
|   await page.waitForTimeout(200); | ||||
|  | ||||
|   await page.getByRole('tab', { name: 'Supplied Parts' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Purchase Orders' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Stock Items' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Contacts' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Addresses' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Attachments' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Purchasing' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Manufacturers' }).click(); | ||||
|   await page.getByText('AVX Corporation').click(); | ||||
|   await page.waitForTimeout(200); | ||||
|  | ||||
|   await page.getByRole('tab', { name: 'Addresses' }).click(); | ||||
|   await page.getByRole('cell', { name: 'West Branch' }).click(); | ||||
|   await page.locator('.mantine-ScrollArea-root').click(); | ||||
|   await page | ||||
|     .getByRole('row', { name: 'West Branch Yes Surf Avenue 9' }) | ||||
|     .getByRole('button') | ||||
|     .click(); | ||||
|   await page.getByRole('menuitem', { name: 'Edit' }).click(); | ||||
|  | ||||
|   await page.getByLabel('text-field-title').waitFor(); | ||||
|   await page.getByLabel('text-field-line2').waitFor(); | ||||
|  | ||||
|   // Read the current value of the cell, to ensure we always *change* it! | ||||
|   const value = await page.getByLabel('text-field-line2').inputValue(); | ||||
|   await page | ||||
|     .getByLabel('text-field-line2') | ||||
|     .fill(value == 'old' ? 'new' : 'old'); | ||||
|  | ||||
|   await page.getByRole('button', { name: 'Submit' }).isEnabled(); | ||||
|  | ||||
|   await page.getByRole('button', { name: 'Submit' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Details' }).waitFor(); | ||||
| }); | ||||
|  | ||||
| /** | ||||
|  * Tests for receiving items against a purchase order | ||||
|  */ | ||||
| test('Purchase Orders - Receive Items', async ({ page }) => { | ||||
|   await doQuickLogin(page); | ||||
|  | ||||
|   await page.getByRole('tab', { name: 'Purchasing' }).click(); | ||||
|   await page.getByRole('cell', { name: 'PO0014' }).click(); | ||||
|  | ||||
|   await page.getByRole('tab', { name: 'Order Details' }).click(); | ||||
|   await page.getByText('0 / 3').waitFor(); | ||||
|  | ||||
|   // Select all line items to receive | ||||
|   await page.getByRole('tab', { name: 'Line Items' }).click(); | ||||
|  | ||||
|   await page.getByLabel('Select all records').click(); | ||||
|   await page.waitForTimeout(200); | ||||
|   await page.getByLabel('action-button-receive-items').click(); | ||||
|  | ||||
|   // Check for display of individual locations | ||||
|   await page | ||||
|     .getByRole('cell', { name: /Choose Location/ }) | ||||
|     .getByText('Parts Bins') | ||||
|     .waitFor(); | ||||
|   await page | ||||
|     .getByRole('cell', { name: /Choose Location/ }) | ||||
|     .getByText('Room 101') | ||||
|     .waitFor(); | ||||
|   await page.getByText('Mechanical Lab').waitFor(); | ||||
|  | ||||
|   await page.getByRole('button', { name: 'Cancel' }).click(); | ||||
| }); | ||||
| @@ -178,53 +178,3 @@ test('Purchase Orders - Barcodes', async ({ page }) => { | ||||
|   await page.waitForTimeout(500); | ||||
|   await page.getByRole('button', { name: 'Issue Order' }).waitFor(); | ||||
| }); | ||||
| 
 | ||||
| test('Purchase Orders - General', async ({ page }) => { | ||||
|   await doQuickLogin(page); | ||||
| 
 | ||||
|   await page.getByRole('tab', { name: 'Purchasing' }).click(); | ||||
|   await page.getByRole('cell', { name: 'PO0012' }).click(); | ||||
|   await page.waitForTimeout(200); | ||||
| 
 | ||||
|   await page.getByRole('tab', { name: 'Line Items' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Received Stock' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Attachments' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Purchasing' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Suppliers' }).click(); | ||||
|   await page.getByText('Arrow', { exact: true }).click(); | ||||
|   await page.waitForTimeout(200); | ||||
| 
 | ||||
|   await page.getByRole('tab', { name: 'Supplied Parts' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Purchase Orders' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Stock Items' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Contacts' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Addresses' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Attachments' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Purchasing' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Manufacturers' }).click(); | ||||
|   await page.getByText('AVX Corporation').click(); | ||||
|   await page.waitForTimeout(200); | ||||
| 
 | ||||
|   await page.getByRole('tab', { name: 'Addresses' }).click(); | ||||
|   await page.getByRole('cell', { name: 'West Branch' }).click(); | ||||
|   await page.locator('.mantine-ScrollArea-root').click(); | ||||
|   await page | ||||
|     .getByRole('row', { name: 'West Branch Yes Surf Avenue 9' }) | ||||
|     .getByRole('button') | ||||
|     .click(); | ||||
|   await page.getByRole('menuitem', { name: 'Edit' }).click(); | ||||
| 
 | ||||
|   await page.getByLabel('text-field-title').waitFor(); | ||||
|   await page.getByLabel('text-field-line2').waitFor(); | ||||
| 
 | ||||
|   // Read the current value of the cell, to ensure we always *change* it!
 | ||||
|   const value = await page.getByLabel('text-field-line2').inputValue(); | ||||
|   await page | ||||
|     .getByLabel('text-field-line2') | ||||
|     .fill(value == 'old' ? 'new' : 'old'); | ||||
| 
 | ||||
|   await page.getByRole('button', { name: 'Submit' }).isEnabled(); | ||||
| 
 | ||||
|   await page.getByRole('button', { name: 'Submit' }).click(); | ||||
|   await page.getByRole('tab', { name: 'Details' }).waitFor(); | ||||
| }); | ||||
		Reference in New Issue
	
	Block a user