mirror of
https://github.com/inventree/InvenTree.git
synced 2025-06-17 20:45:44 +00:00
[PUI] Quick commands pallet (#6987)
* add spotlight * [PUI] Quick commands pallet Fixes #5888 * add testing for new commands * add text input testing * only test backend if code changed * add trans files * fix testing text * always push coverage * add nav state to manage navigation state * add navigation action and test * make test faster * fix typo * use texts instead * fix tests for linux * use var to determine action key * Revert "use texts instead" This reverts commit7771189556
. * add wait for input * split out keyboard based tests * split ou test * add upload * revert assert change * adjust reporting settings * ignore error code * fix reporter config * add full info suit (+tests) * make tests more accurate * license modal fixes * unify icons * add custom actions registering with removal on page refresh * only upload report data if the tests failed * Revert "add trans files" This reverts commit28d96e058f
. * adjust url that iw waited for * try an await and body locator for keypresses * test registering addition actions * extend testing for actions * add doclink and test * merge tests
This commit is contained in:
@ -1,11 +1,22 @@
|
||||
import { test as baseTest } from '@playwright/test';
|
||||
import * as crypto from 'crypto';
|
||||
import * as fs from 'fs';
|
||||
import os from 'os';
|
||||
import * as path from 'path';
|
||||
|
||||
const istanbulCLIOutput = path.join(process.cwd(), '.nyc_output');
|
||||
export const classicUrl = 'http://127.0.0.1:8000';
|
||||
|
||||
let platform = os.platform();
|
||||
let systemKeyVar;
|
||||
if (platform === 'darwin') {
|
||||
systemKeyVar = 'Meta';
|
||||
} else {
|
||||
systemKeyVar = 'Control';
|
||||
}
|
||||
/* metaKey is the local action key (used for spotlight for example) */
|
||||
export const systemKey = systemKeyVar;
|
||||
|
||||
export function generateUUID(): string {
|
||||
return crypto.randomBytes(16).toString('hex');
|
||||
}
|
||||
|
147
src/frontend/tests/pui_command.spec.ts
Normal file
147
src/frontend/tests/pui_command.spec.ts
Normal file
@ -0,0 +1,147 @@
|
||||
import { expect, systemKey, test } from './baseFixtures.js';
|
||||
|
||||
test('PUI - Quick Command', async ({ page }) => {
|
||||
await page.goto('./platform/');
|
||||
await expect(page).toHaveTitle('InvenTree');
|
||||
await page.waitForURL('**/platform/');
|
||||
await page.getByLabel('username').fill('allaccess');
|
||||
await page.getByLabel('password').fill('nolimits');
|
||||
await page.getByRole('button', { name: 'Log in' }).click();
|
||||
await page.waitForURL('**/platform');
|
||||
await page.goto('./platform/');
|
||||
|
||||
await expect(page).toHaveTitle('InvenTree');
|
||||
await page.waitForURL('**/platform/');
|
||||
await page
|
||||
.getByRole('heading', { name: 'Welcome to your Dashboard,' })
|
||||
.click();
|
||||
await page.waitForTimeout(500);
|
||||
|
||||
// Open Spotlight with Keyboard Shortcut
|
||||
await page.locator('body').press(`${systemKey}+k`);
|
||||
await page.waitForTimeout(200);
|
||||
await page
|
||||
.getByRole('button', { name: 'Dashboard Go to the InvenTree dashboard' })
|
||||
.click();
|
||||
await page
|
||||
.locator('div')
|
||||
.filter({ hasText: /^Dashboard$/ })
|
||||
.click();
|
||||
await page.waitForURL('**/platform/dashboard');
|
||||
|
||||
// Open Spotlight with Button
|
||||
await page.getByRole('button', { name: 'Open spotlight' }).click();
|
||||
await page.getByRole('button', { name: 'Home Go to the home page' }).click();
|
||||
await page
|
||||
.getByRole('heading', { name: 'Welcome to your Dashboard,' })
|
||||
.click();
|
||||
await page.waitForURL('**/platform');
|
||||
|
||||
// Open Spotlight with Keyboard Shortcut and Search
|
||||
await page.locator('body').press(`${systemKey}+k`);
|
||||
await page.waitForTimeout(200);
|
||||
await page.getByPlaceholder('Search...').fill('Dashboard');
|
||||
await page.getByPlaceholder('Search...').press('Tab');
|
||||
await page.getByPlaceholder('Search...').press('Enter');
|
||||
await page.waitForURL('**/platform/dashboard');
|
||||
});
|
||||
|
||||
test('PUI - Quick Command - no keys', async ({ page }) => {
|
||||
await page.goto('./platform/');
|
||||
await expect(page).toHaveTitle('InvenTree');
|
||||
await page.waitForURL('**/platform/');
|
||||
await page.getByLabel('username').fill('allaccess');
|
||||
await page.getByLabel('password').fill('nolimits');
|
||||
await page.getByRole('button', { name: 'Log in' }).click();
|
||||
await page.waitForURL('**/platform');
|
||||
|
||||
await expect(page).toHaveTitle('InvenTree');
|
||||
await page.waitForURL('**/platform');
|
||||
// wait for the page to load - 0.5s
|
||||
await page.waitForTimeout(500);
|
||||
|
||||
// Open Spotlight with Button
|
||||
await page.getByRole('button', { name: 'Open spotlight' }).click();
|
||||
await page.getByRole('button', { name: 'Home Go to the home page' }).click();
|
||||
await page
|
||||
.getByRole('heading', { name: 'Welcome to your Dashboard,' })
|
||||
.click();
|
||||
await page.waitForURL('**/platform');
|
||||
|
||||
// Use navigation menu
|
||||
await page.getByRole('button', { name: 'Open spotlight' }).click();
|
||||
await page
|
||||
.getByRole('button', { name: 'Open Navigation Open the main' })
|
||||
.click();
|
||||
// assert the nav headers are visible
|
||||
await page.getByRole('heading', { name: 'Navigation' }).waitFor();
|
||||
await page.getByRole('heading', { name: 'Pages' }).waitFor();
|
||||
await page.getByRole('heading', { name: 'Documentation' }).waitFor();
|
||||
await page.getByRole('heading', { name: 'About' }).waitFor();
|
||||
|
||||
await page.keyboard.press('Escape');
|
||||
|
||||
// use server info
|
||||
await page.getByRole('button', { name: 'Open spotlight' }).click();
|
||||
await page
|
||||
.getByRole('button', {
|
||||
name: 'Server Information About this Inventree instance'
|
||||
})
|
||||
.click();
|
||||
await page.getByRole('cell', { name: 'Instance Name' }).waitFor();
|
||||
await page.getByRole('button', { name: 'Dismiss' }).click();
|
||||
|
||||
await page.waitForURL('**/platform');
|
||||
|
||||
// use license info
|
||||
await page.getByRole('button', { name: 'Open spotlight' }).click();
|
||||
await page
|
||||
.getByRole('button', {
|
||||
name: 'License Information Licenses for dependencies of the service'
|
||||
})
|
||||
.click();
|
||||
await page.getByText('License Information').first().waitFor();
|
||||
await page.getByRole('tab', { name: 'backend Packages' }).waitFor();
|
||||
|
||||
await page.getByLabel('License Information').getByRole('button').click();
|
||||
|
||||
// use about
|
||||
await page.getByRole('button', { name: 'Open spotlight' }).click();
|
||||
await page
|
||||
.getByRole('button', { name: 'About InvenTree About the InvenTree org' })
|
||||
.click();
|
||||
await page.getByText('This information is only').waitFor();
|
||||
|
||||
await page.getByLabel('About InvenTree').getByRole('button').click();
|
||||
|
||||
// use documentation
|
||||
await page.getByRole('button', { name: 'Open spotlight' }).click();
|
||||
await page
|
||||
.getByRole('button', {
|
||||
name: 'Documentation Visit the documentation to learn more about InvenTree'
|
||||
})
|
||||
.click();
|
||||
await page.waitForURL('https://docs.inventree.org/**');
|
||||
|
||||
// Test addition of new actions
|
||||
await page.goto('./platform/playground');
|
||||
await page
|
||||
.locator('div')
|
||||
.filter({ hasText: /^Playground$/ })
|
||||
.waitFor();
|
||||
await page.getByRole('button', { name: 'Spotlight actions' }).click();
|
||||
await page.getByRole('button', { name: 'Register extra actions' }).click();
|
||||
await page.getByPlaceholder('Search...').fill('secret');
|
||||
await page.getByRole('button', { name: 'Secret action It was' }).click();
|
||||
await page.getByRole('button', { name: 'Open spotlight' }).click();
|
||||
await page.getByPlaceholder('Search...').fill('Another secret action');
|
||||
await page
|
||||
.getByRole('button', {
|
||||
name: 'Another secret action You can register multiple actions with just one command'
|
||||
})
|
||||
.click();
|
||||
await page.getByRole('tab', { name: 'Home' }).click();
|
||||
await page.getByRole('button', { name: 'Open spotlight' }).click();
|
||||
await page.getByPlaceholder('Search...').fill('secret');
|
||||
await page.getByText('Nothing found...').click();
|
||||
});
|
Reference in New Issue
Block a user