Advertisement
djbob2000

Untitled

Jun 6th, 2025 (edited)
1,181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import test, { expect } from "playwright/test";
  2. import { UiTester } from "@/test/fd-test-ui-tester/ui-tester";
  3. import {
  4.     editPoClickSaveButton,
  5.     editPoSetInputValue,
  6.     editPoToggleBooleanField,
  7.     editPoWaitForUrl,
  8. } from "@/test/meta/fd-meta-tester-ui/page-objects/edit-po";
  9. import { listPoGoTo } from "@/test/meta/fd-meta-tester-ui/page-objects/list-po";
  10. import { tablePoClickEditButton } from "@/test/meta/fd-meta-tester-ui/page-objects/table-po";
  11. import { resourceNames, personProps, routes, elementSuffixes, withIdProps } from "@fernir2/saas-kit";
  12. import { login } from "@/test/ui-tests/auth/login-po";
  13. import { getUiTestPage } from "@/test/fd-test-ui-tester/global-ui-test";
  14. import { selectWorkspacePoSelectWorkspace } from "@/test/meta/fd-meta-tester-ui/page-objects/select-workspace-po";
  15. import { getResourceById, getCurrentWorkspaceId } from "@fernir2/saas-kit/server";
  16. import { SeedTestData, seedTestData } from "@/test/test-data/seed-test-data";
  17. import { uiAssertEqual } from "@/test/fd-test-ui-tester/ui-asserts";
  18.  
  19. test.describe("Dependent fields validation", () => {
  20.     let testData: SeedTestData;
  21.  
  22.     test.beforeEach(async () => {
  23.         const uiTester = new UiTester(getUiTestPage());
  24.         const workspaceId = await getCurrentWorkspaceId();
  25.         testData = await seedTestData(workspaceId);
  26.  
  27.         await login();
  28.         await uiTester.expectUrl(routes.view);
  29.  
  30.         await listPoGoTo(resourceNames.person);
  31.         await selectWorkspacePoSelectWorkspace(workspaceId);
  32.  
  33.         await tablePoClickEditButton((testData.samBrownPerson as any)[withIdProps.id]);
  34.         await editPoWaitForUrl(resourceNames.person, (testData.samBrownPerson as any)[withIdProps.id]);
  35.     });
  36.  
  37.     test("Dependent fields are not required when 'Has kids' is off", async () => {
  38.         // Arrange
  39.         await editPoToggleBooleanField(personProps.hasKids); // Turn off
  40.  
  41.         // Act
  42.         await editPoSetInputValue(personProps.firstbornName, "");
  43.  
  44.         // Assert
  45.         await editAssertHasNoValidationError(personProps.firstbornName);
  46.         await editAssertHasNoValidationError(personProps.areKidsVaccinated);
  47.     });
  48.  
  49.     test("Dependent fields become required when 'Has kids' is on", async () => {
  50.         // Arrange
  51.         // 'Has kids' is on by default
  52.  
  53.         // Act
  54.         await editPoSetInputValue(personProps.firstbornName, "");
  55.         await editPoToggleBooleanField(personProps.areKidsVaccinated); // Turn off
  56.  
  57.         // Assert
  58.         await editAssertHasValidationError(personProps.firstbornName);
  59.         await editAssertHasValidationError(personProps.areKidsVaccinated);
  60.     });
  61.  
  62.     test("Validation errors disappear after filling the fields", async () => {
  63.         // Arrange
  64.         // 'Has kids' is on by default
  65.  
  66.         // Act
  67.         await editPoSetInputValue(personProps.firstbornName, "John");
  68.         await editPoToggleBooleanField(personProps.areKidsVaccinated); // Turn on
  69.  
  70.         // Assert
  71.         await editAssertHasNoValidationError(personProps.firstbornName);
  72.         await editAssertHasNoValidationError(personProps.areKidsVaccinated);
  73.     });
  74.  
  75.     test("Saves and verifies the data", async () => {
  76.         // Arrange
  77.         // 'Has kids' is on by default
  78.  
  79.         // Act
  80.         await editPoSetInputValue(personProps.firstbornName, "Jane");
  81.         await editPoToggleBooleanField(personProps.areKidsVaccinated); // Turn on
  82.         await editPoClickSaveButton(resourceNames.person);
  83.  
  84.         const person = await getResourceById<any>(
  85.             resourceNames.person,
  86.             (testData.samBrownPerson as any)[withIdProps.id],
  87.         );
  88.  
  89.         // Assert
  90.         expect(person.hasKids).toBe(true);
  91.         expect(person.areKidsVaccinated).toBe(true);
  92.         expect(person.firstbornName).toBe("Jane");
  93.     });
  94. });
  95.  
  96. export async function editAssertHasValidationError(propertyName: string) {
  97.     const page = getUiTestPage();
  98.     const uiTester = new UiTester(page);
  99.     const elementId = propertyName + elementSuffixes.edit;
  100.     const element = await uiTester.getById(elementId);
  101.     await uiAssertEqual("true", await element.getAttribute("aria-invalid"));
  102. }
  103.  
  104. export async function editAssertHasNoValidationError(propertyName: string) {
  105.     const page = getUiTestPage();
  106.     const uiTester = new UiTester(page);
  107.     const elementId = propertyName + elementSuffixes.edit;
  108.     const element = await uiTester.getById(elementId);
  109.     await uiAssertEqual(null, await element.getAttribute("aria-invalid"));
  110. }
  111.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement