fix(openapi):validate API spec imports (#8322)

* fix(openapi):validate API spec imports and resolve preview to error state instead of hanging

* fix(openapi):allows opening of malformed files with correct extension

* fix(openapi):reject non-OpenAPI content in spec preview before timeout

* test(openapi): add unit + e2e coverage for spec import validation

* refactor(openapi):centralise spec error messages and fix dialog restore

* fix:removed nested try catch

* test:added common locators

* refactor:removed repeated lines

* refactor:removed redundant file reads

---------

Co-authored-by: Adwait Aayush <adwaitaayush@Adwaits-MacBook-Air.local>
This commit is contained in:
adwait-bruno
2026-07-07 22:05:23 +05:30
committed by GitHub
parent 0bba66a590
commit ad14fdfba5
13 changed files with 375 additions and 48 deletions

View File

@@ -0,0 +1,30 @@
import { test, Page, ElectronApplication } from '../../../../playwright';
export const buildApiSpecPanelLocators = (page: Page) => ({
addMenuButton: () => page.getByTestId('api-specs-header-add-menu'),
openApiSpecMenuItem: () => page.getByTestId('api-specs-header-add-menu-open-api-spec'),
sidebarItem: (name: string) => page.locator('.api-spec-item').filter({ hasText: name })
});
export const openApiSpecFromDialog = async (
page: Page,
electronApp: ElectronApplication,
filePath: string
): Promise<void> => {
await test.step(`Open API spec from path: ${filePath}`, async () => {
await electronApp.evaluate(({ dialog }, filePath) => {
dialog.showOpenDialog = async () => ({ canceled: false, filePaths: [filePath] });
}, filePath);
const { addMenuButton, openApiSpecMenuItem } = buildApiSpecPanelLocators(page);
await addMenuButton().click();
await openApiSpecMenuItem().click();
});
};
export const openApiSpecSidebarItem = async (page: Page, name: string): Promise<void> => {
await test.step(`Open API spec sidebar item "${name}"`, async () => {
const { sidebarItem } = buildApiSpecPanelLocators(page);
await sidebarItem(name).click();
});
};