|
| 1 | +import { screen, waitFor } from "@testing-library/react" |
| 2 | +import userEvent from "@testing-library/user-event" |
| 3 | +import * as API from "api/api" |
| 4 | +import { UpdateTemplateMeta } from "api/typesGenerated" |
| 5 | +import { Language as FooterFormLanguage } from "components/FormFooter/FormFooter" |
| 6 | +import { MockTemplate } from "../../testHelpers/entities" |
| 7 | +import { renderWithAuth } from "../../testHelpers/renderHelpers" |
| 8 | +import { Language as FormLanguage } from "./TemplateSettingsForm" |
| 9 | +import { TemplateSettingsPage } from "./TemplateSettingsPage" |
| 10 | +import { Language as ViewLanguage } from "./TemplateSettingsPageView" |
| 11 | + |
| 12 | +const renderTemplateSettingsPage = async () => { |
| 13 | + const renderResult = renderWithAuth(<TemplateSettingsPage />, { |
| 14 | + route: `/templates/${MockTemplate.name}/settings`, |
| 15 | + path: `/templates/:templateId/settings`, |
| 16 | + }) |
| 17 | + // Wait the form to be rendered |
| 18 | + await screen.findAllByLabelText(FormLanguage.nameLabel) |
| 19 | + return renderResult |
| 20 | +} |
| 21 | + |
| 22 | +const fillAndSubmitForm = async ({ |
| 23 | + name, |
| 24 | + description, |
| 25 | + max_ttl_ms, |
| 26 | +}: Omit<Required<UpdateTemplateMeta>, "min_autostart_interval_ms">) => { |
| 27 | + const nameField = await screen.findByLabelText(FormLanguage.nameLabel) |
| 28 | + await userEvent.clear(nameField) |
| 29 | + await userEvent.type(nameField, name) |
| 30 | + |
| 31 | + const descriptionField = await screen.findByLabelText(FormLanguage.descriptionLabel) |
| 32 | + await userEvent.clear(descriptionField) |
| 33 | + await userEvent.type(descriptionField, description) |
| 34 | + |
| 35 | + const maxTtlField = await screen.findByLabelText(FormLanguage.maxTtlLabel) |
| 36 | + await userEvent.clear(maxTtlField) |
| 37 | + await userEvent.type(maxTtlField, max_ttl_ms.toString()) |
| 38 | + |
| 39 | + const submitButton = await screen.findByText(FooterFormLanguage.defaultSubmitLabel) |
| 40 | + await userEvent.click(submitButton) |
| 41 | +} |
| 42 | + |
| 43 | +describe("TemplateSettingsPage", () => { |
| 44 | + it("renders", async () => { |
| 45 | + await renderTemplateSettingsPage() |
| 46 | + const element = await screen.findByText(ViewLanguage.title) |
| 47 | + expect(element).toBeDefined() |
| 48 | + }) |
| 49 | + |
| 50 | + it("succeeds", async () => { |
| 51 | + await renderTemplateSettingsPage() |
| 52 | + |
| 53 | + const newTemplateSettings = { |
| 54 | + name: "edited-template-name", |
| 55 | + description: "Edited description", |
| 56 | + max_ttl_ms: 4000, |
| 57 | + } |
| 58 | + jest.spyOn(API, "updateTemplateMeta").mockResolvedValueOnce({ |
| 59 | + ...MockTemplate, |
| 60 | + ...newTemplateSettings, |
| 61 | + }) |
| 62 | + await fillAndSubmitForm(newTemplateSettings) |
| 63 | + |
| 64 | + await waitFor(() => expect(API.updateTemplateMeta).toBeCalledTimes(1)) |
| 65 | + }) |
| 66 | +}) |
0 commit comments