mirror of
https://github.com/inventree/InvenTree.git
synced 2026-07-05 06:32:55 +00:00
Report Generation Updates (#12187)
* Fix for TemplateEditor - Allow dragging of split section * Cleaner report template code * Pass correct error message through * Prevent multiple retries if running in worker thread * Handle report merge error * Add playwright tests for broken report printing * Reduce scope for exception messages * Reduce comment deltas * Adjust unit test * Raise ValidaitonError * Handle message parsing * Additional comment * Fix unit tests
This commit is contained in:
@@ -68,9 +68,13 @@ export const PdfPreviewComponent: PreviewAreaComponent = forwardRef(
|
||||
api
|
||||
.get(apiUrl(ApiEndpoints.data_output, preview.data.pk))
|
||||
.then((response) => {
|
||||
if (response.data.error) {
|
||||
if (response.data.errors || response.data.error) {
|
||||
clearInterval(interval);
|
||||
rej(response.data.error);
|
||||
rej(
|
||||
response.data.error ??
|
||||
response.data.errors?.error ??
|
||||
t`Process failed`
|
||||
);
|
||||
}
|
||||
|
||||
if (response.data.complete) {
|
||||
|
||||
@@ -223,7 +223,7 @@ export function TemplateEditor(props: Readonly<TemplateEditorProps>) {
|
||||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
const msg = error?.message;
|
||||
const msg = error?.message || error?.toString();
|
||||
|
||||
if (msg) {
|
||||
if (Array.isArray(msg)) {
|
||||
@@ -272,7 +272,7 @@ export function TemplateEditor(props: Readonly<TemplateEditorProps>) {
|
||||
return (
|
||||
<Boundary label='TemplateEditor'>
|
||||
<Stack style={{ height: '100%', flex: '1' }}>
|
||||
<Split style={{ gap: '10px' }}>
|
||||
<Split visible style={{ flex: 1 }}>
|
||||
<Tabs
|
||||
value={editorValue}
|
||||
onChange={async (v) => {
|
||||
@@ -282,7 +282,7 @@ export function TemplateEditor(props: Readonly<TemplateEditorProps>) {
|
||||
keepMounted={false}
|
||||
style={{
|
||||
minWidth: '300px',
|
||||
flex: '1',
|
||||
width: '50%',
|
||||
display: 'flex',
|
||||
flexDirection: 'column'
|
||||
}}
|
||||
@@ -348,6 +348,7 @@ export function TemplateEditor(props: Readonly<TemplateEditorProps>) {
|
||||
keepMounted={false}
|
||||
style={{
|
||||
minWidth: '200px',
|
||||
width: '50%',
|
||||
display: 'flex',
|
||||
flexDirection: 'column'
|
||||
}}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import type { Locator } from '@playwright/test';
|
||||
import { expect, test } from './baseFixtures.js';
|
||||
import { adminuser } from './defaults.js';
|
||||
import { activateTableView, loadTab } from './helpers.js';
|
||||
import { activateTableView, loadTab, navigate } from './helpers.js';
|
||||
import { doCachedLogin } from './login.js';
|
||||
import { setPluginState } from './settings.js';
|
||||
|
||||
@@ -207,3 +207,54 @@ test('Printing - Report Editing', async ({ browser }) => {
|
||||
state: false
|
||||
});
|
||||
});
|
||||
|
||||
// Test report printing with an intentionally broken template, to verify that errors are handled gracefully
|
||||
test('Printing - Broken Template', async ({ browser }) => {
|
||||
const page = await doCachedLogin(browser, {
|
||||
user: adminuser,
|
||||
url: 'sales/sales-order/14/detail'
|
||||
});
|
||||
|
||||
// Print report from the "sales order" detail page
|
||||
await page
|
||||
.getByRole('button', { name: 'action-menu-printing-actions' })
|
||||
.click();
|
||||
await page
|
||||
.getByRole('menuitem', {
|
||||
name: 'action-menu-printing-actions-print-reports'
|
||||
})
|
||||
.click();
|
||||
await page
|
||||
.getByRole('combobox', { name: 'related-field-template' })
|
||||
.fill('broken');
|
||||
await page.getByText('Broken Sales Order Report').click();
|
||||
await page.getByRole('button', { name: 'Print', exact: true }).click();
|
||||
|
||||
// Expected error message
|
||||
await page
|
||||
.getByText('parameter tag requires a valid Model instance')
|
||||
.waitFor();
|
||||
|
||||
// Next, check error message from the template editor preview
|
||||
await navigate(page, 'settings/admin/reports');
|
||||
await page
|
||||
.getByRole('textbox', { name: 'table-search-input' })
|
||||
.fill('broken');
|
||||
await page.getByRole('cell', { name: 'Broken Sales Order Report' }).click();
|
||||
|
||||
await page.getByLabel('split-button-preview-options-action').click();
|
||||
|
||||
await page
|
||||
.getByLabel('split-button-preview-options-item-preview-save', {
|
||||
exact: true
|
||||
})
|
||||
.click();
|
||||
|
||||
await page.getByRole('button', { name: 'Save & Reload' }).click();
|
||||
|
||||
// Expected error messages
|
||||
await page.getByText('Error rendering template').waitFor();
|
||||
await page
|
||||
.getByText('parameter tag requires a valid Model instance')
|
||||
.waitFor();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user