From 043e0d78365e4245d2303a9d06f16cc0872b1445 Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Wed, 20 Mar 2024 13:17:37 +0000 Subject: [PATCH 1/2] chore(site): add tests for deprecate template flow --- .../TemplateSettingsForm.tsx | 21 ++---- .../TemplateSettingsPage.test.tsx | 71 ++++++++++++++++++- 2 files changed, 73 insertions(+), 19 deletions(-) diff --git a/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsForm.tsx b/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsForm.tsx index 8fec6f6b1a808..3af9f674efe20 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsForm.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsForm.tsx @@ -236,24 +236,11 @@ export const TemplateSettingsForm: FC = ({ description="Deprecating a template prevents any new workspaces from being created. Existing workspaces will continue to function." > - - - Deprecation Message - - - Leave the message empty to keep the template active. Any message - provided will mark the template as deprecated. Use this message to - inform users of the deprecation and how to migrate to a new - template. - - { renderWithTemplateSettingsLayout(, { route: `/templates/${MockTemplate.name}/settings`, path: `/templates/:template/settings`, + extraRoutes: [ + { path: "/templates/:template", element:
Template
}, + ], }); await waitForLoaderToBeRemoved(); }; @@ -126,4 +131,66 @@ describe("TemplateSettingsPage", () => { const validate = () => getValidationSchema().validateSync(values); expect(validate).toThrowError(); }); + + describe("Deprecate template", () => { + it("deprecates a template when has access control", async () => { + server.use( + http.get("/api/v2/entitlements", () => { + return HttpResponse.json({ + ...MockEntitlements, + features: API.withDefaultFeatures({ + access_control: { enabled: true, entitlement: "entitled" }, + }), + }); + }), + ); + const updateTemplateMetaSpy = jest.spyOn(API, "updateTemplateMeta"); + const deprecationMessage = "This template is deprecated"; + + await renderTemplateSettingsPage(); + await deprecateTemplate(MockTemplate, deprecationMessage); + + const [templateId, data] = updateTemplateMetaSpy.mock.calls[0]; + await waitFor(() => expect(templateId).toEqual(MockTemplate.id)); + expect(data).toEqual( + expect.objectContaining({ deprecation_message: deprecationMessage }), + ); + }); + + it("does not deprecate a template when does not have access control", async () => { + server.use( + http.get("/api/v2/entitlements", () => { + return HttpResponse.json({ + ...MockEntitlements, + features: API.withDefaultFeatures({ + access_control: { enabled: false, entitlement: "not_entitled" }, + }), + }); + }), + ); + const updateTemplateMetaSpy = jest.spyOn(API, "updateTemplateMeta"); + + await renderTemplateSettingsPage(); + await deprecateTemplate( + MockTemplate, + "This template should not be able to deprecate", + ); + + const [templateId, data] = updateTemplateMetaSpy.mock.calls[0]; + await waitFor(() => expect(templateId).toEqual(MockTemplate.id)); + expect(data).toEqual( + expect.objectContaining({ deprecation_message: "" }), + ); + }); + }); }); + +async function deprecateTemplate(template: Template, message: string) { + const deprecationField = screen.getByLabelText("Deprecation Message"); + await userEvent.type(deprecationField, message); + + const submitButton = await screen.findByText( + FooterFormLanguage.defaultSubmitLabel, + ); + await userEvent.click(submitButton); +} From bf2f50becffbf4fc531bf4716e7d069e0222c207 Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Thu, 21 Mar 2024 13:29:26 +0000 Subject: [PATCH 2/2] Remove unused waitFor --- .../TemplateSettingsPage.test.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPage.test.tsx b/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPage.test.tsx index 111c01d0757ac..352898b534d70 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPage.test.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPage.test.tsx @@ -151,7 +151,8 @@ describe("TemplateSettingsPage", () => { await deprecateTemplate(MockTemplate, deprecationMessage); const [templateId, data] = updateTemplateMetaSpy.mock.calls[0]; - await waitFor(() => expect(templateId).toEqual(MockTemplate.id)); + + expect(templateId).toEqual(MockTemplate.id); expect(data).toEqual( expect.objectContaining({ deprecation_message: deprecationMessage }), ); @@ -177,7 +178,8 @@ describe("TemplateSettingsPage", () => { ); const [templateId, data] = updateTemplateMetaSpy.mock.calls[0]; - await waitFor(() => expect(templateId).toEqual(MockTemplate.id)); + + expect(templateId).toEqual(MockTemplate.id); expect(data).toEqual( expect.objectContaining({ deprecation_message: "" }), );