mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-11-04 07:05:41 +00:00 
			
		
		
		
	[CI] Playwright testing improvements (#8985)
* Run playwright tests in headless mode * Add navigation helper * Validate files * test fix * Remove 'headless' * Fixes * Fix for 'navigate' helper * Further updates
This commit is contained in:
		@@ -1,3 +1,5 @@
 | 
			
		||||
import { baseUrl } from './defaults';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Open the filter drawer for the currently visible table
 | 
			
		||||
 * @param page - The page object
 | 
			
		||||
@@ -62,3 +64,20 @@ export const setTableChoiceFilter = async (page, filter, value) => {
 | 
			
		||||
export const getRowFromCell = async (cell) => {
 | 
			
		||||
  return cell.locator('xpath=ancestor::tr').first();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Navigate to the provided page, and wait for loading to complete
 | 
			
		||||
 * @param page
 | 
			
		||||
 * @param url
 | 
			
		||||
 */
 | 
			
		||||
export const navigate = async (page, url: string) => {
 | 
			
		||||
  if (!url.startsWith(baseUrl)) {
 | 
			
		||||
    if (url.startsWith('/')) {
 | 
			
		||||
      url = url.slice(1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    url = `${baseUrl}/${url}`;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  await page.goto(url, { waitUntil: 'domcontentloaded' });
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
import { expect } from './baseFixtures.js';
 | 
			
		||||
import { baseUrl, logoutUrl, user } from './defaults';
 | 
			
		||||
import { navigate } from './helpers.js';
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Perform form based login operation from the "login" URL
 | 
			
		||||
@@ -8,7 +9,7 @@ export const doLogin = async (page, username?: string, password?: string) => {
 | 
			
		||||
  username = username ?? user.username;
 | 
			
		||||
  password = password ?? user.password;
 | 
			
		||||
 | 
			
		||||
  await page.goto(logoutUrl);
 | 
			
		||||
  await navigate(page, logoutUrl);
 | 
			
		||||
  await expect(page).toHaveTitle(/^InvenTree.*$/);
 | 
			
		||||
  await page.waitForURL('**/platform/login');
 | 
			
		||||
  await page.getByLabel('username').fill(username);
 | 
			
		||||
@@ -31,7 +32,7 @@ export const doQuickLogin = async (
 | 
			
		||||
  password = password ?? user.password;
 | 
			
		||||
  url = url ?? baseUrl;
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${url}/login/?login=${username}&password=${password}`);
 | 
			
		||||
  await navigate(page, `${url}/login/?login=${username}&password=${password}`);
 | 
			
		||||
  await page.waitForURL('**/platform/home');
 | 
			
		||||
 | 
			
		||||
  await page.getByLabel('navigation-menu').waitFor();
 | 
			
		||||
@@ -43,6 +44,6 @@ export const doQuickLogin = async (
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const doLogout = async (page) => {
 | 
			
		||||
  await page.goto(`${baseUrl}/logout/`);
 | 
			
		||||
  await navigate(page, 'logout');
 | 
			
		||||
  await page.waitForURL('**/platform/login');
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
import { test } from '../baseFixtures.ts';
 | 
			
		||||
import { baseUrl } from '../defaults.ts';
 | 
			
		||||
import {
 | 
			
		||||
  clearTableFilters,
 | 
			
		||||
  getRowFromCell,
 | 
			
		||||
  navigate,
 | 
			
		||||
  setTableChoiceFilter
 | 
			
		||||
} from '../helpers.ts';
 | 
			
		||||
import { doQuickLogin } from '../login.ts';
 | 
			
		||||
@@ -10,7 +10,7 @@ import { doQuickLogin } from '../login.ts';
 | 
			
		||||
test('Build Order - Basic Tests', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/part/`);
 | 
			
		||||
  await navigate(page, 'part/');
 | 
			
		||||
 | 
			
		||||
  // Navigate to the correct build order
 | 
			
		||||
  await page.getByRole('tab', { name: 'Manufacturing', exact: true }).click();
 | 
			
		||||
@@ -90,7 +90,7 @@ test('Build Order - Basic Tests', async ({ page }) => {
 | 
			
		||||
test('Build Order - Edit', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/manufacturing/build-order/22/`);
 | 
			
		||||
  await navigate(page, 'manufacturing/build-order/22/');
 | 
			
		||||
 | 
			
		||||
  // Check for expected text items
 | 
			
		||||
  await page.getByText('Building for sales order').first().waitFor();
 | 
			
		||||
@@ -117,7 +117,7 @@ test('Build Order - Edit', async ({ page }) => {
 | 
			
		||||
test('Build Order - Build Outputs', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/manufacturing/index/`);
 | 
			
		||||
  await navigate(page, 'manufacturing/index/');
 | 
			
		||||
  await page.getByRole('tab', { name: 'Build Orders', exact: true }).click();
 | 
			
		||||
 | 
			
		||||
  // We have now loaded the "Build Order" table. Check for some expected texts
 | 
			
		||||
@@ -191,7 +191,7 @@ test('Build Order - Build Outputs', async ({ page }) => {
 | 
			
		||||
test('Build Order - Allocation', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/manufacturing/build-order/1/line-items`);
 | 
			
		||||
  await navigate(page, 'manufacturing/build-order/1/line-items');
 | 
			
		||||
 | 
			
		||||
  // Expand the R_10K_0805 line item
 | 
			
		||||
  await page.getByText('R_10K_0805_1%').first().click();
 | 
			
		||||
@@ -291,7 +291,7 @@ test('Build Order - Allocation', async ({ page }) => {
 | 
			
		||||
test('Build Order - Filters', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/manufacturing/index/buildorders`);
 | 
			
		||||
  await navigate(page, 'manufacturing/index/buildorders');
 | 
			
		||||
 | 
			
		||||
  await clearTableFilters(page);
 | 
			
		||||
  await page.getByText('1 - 24 / 24').waitFor();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
import { test } from '../baseFixtures';
 | 
			
		||||
import { baseUrl } from '../defaults';
 | 
			
		||||
import { clearTableFilters, getRowFromCell } from '../helpers';
 | 
			
		||||
import { clearTableFilters, getRowFromCell, navigate } from '../helpers';
 | 
			
		||||
import { doQuickLogin } from '../login';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -45,7 +44,7 @@ test('Parts - Tabs', async ({ page }) => {
 | 
			
		||||
  await page.getByRole('tab', { name: 'Used In' }).click();
 | 
			
		||||
  await page.getByRole('tab', { name: 'Pricing' }).click();
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/part/category/index/parts`);
 | 
			
		||||
  await navigate(page, 'part/category/index/parts');
 | 
			
		||||
  await page.getByText('Blue Chair').click();
 | 
			
		||||
  await page.getByRole('tab', { name: 'Bill of Materials' }).click();
 | 
			
		||||
  await page.getByRole('tab', { name: 'Build Orders' }).click();
 | 
			
		||||
@@ -54,7 +53,7 @@ test('Parts - Tabs', async ({ page }) => {
 | 
			
		||||
test('Parts - Manufacturer Parts', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/part/84/suppliers`);
 | 
			
		||||
  await navigate(page, 'part/84/suppliers');
 | 
			
		||||
 | 
			
		||||
  await page.getByRole('tab', { name: 'Suppliers' }).click();
 | 
			
		||||
  await page.getByText('Hammond Manufacturing').click();
 | 
			
		||||
@@ -67,7 +66,7 @@ test('Parts - Manufacturer Parts', async ({ page }) => {
 | 
			
		||||
test('Parts - Supplier Parts', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/part/15/suppliers`);
 | 
			
		||||
  await navigate(page, 'part/15/suppliers');
 | 
			
		||||
 | 
			
		||||
  await page.getByRole('tab', { name: 'Suppliers' }).click();
 | 
			
		||||
  await page.getByRole('cell', { name: 'DIG-84670-SJI' }).click();
 | 
			
		||||
@@ -81,14 +80,14 @@ test('Parts - Locking', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  // Navigate to a known assembly which is *not* locked
 | 
			
		||||
  await page.goto(`${baseUrl}/part/104/bom`);
 | 
			
		||||
  await navigate(page, 'part/104/bom');
 | 
			
		||||
  await page.getByRole('tab', { name: 'Bill of Materials' }).click();
 | 
			
		||||
  await page.getByLabel('action-button-add-bom-item').waitFor();
 | 
			
		||||
  await page.getByRole('tab', { name: 'Parameters' }).click();
 | 
			
		||||
  await page.getByLabel('action-button-add-parameter').waitFor();
 | 
			
		||||
 | 
			
		||||
  // Navigate to a known assembly which *is* locked
 | 
			
		||||
  await page.goto(`${baseUrl}/part/100/bom`);
 | 
			
		||||
  await navigate(page, 'part/100/bom');
 | 
			
		||||
  await page.getByRole('tab', { name: 'Bill of Materials' }).click();
 | 
			
		||||
  await page.getByLabel('part-lock-icon').waitFor();
 | 
			
		||||
  await page.getByText('Part is Locked', { exact: true }).waitFor();
 | 
			
		||||
@@ -107,7 +106,7 @@ test('Parts - Allocations', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  // Let's look at the allocations for a single stock item
 | 
			
		||||
  await page.goto(`${baseUrl}/stock/item/324/`);
 | 
			
		||||
  await navigate(page, 'stock/item/324/');
 | 
			
		||||
  await page.getByRole('tab', { name: 'Allocations' }).click();
 | 
			
		||||
 | 
			
		||||
  await page.getByRole('button', { name: 'Build Order Allocations' }).waitFor();
 | 
			
		||||
@@ -115,7 +114,7 @@ test('Parts - Allocations', async ({ page }) => {
 | 
			
		||||
  await page.getByRole('cell', { name: 'Making tables for SO 0003' }).waitFor();
 | 
			
		||||
 | 
			
		||||
  // Let's look at the allocations for an entire part
 | 
			
		||||
  await page.goto(`${baseUrl}/part/74/details`);
 | 
			
		||||
  await navigate(page, 'part/74/details');
 | 
			
		||||
 | 
			
		||||
  // Check that the overall allocations are displayed correctly
 | 
			
		||||
  await page.getByText('11 / 825').waitFor();
 | 
			
		||||
@@ -174,7 +173,7 @@ test('Parts - Pricing (Nothing, BOM)', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  // Part with no history
 | 
			
		||||
  await page.goto(`${baseUrl}/part/82/pricing`);
 | 
			
		||||
  await navigate(page, 'part/82/pricing');
 | 
			
		||||
 | 
			
		||||
  await page.getByText('Small plastic enclosure, black').waitFor();
 | 
			
		||||
  await page.getByRole('tab', { name: 'Part Pricing' }).click();
 | 
			
		||||
@@ -186,7 +185,7 @@ test('Parts - Pricing (Nothing, BOM)', async ({ page }) => {
 | 
			
		||||
  await page.getByRole('button', { name: 'Supplier Pricing' }).isDisabled();
 | 
			
		||||
 | 
			
		||||
  // Part with history
 | 
			
		||||
  await page.goto(`${baseUrl}/part/108/pricing`);
 | 
			
		||||
  await navigate(page, 'part/108/pricing');
 | 
			
		||||
  await page.getByText('A chair - with blue paint').waitFor();
 | 
			
		||||
  await page.getByRole('tab', { name: 'Part Pricing' }).click();
 | 
			
		||||
  await page.getByLabel('Part Pricing').getByText('Part Pricing').waitFor();
 | 
			
		||||
@@ -224,7 +223,7 @@ test('Parts - Pricing (Supplier)', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  // Part
 | 
			
		||||
  await page.goto(`${baseUrl}/part/55/pricing`);
 | 
			
		||||
  await navigate(page, 'part/55/pricing');
 | 
			
		||||
  await page.getByText('Ceramic capacitor, 100nF in').waitFor();
 | 
			
		||||
  await page.getByRole('tab', { name: 'Part Pricing' }).click();
 | 
			
		||||
  await page.getByLabel('Part Pricing').getByText('Part Pricing').waitFor();
 | 
			
		||||
@@ -250,7 +249,7 @@ test('Parts - Pricing (Variant)', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  // Part
 | 
			
		||||
  await page.goto(`${baseUrl}/part/106/pricing`);
 | 
			
		||||
  await navigate(page, 'part/106/pricing');
 | 
			
		||||
  await page.getByText('A chair - available in multiple colors').waitFor();
 | 
			
		||||
  await page.getByRole('tab', { name: 'Part Pricing' }).click();
 | 
			
		||||
  await page.getByLabel('Part Pricing').getByText('Part Pricing').waitFor();
 | 
			
		||||
@@ -276,7 +275,7 @@ test('Parts - Pricing (Internal)', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  // Part
 | 
			
		||||
  await page.goto(`${baseUrl}/part/65/pricing`);
 | 
			
		||||
  await navigate(page, 'part/65/pricing');
 | 
			
		||||
  await page.getByText('Socket head cap screw, M2').waitFor();
 | 
			
		||||
  await page.getByRole('tab', { name: 'Part Pricing' }).click();
 | 
			
		||||
  await page.getByLabel('Part Pricing').getByText('Part Pricing').waitFor();
 | 
			
		||||
@@ -301,7 +300,7 @@ test('Parts - Pricing (Purchase)', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  // Part
 | 
			
		||||
  await page.goto(`${baseUrl}/part/69/pricing`);
 | 
			
		||||
  await navigate(page, 'part/69/pricing');
 | 
			
		||||
  await page.getByText('1.25mm Pitch, PicoBlade PCB').waitFor();
 | 
			
		||||
  await page.getByRole('tab', { name: 'Part Pricing' }).click();
 | 
			
		||||
  await page.getByLabel('Part Pricing').getByText('Part Pricing').waitFor();
 | 
			
		||||
@@ -322,7 +321,7 @@ test('Parts - Pricing (Purchase)', async ({ page }) => {
 | 
			
		||||
test('Parts - Attachments', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/part/69/attachments`);
 | 
			
		||||
  await navigate(page, 'part/69/attachments');
 | 
			
		||||
 | 
			
		||||
  // Submit a new external link
 | 
			
		||||
  await page.getByLabel('action-button-add-external-').click();
 | 
			
		||||
@@ -344,7 +343,7 @@ test('Parts - Attachments', async ({ page }) => {
 | 
			
		||||
test('Parts - Parameters', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/part/69/parameters`);
 | 
			
		||||
  await navigate(page, 'part/69/parameters');
 | 
			
		||||
 | 
			
		||||
  // Create a new template
 | 
			
		||||
  await page.getByLabel('action-button-add-parameter').click();
 | 
			
		||||
@@ -371,7 +370,7 @@ test('Parts - Parameters', async ({ page }) => {
 | 
			
		||||
test('Parts - Notes', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/part/69/notes`);
 | 
			
		||||
  await navigate(page, 'part/69/notes');
 | 
			
		||||
 | 
			
		||||
  // Enable editing
 | 
			
		||||
  await page.getByLabel('Enable Editing').waitFor();
 | 
			
		||||
@@ -393,7 +392,7 @@ test('Parts - Notes', async ({ page }) => {
 | 
			
		||||
test('Parts - 404', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/part/99999/`);
 | 
			
		||||
  await navigate(page, 'part/99999/');
 | 
			
		||||
  await page.getByText('Page Not Found', { exact: true }).waitFor();
 | 
			
		||||
 | 
			
		||||
  // Clear out any console error messages
 | 
			
		||||
@@ -403,7 +402,7 @@ test('Parts - 404', async ({ page }) => {
 | 
			
		||||
test('Parts - Revision', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/part/906/details`);
 | 
			
		||||
  await navigate(page, 'part/906/details');
 | 
			
		||||
 | 
			
		||||
  await page.getByText('Revision of').waitFor();
 | 
			
		||||
  await page.getByText('Select Part Revision').waitFor();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
import { test } from '../baseFixtures.ts';
 | 
			
		||||
import { baseUrl } from '../defaults.ts';
 | 
			
		||||
import {
 | 
			
		||||
  clearTableFilters,
 | 
			
		||||
  clickButtonIfVisible,
 | 
			
		||||
  navigate,
 | 
			
		||||
  openFilterDrawer,
 | 
			
		||||
  setTableChoiceFilter
 | 
			
		||||
} from '../helpers.ts';
 | 
			
		||||
@@ -39,7 +39,7 @@ test('Purchase Orders - List', async ({ page }) => {
 | 
			
		||||
test('Purchase Orders - Barcodes', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/purchasing/purchase-order/13/detail`);
 | 
			
		||||
  await navigate(page, 'purchasing/purchase-order/13/detail');
 | 
			
		||||
  await page.getByRole('button', { name: 'Issue Order' }).waitFor();
 | 
			
		||||
 | 
			
		||||
  // Display QR code
 | 
			
		||||
@@ -211,7 +211,7 @@ test('Purchase Orders - Order Parts', async ({ page }) => {
 | 
			
		||||
  await page.getByRole('banner').getByRole('button').click();
 | 
			
		||||
 | 
			
		||||
  // Order from the part detail page
 | 
			
		||||
  await page.goto(`${baseUrl}/part/69/`);
 | 
			
		||||
  await navigate(page, 'part/69/');
 | 
			
		||||
  await page.waitForURL('**/part/69/**');
 | 
			
		||||
 | 
			
		||||
  await page.getByLabel('action-menu-stock-actions').click();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,15 @@
 | 
			
		||||
import { test } from '../baseFixtures.ts';
 | 
			
		||||
import { baseUrl } from '../defaults.ts';
 | 
			
		||||
import { clearTableFilters, setTableChoiceFilter } from '../helpers.ts';
 | 
			
		||||
import {
 | 
			
		||||
  clearTableFilters,
 | 
			
		||||
  navigate,
 | 
			
		||||
  setTableChoiceFilter
 | 
			
		||||
} from '../helpers.ts';
 | 
			
		||||
import { doQuickLogin } from '../login.ts';
 | 
			
		||||
 | 
			
		||||
test('Sales Orders - Tabs', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/sales/index/`);
 | 
			
		||||
  await navigate(page, 'sales/index/');
 | 
			
		||||
  await page.waitForURL('**/platform/sales/**');
 | 
			
		||||
 | 
			
		||||
  await page.getByRole('tab', { name: 'Sales Orders' }).click();
 | 
			
		||||
@@ -30,6 +33,9 @@ test('Sales Orders - Tabs', async ({ page }) => {
 | 
			
		||||
 | 
			
		||||
  // Sales Order Details
 | 
			
		||||
  await page.getByRole('tab', { name: 'Sales Orders' }).click();
 | 
			
		||||
 | 
			
		||||
  await clearTableFilters(page);
 | 
			
		||||
 | 
			
		||||
  await page.getByRole('cell', { name: 'SO0001' }).click();
 | 
			
		||||
  await page
 | 
			
		||||
    .getByLabel('Order Details')
 | 
			
		||||
@@ -57,7 +63,7 @@ test('Sales Orders - Tabs', async ({ page }) => {
 | 
			
		||||
test('Sales Orders - Basic Tests', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/home`);
 | 
			
		||||
  await navigate(page, 'home');
 | 
			
		||||
  await page.getByRole('tab', { name: 'Sales' }).click();
 | 
			
		||||
  await page.getByRole('tab', { name: 'Sales Orders' }).click();
 | 
			
		||||
 | 
			
		||||
@@ -100,12 +106,12 @@ test('Sales Orders - Basic Tests', async ({ page }) => {
 | 
			
		||||
test('Sales Orders - Shipments', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/home`);
 | 
			
		||||
  await navigate(page, 'home');
 | 
			
		||||
  await page.getByRole('tab', { name: 'Sales' }).click();
 | 
			
		||||
  await page.getByRole('tab', { name: 'Sales Orders' }).click();
 | 
			
		||||
 | 
			
		||||
  await clearTableFilters(page);
 | 
			
		||||
  // Click through to a particular sales order
 | 
			
		||||
  await page.getByRole('tab', { name: 'Sales Orders' }).waitFor();
 | 
			
		||||
  await page.getByRole('cell', { name: 'SO0006' }).first().click();
 | 
			
		||||
  await page.getByRole('tab', { name: 'Shipments' }).click();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
import { test } from '../baseFixtures';
 | 
			
		||||
import { baseUrl } from '../defaults';
 | 
			
		||||
import { navigate } from '../helpers';
 | 
			
		||||
import { doQuickLogin } from '../login';
 | 
			
		||||
 | 
			
		||||
const scan = async (page, barcode) => {
 | 
			
		||||
@@ -42,7 +42,7 @@ test('Scanning - Basic', async ({ page }) => {
 | 
			
		||||
 | 
			
		||||
test('Scanning - Part', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
  await page.goto(`${baseUrl}/scan/`);
 | 
			
		||||
  await navigate(page, 'scan/');
 | 
			
		||||
 | 
			
		||||
  await scan(page, '{"part": 1}');
 | 
			
		||||
 | 
			
		||||
@@ -53,7 +53,7 @@ test('Scanning - Part', async ({ page }) => {
 | 
			
		||||
 | 
			
		||||
test('Scanning - Stockitem', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
  await page.goto(`${baseUrl}/scan/`);
 | 
			
		||||
  await navigate(page, 'scan/');
 | 
			
		||||
  await scan(page, '{"stockitem": 408}');
 | 
			
		||||
 | 
			
		||||
  await page.getByText('1551ABK').waitFor();
 | 
			
		||||
@@ -63,7 +63,7 @@ test('Scanning - Stockitem', async ({ page }) => {
 | 
			
		||||
 | 
			
		||||
test('Scanning - StockLocation', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
  await page.goto(`${baseUrl}/scan/`);
 | 
			
		||||
  await navigate(page, 'scan/');
 | 
			
		||||
  await scan(page, '{"stocklocation": 3}');
 | 
			
		||||
 | 
			
		||||
  // stocklocation: 3
 | 
			
		||||
@@ -76,7 +76,7 @@ test('Scanning - StockLocation', async ({ page }) => {
 | 
			
		||||
 | 
			
		||||
test('Scanning - SupplierPart', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
  await page.goto(`${baseUrl}/scan/`);
 | 
			
		||||
  await navigate(page, 'scan/');
 | 
			
		||||
  await scan(page, '{"supplierpart": 204}');
 | 
			
		||||
 | 
			
		||||
  // supplierpart: 204
 | 
			
		||||
@@ -87,7 +87,7 @@ test('Scanning - SupplierPart', async ({ page }) => {
 | 
			
		||||
 | 
			
		||||
test('Scanning - PurchaseOrder', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
  await page.goto(`${baseUrl}/scan/`);
 | 
			
		||||
  await navigate(page, 'scan/');
 | 
			
		||||
  await scan(page, '{"purchaseorder": 12}');
 | 
			
		||||
 | 
			
		||||
  // purchaseorder: 12
 | 
			
		||||
@@ -100,7 +100,7 @@ test('Scanning - PurchaseOrder', async ({ page }) => {
 | 
			
		||||
 | 
			
		||||
test('Scanning - SalesOrder', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
  await page.goto(`${baseUrl}/scan/`);
 | 
			
		||||
  await navigate(page, 'scan/');
 | 
			
		||||
  await scan(page, '{"salesorder": 6}');
 | 
			
		||||
 | 
			
		||||
  // salesorder: 6
 | 
			
		||||
@@ -111,7 +111,7 @@ test('Scanning - SalesOrder', async ({ page }) => {
 | 
			
		||||
 | 
			
		||||
test('Scanning - Build', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
  await page.goto(`${baseUrl}/scan/`);
 | 
			
		||||
  await navigate(page, 'scan/');
 | 
			
		||||
  await scan(page, '{"build": 8}');
 | 
			
		||||
 | 
			
		||||
  // build: 8
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
import { test } from '../baseFixtures.js';
 | 
			
		||||
import { baseUrl } from '../defaults.js';
 | 
			
		||||
import {
 | 
			
		||||
  clearTableFilters,
 | 
			
		||||
  clickButtonIfVisible,
 | 
			
		||||
  navigate,
 | 
			
		||||
  openFilterDrawer,
 | 
			
		||||
  setTableChoiceFilter
 | 
			
		||||
} from '../helpers.js';
 | 
			
		||||
@@ -11,7 +11,7 @@ import { doQuickLogin } from '../login.js';
 | 
			
		||||
test('Stock - Basic Tests', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/stock/location/index/`);
 | 
			
		||||
  await navigate(page, 'stock/location/index/');
 | 
			
		||||
  await page.waitForURL('**/platform/stock/location/**');
 | 
			
		||||
 | 
			
		||||
  await page.getByRole('tab', { name: 'Location Details' }).click();
 | 
			
		||||
@@ -29,7 +29,7 @@ test('Stock - Basic Tests', async ({ page }) => {
 | 
			
		||||
  await page.getByRole('tab', { name: 'Stock Items' }).click();
 | 
			
		||||
  await page.getByRole('tab', { name: 'Location Details' }).click();
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/stock/item/1194/details`);
 | 
			
		||||
  await navigate(page, 'stock/item/1194/details');
 | 
			
		||||
  await page.getByText('D.123 | Doohickey').waitFor();
 | 
			
		||||
  await page.getByText('Batch Code: BX-123-2024-2-7').waitFor();
 | 
			
		||||
  await page.getByRole('tab', { name: 'Stock Tracking' }).click();
 | 
			
		||||
@@ -41,7 +41,7 @@ test('Stock - Basic Tests', async ({ page }) => {
 | 
			
		||||
test('Stock - Location Tree', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/stock/location/index/`);
 | 
			
		||||
  await navigate(page, 'stock/location/index/');
 | 
			
		||||
  await page.waitForURL('**/platform/stock/location/**');
 | 
			
		||||
  await page.getByRole('tab', { name: 'Location Details' }).click();
 | 
			
		||||
 | 
			
		||||
@@ -58,7 +58,7 @@ test('Stock - Location Tree', async ({ page }) => {
 | 
			
		||||
test('Stock - Filters', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page, 'steven', 'wizardstaff');
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/stock/location/index/`);
 | 
			
		||||
  await navigate(page, 'stock/location/index/');
 | 
			
		||||
  await page.getByRole('tab', { name: 'Stock Items' }).click();
 | 
			
		||||
 | 
			
		||||
  await openFilterDrawer(page);
 | 
			
		||||
@@ -169,7 +169,7 @@ test('Stock - Serial Numbers', async ({ page }) => {
 | 
			
		||||
test('Stock - Stock Actions', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/stock/item/1225/details`);
 | 
			
		||||
  await navigate(page, 'stock/item/1225/details');
 | 
			
		||||
 | 
			
		||||
  // Helper function to launch a stock action
 | 
			
		||||
  const launchStockAction = async (action: string) => {
 | 
			
		||||
@@ -223,7 +223,7 @@ test('Stock - Stock Actions', async ({ page }) => {
 | 
			
		||||
  await page.getByText('Incoming goods inspection').first().waitFor();
 | 
			
		||||
 | 
			
		||||
  // Find an item which has been sent to a customer
 | 
			
		||||
  await page.goto(`${baseUrl}/stock/item/1014/details`);
 | 
			
		||||
  await navigate(page, 'stock/item/1014/details');
 | 
			
		||||
  await page.getByText('Batch Code: 2022-11-12').waitFor();
 | 
			
		||||
  await page.getByText('Unavailable').waitFor();
 | 
			
		||||
  await page.getByLabel('action-menu-stock-operations').click();
 | 
			
		||||
@@ -234,7 +234,7 @@ test('Stock - Tracking', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  // Navigate to the "stock item" page
 | 
			
		||||
  await page.goto(`${baseUrl}/stock/item/176/details/`);
 | 
			
		||||
  await navigate(page, 'stock/item/176/details/');
 | 
			
		||||
  await page.getByRole('link', { name: 'Widget Assembly # 2' }).waitFor();
 | 
			
		||||
 | 
			
		||||
  // Navigate to the "stock tracking" tab
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,11 @@
 | 
			
		||||
/** Unit tests for form validation, rendering, etc */
 | 
			
		||||
import test from 'playwright/test';
 | 
			
		||||
 | 
			
		||||
import { baseUrl } from './defaults';
 | 
			
		||||
import { navigate } from './helpers';
 | 
			
		||||
import { doQuickLogin } from './login';
 | 
			
		||||
 | 
			
		||||
test('Forms - Stock Item Validation', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page, 'steven', 'wizardstaff');
 | 
			
		||||
  await page.goto(`${baseUrl}/stock/location/index/stock-items`);
 | 
			
		||||
  await navigate(page, 'stock/location/index/stock-items');
 | 
			
		||||
  await page.waitForURL('**/platform/stock/location/**');
 | 
			
		||||
 | 
			
		||||
  // Create new stock item form
 | 
			
		||||
@@ -77,7 +76,7 @@ test('Forms - Stock Item Validation', async ({ page }) => {
 | 
			
		||||
 | 
			
		||||
test('Forms - Supplier Validation', async ({ page, request }) => {
 | 
			
		||||
  await doQuickLogin(page, 'steven', 'wizardstaff');
 | 
			
		||||
  await page.goto(`${baseUrl}/purchasing/index/suppliers`);
 | 
			
		||||
  await navigate(page, 'purchasing/index/suppliers');
 | 
			
		||||
  await page.waitForURL('**/purchasing/index/**');
 | 
			
		||||
 | 
			
		||||
  await page.getByLabel('action-button-add-company').click();
 | 
			
		||||
@@ -113,7 +112,7 @@ test('Forms - Supplier Validation', async ({ page, request }) => {
 | 
			
		||||
    .waitFor();
 | 
			
		||||
 | 
			
		||||
  // Now, try to create another new supplier with the same name
 | 
			
		||||
  await page.goto(`${baseUrl}/purchasing/index/suppliers`);
 | 
			
		||||
  await navigate(page, 'purchasing/index/suppliers');
 | 
			
		||||
  await page.waitForURL('**/purchasing/index/**');
 | 
			
		||||
  await page.getByLabel('action-button-add-company').click();
 | 
			
		||||
  await page.getByLabel('text-field-name').fill(supplierName);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
import { test } from './baseFixtures.js';
 | 
			
		||||
import { baseUrl } from './defaults.js';
 | 
			
		||||
import { navigate } from './helpers.js';
 | 
			
		||||
import { doQuickLogin } from './login.js';
 | 
			
		||||
 | 
			
		||||
test('Company', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/company/1/details`);
 | 
			
		||||
  await navigate(page, 'company/1/details');
 | 
			
		||||
  await page.getByLabel('Details').getByText('DigiKey Electronics').waitFor();
 | 
			
		||||
  await page.getByRole('cell', { name: 'https://www.digikey.com/' }).waitFor();
 | 
			
		||||
  await page.getByRole('tab', { name: 'Supplied Parts' }).click();
 | 
			
		||||
@@ -44,7 +44,7 @@ test('Company', async ({ page }) => {
 | 
			
		||||
 */
 | 
			
		||||
test('Admin Button', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page, 'admin', 'inventree');
 | 
			
		||||
  await page.goto(`${baseUrl}/company/1/details`);
 | 
			
		||||
  await navigate(page, 'company/1/details');
 | 
			
		||||
 | 
			
		||||
  // Click on the admin button
 | 
			
		||||
  await page.getByLabel(/action-button-open-in-admin/).click();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
import { expect, test } from './baseFixtures.js';
 | 
			
		||||
import { baseUrl, logoutUrl, user } from './defaults.js';
 | 
			
		||||
import { logoutUrl, user } from './defaults.js';
 | 
			
		||||
import { navigate } from './helpers.js';
 | 
			
		||||
import { doLogin, doQuickLogin } from './login.js';
 | 
			
		||||
 | 
			
		||||
test('Login - Basic Test', async ({ page }) => {
 | 
			
		||||
@@ -25,13 +26,13 @@ test('Login - Quick Test', async ({ page }) => {
 | 
			
		||||
  await expect(page).toHaveTitle(/^InvenTree/);
 | 
			
		||||
 | 
			
		||||
  // Go to the dashboard
 | 
			
		||||
  await page.goto(baseUrl);
 | 
			
		||||
  await navigate(page, '');
 | 
			
		||||
  await page.waitForURL('**/platform');
 | 
			
		||||
 | 
			
		||||
  await page.getByText('InvenTree Demo Server - ').waitFor();
 | 
			
		||||
 | 
			
		||||
  // Logout (via URL)
 | 
			
		||||
  await page.goto(`${baseUrl}/logout/`);
 | 
			
		||||
  await navigate(page, 'logout');
 | 
			
		||||
  await page.waitForURL('**/platform/login');
 | 
			
		||||
  await page.getByLabel('username');
 | 
			
		||||
});
 | 
			
		||||
@@ -48,7 +49,7 @@ test('Login - Failures', async ({ page }) => {
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  // Navigate to the 'login' page
 | 
			
		||||
  await page.goto(logoutUrl);
 | 
			
		||||
  await navigate(page, logoutUrl);
 | 
			
		||||
  await expect(page).toHaveTitle(/^InvenTree.*$/);
 | 
			
		||||
  await page.waitForURL('**/platform/login');
 | 
			
		||||
 | 
			
		||||
@@ -81,7 +82,7 @@ test('Login - Change Password', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page, 'noaccess', 'youshallnotpass');
 | 
			
		||||
 | 
			
		||||
  // Navigate to the 'change password' page
 | 
			
		||||
  await page.goto(`${baseUrl}/settings/user/account`);
 | 
			
		||||
  await navigate(page, 'settings/user/account');
 | 
			
		||||
  await page.getByLabel('action-menu-user-actions').click();
 | 
			
		||||
  await page.getByLabel('action-menu-user-actions-change-password').click();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
import test from 'playwright/test';
 | 
			
		||||
 | 
			
		||||
import { baseUrl } from './defaults.js';
 | 
			
		||||
import { navigate } from './helpers.js';
 | 
			
		||||
import { doQuickLogin } from './login.js';
 | 
			
		||||
import { setPluginState, setSettingState } from './settings.js';
 | 
			
		||||
 | 
			
		||||
@@ -26,7 +26,7 @@ test('Plugins - Panels', async ({ page, request }) => {
 | 
			
		||||
  await page.waitForTimeout(500);
 | 
			
		||||
 | 
			
		||||
  // Navigate to the "part" page
 | 
			
		||||
  await page.goto(`${baseUrl}/part/69/`);
 | 
			
		||||
  await navigate(page, 'part/69/');
 | 
			
		||||
 | 
			
		||||
  // Ensure basic part tab is available
 | 
			
		||||
  await page.getByRole('tab', { name: 'Part Details' }).waitFor();
 | 
			
		||||
@@ -75,7 +75,7 @@ test('Plugins - Custom Admin', async ({ page, request }) => {
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  // Navigate to the "admin" page
 | 
			
		||||
  await page.goto(`${baseUrl}/settings/admin/plugin/`);
 | 
			
		||||
  await navigate(page, 'settings/admin/plugin/');
 | 
			
		||||
 | 
			
		||||
  // Open the plugin drawer, and ensure that the custom admin elements are visible
 | 
			
		||||
  await page.getByText('SampleUI').click();
 | 
			
		||||
@@ -108,7 +108,7 @@ test('Plugins - Locate Item', async ({ page, request }) => {
 | 
			
		||||
  await page.waitForTimeout(500);
 | 
			
		||||
 | 
			
		||||
  // Navigate to the "stock item" page
 | 
			
		||||
  await page.goto(`${baseUrl}/stock/item/287/`);
 | 
			
		||||
  await navigate(page, 'stock/item/287/');
 | 
			
		||||
 | 
			
		||||
  // "Locate" this item
 | 
			
		||||
  await page.getByLabel('action-button-locate-item').click();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
import { expect, test } from './baseFixtures.js';
 | 
			
		||||
import { baseUrl } from './defaults.js';
 | 
			
		||||
import { navigate } from './helpers.js';
 | 
			
		||||
import { doQuickLogin } from './login.js';
 | 
			
		||||
import { setPluginState } from './settings.js';
 | 
			
		||||
 | 
			
		||||
@@ -11,7 +11,7 @@ import { setPluginState } from './settings.js';
 | 
			
		||||
test('Label Printing', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/stock/location/index/`);
 | 
			
		||||
  await navigate(page, 'stock/location/index/');
 | 
			
		||||
  await page.waitForURL('**/platform/stock/location/**');
 | 
			
		||||
 | 
			
		||||
  await page.getByRole('tab', { name: 'Stock Items' }).click();
 | 
			
		||||
@@ -55,7 +55,7 @@ test('Label Printing', async ({ page }) => {
 | 
			
		||||
test('Report Printing', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/stock/location/index/`);
 | 
			
		||||
  await navigate(page, 'stock/location/index/');
 | 
			
		||||
  await page.waitForURL('**/platform/stock/location/**');
 | 
			
		||||
 | 
			
		||||
  // Navigate to a specific PurchaseOrder
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
import { expect, test } from './baseFixtures.js';
 | 
			
		||||
import { apiUrl, baseUrl } from './defaults.js';
 | 
			
		||||
import { apiUrl } from './defaults.js';
 | 
			
		||||
import { navigate } from './helpers.js';
 | 
			
		||||
import { doQuickLogin } from './login.js';
 | 
			
		||||
import { setSettingState } from './settings.js';
 | 
			
		||||
 | 
			
		||||
@@ -165,7 +166,7 @@ test('Settings - Admin - Unauthorized', async ({ page }) => {
 | 
			
		||||
  // Try to access "admin" page with a non-staff user
 | 
			
		||||
  await doQuickLogin(page, 'allaccess', 'nolimits');
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/settings/admin/`);
 | 
			
		||||
  await navigate(page, 'settings/admin/');
 | 
			
		||||
  await page.waitForURL('**/settings/admin/**');
 | 
			
		||||
 | 
			
		||||
  // Should get a permission denied message
 | 
			
		||||
@@ -175,14 +176,14 @@ test('Settings - Admin - Unauthorized', async ({ page }) => {
 | 
			
		||||
    .waitFor();
 | 
			
		||||
 | 
			
		||||
  // Try to access user settings page (should be accessible)
 | 
			
		||||
  await page.goto(`${baseUrl}/settings/user/`);
 | 
			
		||||
  await navigate(page, 'settings/user/');
 | 
			
		||||
  await page.waitForURL('**/settings/user/**');
 | 
			
		||||
 | 
			
		||||
  await page.getByRole('tab', { name: 'Display Options' }).click();
 | 
			
		||||
  await page.getByRole('tab', { name: 'Account' }).click();
 | 
			
		||||
 | 
			
		||||
  // Try to access global settings page
 | 
			
		||||
  await page.goto(`${baseUrl}/settings/system/`);
 | 
			
		||||
  await navigate(page, 'settings/system/');
 | 
			
		||||
  await page.waitForURL('**/settings/system/**');
 | 
			
		||||
 | 
			
		||||
  await page.getByText('Permission Denied').waitFor();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,16 @@
 | 
			
		||||
import { test } from './baseFixtures.js';
 | 
			
		||||
import { baseUrl } from './defaults.js';
 | 
			
		||||
import { clearTableFilters, setTableChoiceFilter } from './helpers.js';
 | 
			
		||||
import {
 | 
			
		||||
  clearTableFilters,
 | 
			
		||||
  navigate,
 | 
			
		||||
  setTableChoiceFilter
 | 
			
		||||
} from './helpers.js';
 | 
			
		||||
import { doQuickLogin } from './login.js';
 | 
			
		||||
 | 
			
		||||
test('Tables - Filters', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  // Head to the "build order list" page
 | 
			
		||||
  await page.goto(`${baseUrl}/manufacturing/index/`);
 | 
			
		||||
  await navigate(page, 'manufacturing/index/');
 | 
			
		||||
 | 
			
		||||
  await clearTableFilters(page);
 | 
			
		||||
 | 
			
		||||
@@ -18,14 +21,14 @@ test('Tables - Filters', async ({ page }) => {
 | 
			
		||||
  await clearTableFilters(page);
 | 
			
		||||
 | 
			
		||||
  // Head to the "part list" page
 | 
			
		||||
  await page.goto(`${baseUrl}/part/category/index/parts/`);
 | 
			
		||||
  await navigate(page, 'part/category/index/parts/');
 | 
			
		||||
 | 
			
		||||
  await setTableChoiceFilter(page, 'Assembly', 'Yes');
 | 
			
		||||
 | 
			
		||||
  await clearTableFilters(page);
 | 
			
		||||
 | 
			
		||||
  // Head to the "purchase order list" page
 | 
			
		||||
  await page.goto(`${baseUrl}/purchasing/index/purchaseorders/`);
 | 
			
		||||
  await navigate(page, 'purchasing/index/purchaseorders/');
 | 
			
		||||
 | 
			
		||||
  await clearTableFilters(page);
 | 
			
		||||
 | 
			
		||||
@@ -42,7 +45,7 @@ test('Tables - Columns', async ({ page }) => {
 | 
			
		||||
  await doQuickLogin(page);
 | 
			
		||||
 | 
			
		||||
  // Go to the "stock list" page
 | 
			
		||||
  await page.goto(`${baseUrl}/stock/location/index/stock-items`);
 | 
			
		||||
  await navigate(page, 'stock/location/index/stock-items');
 | 
			
		||||
 | 
			
		||||
  // Open column selector
 | 
			
		||||
  await page.getByLabel('table-select-columns').click();
 | 
			
		||||
@@ -52,7 +55,7 @@ test('Tables - Columns', async ({ page }) => {
 | 
			
		||||
  await page.getByRole('menuitem', { name: 'Stocktake' }).click();
 | 
			
		||||
  await page.keyboard.press('Escape');
 | 
			
		||||
 | 
			
		||||
  await page.goto(`${baseUrl}/sales/index/salesorders`);
 | 
			
		||||
  await navigate(page, '/sales/index/salesorders');
 | 
			
		||||
 | 
			
		||||
  // Open column selector
 | 
			
		||||
  await page.getByLabel('table-select-columns').click();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
import { test } from '../baseFixtures';
 | 
			
		||||
import { baseUrl } from '../defaults';
 | 
			
		||||
import { navigate } from '../helpers';
 | 
			
		||||
import { doQuickLogin } from '../login';
 | 
			
		||||
 | 
			
		||||
test('PUI - Admin - Parameter', async ({ page }) => {
 | 
			
		||||
@@ -75,7 +75,7 @@ test('PUI - Admin - Parameter', async ({ page }) => {
 | 
			
		||||
  await page.getByRole('cell', { name: 'my custom parameter' }).click();
 | 
			
		||||
 | 
			
		||||
  // Fill parameter
 | 
			
		||||
  await page.goto(`${baseUrl}/part/104/parameters/`);
 | 
			
		||||
  await navigate(page, 'part/104/parameters/');
 | 
			
		||||
  await page.getByLabel('Parameters').getByText('Parameters').waitFor();
 | 
			
		||||
  await page.waitForLoadState('networkidle');
 | 
			
		||||
  await page.getByLabel('action-button-add-parameter').waitFor();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user