mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 13:15:43 +00:00 
			
		
		
		
	UI plugins custom features (#8137)
* initial implementation to let plugins provide custom ui features
* provide exportable types
* refactor ref into renderContext to make it more generic and support template preview area ui plugins
* rename 'renderContext' -> 'featureContext' as not all features may render something
* allow to specify the function name via the source file string divided by a colon
* Bump api version
* add tests
* add docs
* add docs
* debug: workflow
* debug: workflow
* fix tests
* fix tests hopefully
* apply suggestions from codereview
* trigger: ci
* Prove that coverage does not work
* Revert "Prove that coverage does not work"
This reverts commit 920c58ea6f.
* potentially fix test???
			
			
This commit is contained in:
		| @@ -1,6 +1,7 @@ | ||||
| import { test } from './baseFixtures.js'; | ||||
| import { expect, test } from './baseFixtures.js'; | ||||
| import { baseUrl } from './defaults.js'; | ||||
| import { doQuickLogin } from './login.js'; | ||||
| import { setPluginState } from './settings.js'; | ||||
|  | ||||
| /* | ||||
|  * Test for label printing. | ||||
| @@ -81,8 +82,16 @@ test('PUI - Report Printing', async ({ page }) => { | ||||
|   await page.context().close(); | ||||
| }); | ||||
|  | ||||
| test('PUI - Report Editing', async ({ page }) => { | ||||
|   await doQuickLogin(page, 'admin', 'inventree'); | ||||
| test('PUI - Report Editing', async ({ page, request }) => { | ||||
|   const [username, password] = ['admin', 'inventree']; | ||||
|   await doQuickLogin(page, username, password); | ||||
|  | ||||
|   // activate the sample plugin for this test | ||||
|   await setPluginState({ | ||||
|     request, | ||||
|     plugin: 'sampleui', | ||||
|     state: true | ||||
|   }); | ||||
|  | ||||
|   // Navigate to the admin center | ||||
|   await page.getByRole('button', { name: 'admin' }).click(); | ||||
| @@ -104,5 +113,38 @@ test('PUI - Report Editing', async ({ page }) => { | ||||
|  | ||||
|   await page.getByText('The preview has been updated').waitFor(); | ||||
|  | ||||
|   await page.context().close(); | ||||
|   // Test plugin provided editors | ||||
|   await page.getByRole('tab', { name: 'Sample Template Editor' }).click(); | ||||
|   const textarea = page.locator('#sample-template-editor-textarea'); | ||||
|   const textareaValue = await textarea.inputValue(); | ||||
|   expect(textareaValue).toContain( | ||||
|     `<img class='qr' alt="{% trans 'QR Code' %}" src='{% qrcode qr_data %}'>` | ||||
|   ); | ||||
|   textarea.fill(textareaValue + '\nHello world'); | ||||
|  | ||||
|   // Switch back and forth to see if the changed contents get correctly passed between the hooks | ||||
|   await page.getByRole('tab', { name: 'Code', exact: true }).click(); | ||||
|   await page.getByRole('tab', { name: 'Sample Template Editor' }).click(); | ||||
|   const newTextareaValue = await page | ||||
|     .locator('#sample-template-editor-textarea') | ||||
|     .inputValue(); | ||||
|   expect(newTextareaValue).toMatch(/\nHello world$/); | ||||
|  | ||||
|   // Test plugin provided previews | ||||
|   await page.getByRole('tab', { name: 'Sample Template Preview' }).click(); | ||||
|   await page.getByRole('heading', { name: 'Hello world' }).waitFor(); | ||||
|   const consoleLogPromise = page.waitForEvent('console'); | ||||
|   await page | ||||
|     .getByLabel('split-button-preview-options', { exact: true }) | ||||
|     .click(); | ||||
|   const msg = (await consoleLogPromise).args(); | ||||
|   expect(await msg[0].jsonValue()).toBe('updatePreview'); | ||||
|   expect((await msg[1].jsonValue())[0]).toBe(newTextareaValue); | ||||
|  | ||||
|   // deactivate the sample plugin again after the test | ||||
|   await setPluginState({ | ||||
|     request, | ||||
|     plugin: 'sampleui', | ||||
|     state: false | ||||
|   }); | ||||
| }); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user