2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-06-16 20:15:44 +00:00

[CI] Playwright improvements (#9395)

* Allow port 4173 (vite preview)

* Change 'base' attr based on vite command

* Allow api_host to be specified separately

* Harden API host functionality

* Adjust server selections

* Cleanup vite.config.ts

* Adjust playwright configuration

- Allow to run in "production" mode
- Builds the code first
- Runs only the backend web server
- Not suitable for coverage

* Tweak github actions

* Tweak QC file

* Reduce number of steps

* Tweak CI file

* Fix typo

* Ensure translation before build

* Fix hard-coded test

* Test tweaks

* uncomment

* Revert some changes

* Run with gunicorn, single worker

* Reduce log output in DEBUG mode

* Update deps

* Add global-setup func

* Fix for .gitignore file

* Cached auth state

* Tweak login func

* Updated tests

* Enable parallel workers again

* Simplify config

* Try with a single worker again

* Single retry mode

* Run auth setup first

- Prevent issues with parallel test doing login

* Improve test setup process

* Tweaks

* Bump to 3 workers

* Tweak playwright settings

* Revert change

* Revert change
This commit is contained in:
Oliver
2025-03-30 14:12:48 +11:00
committed by GitHub
parent 858eb8f807
commit 7f5a447769
40 changed files with 794 additions and 575 deletions

View File

@ -6,12 +6,15 @@ import {
loadTab,
navigate
} from './helpers.js';
import { doQuickLogin } from './login.js';
import { doCachedLogin } from './login.js';
import { setPluginState, setSettingState } from './settings.js';
// Unit test for plugin settings
test('Plugins - Settings', async ({ page, request }) => {
await doQuickLogin(page, 'admin', 'inventree');
test('Plugins - Settings', async ({ browser, request }) => {
const page = await doCachedLogin(browser, {
username: 'admin',
password: 'inventree'
});
// Ensure that the SampleIntegration plugin is enabled
await setPluginState({
@ -57,11 +60,14 @@ test('Plugins - Settings', async ({ page, request }) => {
});
// Test base plugin functionality
test('Plugins - Functionality', async ({ page, request }) => {
await doQuickLogin(page, 'admin', 'inventree');
test('Plugins - Functionality', async ({ browser }) => {
// Navigate and select the plugin
await navigate(page, 'settings/admin/plugin/');
const page = await doCachedLogin(browser, {
username: 'admin',
password: 'inventree',
url: 'settings/admin/plugin/'
});
await clearTableFilters(page);
await page.getByPlaceholder('Search').fill('sample');
await page.waitForLoadState('networkidle');
@ -80,8 +86,11 @@ test('Plugins - Functionality', async ({ page, request }) => {
await page.getByText('The plugin was deactivated').waitFor();
});
test('Plugins - Panels', async ({ page, request }) => {
await doQuickLogin(page, 'admin', 'inventree');
test('Plugins - Panels', async ({ browser, request }) => {
const page = await doCachedLogin(browser, {
username: 'admin',
password: 'inventree'
});
// Ensure that UI plugins are enabled
await setSettingState({
@ -108,7 +117,7 @@ test('Plugins - Panels', async ({ page, request }) => {
await loadTab(page, 'Part Details');
// Allow time for the plugin panels to load (they are loaded asynchronously)
await page.waitForTimeout(1000);
await page.waitForLoadState('networkidle');
// Check out each of the plugin panels
await loadTab(page, 'Broken Panel');
@ -139,8 +148,11 @@ test('Plugins - Panels', async ({ page, request }) => {
/**
* Unit test for custom admin integration for plugins
*/
test('Plugins - Custom Admin', async ({ page, request }) => {
await doQuickLogin(page, 'admin', 'inventree');
test('Plugins - Custom Admin', async ({ browser, request }) => {
const page = await doCachedLogin(browser, {
username: 'admin',
password: 'inventree'
});
// Ensure that the SampleUI plugin is enabled
await setPluginState({
@ -170,8 +182,11 @@ test('Plugins - Custom Admin', async ({ page, request }) => {
await page.getByText('hello: world').waitFor();
});
test('Plugins - Locate Item', async ({ page, request }) => {
await doQuickLogin(page, 'admin', 'inventree');
test('Plugins - Locate Item', async ({ browser, request }) => {
const page = await doCachedLogin(browser, {
username: 'admin',
password: 'inventree'
});
// Ensure that the sample location plugin is enabled
await setPluginState({
@ -184,6 +199,7 @@ test('Plugins - Locate Item', async ({ page, request }) => {
// Navigate to the "stock item" page
await navigate(page, 'stock/item/287/');
await page.waitForLoadState('networkidle');
// "Locate" this item
await page.getByLabel('action-button-locate-item').click();