FN-5727: speed up PrCreateModal test setup waits
Reduce repeated async waits in PrCreateModal tests by centralizing initial-load synchronization. - add a renderModalLoaded helper that waits for the AI title field once per test setup - replace repeated findByDisplayValue calls with the shared helper in slow-path tests - switch one post-load lookup from async findBy* to sync getBy* where loading is already guaranteed Files changed: .../components/__tests__/PrCreateModal.test.tsx | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) Fusion-Task-Id: FN-5727 Fusion-Task-Lineage: bf064b14-d625-4396-91e7-02d9eb48b9eb
This commit is contained in:
@@ -54,6 +54,12 @@ function renderModal(overrides?: Partial<ComponentProps<typeof PrCreateModal>>)
|
||||
return { onClose, onCreated, addToast };
|
||||
}
|
||||
|
||||
async function renderModalLoaded(overrides?: Partial<ComponentProps<typeof PrCreateModal>>) {
|
||||
const handles = renderModal(overrides);
|
||||
await screen.findByDisplayValue("AI title");
|
||||
return handles;
|
||||
}
|
||||
|
||||
describe("PrCreateModal", () => {
|
||||
let styleEl: HTMLStyleElement;
|
||||
|
||||
@@ -110,8 +116,8 @@ describe("PrCreateModal", () => {
|
||||
|
||||
it("regenerates and reverts AI content", async () => {
|
||||
mocks.generatePrMetadata.mockResolvedValueOnce(metadata).mockResolvedValueOnce({ title: "New title", body: "New body", templateUsed: false });
|
||||
renderModal();
|
||||
const titleInput = await screen.findByDisplayValue("AI title");
|
||||
await renderModalLoaded();
|
||||
const titleInput = screen.getByDisplayValue("AI title");
|
||||
fireEvent.change(titleInput, { target: { value: "custom" } });
|
||||
expect(screen.getByRole("button", { name: /revert to ai version/i })).toBeInTheDocument();
|
||||
fireEvent.click(screen.getAllByRole("button", { name: /^regenerate$/i })[0]);
|
||||
@@ -131,8 +137,7 @@ describe("PrCreateModal", () => {
|
||||
});
|
||||
|
||||
it("adds and removes chips and submits payload", async () => {
|
||||
const { onCreated, addToast, onClose } = renderModal();
|
||||
await screen.findByDisplayValue("AI title");
|
||||
const { onCreated, addToast, onClose } = await renderModalLoaded();
|
||||
|
||||
fireEvent.change(screen.getByLabelText(/base branch/i), { target: { value: "develop" } });
|
||||
fireEvent.click(screen.getByLabelText(/create as draft/i));
|
||||
@@ -166,8 +171,7 @@ describe("PrCreateModal", () => {
|
||||
|
||||
it("shows submit error and retries with same payload", async () => {
|
||||
mocks.createPr.mockRejectedValueOnce(new Error("bad")).mockResolvedValueOnce({ number: 22, title: "ok", url: "u", status: "open", headBranch: "h", baseBranch: "main", commentCount: 0 } as PrInfo);
|
||||
renderModal();
|
||||
await screen.findByDisplayValue("AI title");
|
||||
await renderModalLoaded();
|
||||
|
||||
fireEvent.click(screen.getByRole("button", { name: "Create PR" }));
|
||||
expect(await screen.findByText("bad")).toBeInTheDocument();
|
||||
@@ -189,15 +193,13 @@ describe("PrCreateModal", () => {
|
||||
},
|
||||
});
|
||||
mocks.createPr.mockRejectedValueOnce(err);
|
||||
renderModal();
|
||||
await screen.findByDisplayValue("AI title");
|
||||
await renderModalLoaded();
|
||||
fireEvent.click(screen.getByRole("button", { name: "Create PR" }));
|
||||
expect((await screen.findAllByText(/gh auth login/i)).length).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
it("closes on escape", async () => {
|
||||
const { onClose } = renderModal();
|
||||
await screen.findByDisplayValue("AI title");
|
||||
const { onClose } = await renderModalLoaded();
|
||||
fireEvent.keyDown(document, { key: "Escape" });
|
||||
expect(onClose).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user