From 3916fb1e97b23e1c42662d735d7b8e7a7b33d342 Mon Sep 17 00:00:00 2001 From: Doug Schrashun Date: Fri, 18 Oct 2024 16:16:29 -0400 Subject: [PATCH] what if the e2e test strings are random --- .../tests/e2e/search/search-loading.spec.ts | 10 +++--- .../e2e/search/search-no-results.spec.ts | 3 +- frontend/tests/e2e/search/searchSpecUtil.ts | 31 +++++++++++++++++++ 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/frontend/tests/e2e/search/search-loading.spec.ts b/frontend/tests/e2e/search/search-loading.spec.ts index a9d163e9b8..a534291786 100644 --- a/frontend/tests/e2e/search/search-loading.spec.ts +++ b/frontend/tests/e2e/search/search-loading.spec.ts @@ -1,7 +1,9 @@ import { expect, Page, test } from "@playwright/test"; import { BrowserContextOptions } from "playwright-core"; - -import { fillSearchInputAndSubmit } from "./searchSpecUtil"; +import { + fillSearchInputAndSubmit, + generateRandomString, +} from "tests/e2e/search/searchSpecUtil"; interface PageProps { page: Page; @@ -16,14 +18,14 @@ test.describe("Search page tests", () => { }); test("should show and hide loading state", async ({ page }: PageProps) => { - const searchTerm = "advanced"; + const searchTerm = generateRandomString([4, 5]); await fillSearchInputAndSubmit(searchTerm, page); const loadingIndicator = page.getByTestId("loading-message"); await expect(loadingIndicator).toBeVisible(); await expect(loadingIndicator).toBeHidden(); - const searchTerm2 = "agency"; + const searchTerm2 = generateRandomString([8]); await fillSearchInputAndSubmit(searchTerm2, page); await expect(loadingIndicator).toBeVisible(); await expect(loadingIndicator).toBeHidden(); diff --git a/frontend/tests/e2e/search/search-no-results.spec.ts b/frontend/tests/e2e/search/search-no-results.spec.ts index bf446bd77b..9137975104 100644 --- a/frontend/tests/e2e/search/search-no-results.spec.ts +++ b/frontend/tests/e2e/search/search-no-results.spec.ts @@ -4,6 +4,7 @@ import { BrowserContextOptions } from "playwright-core"; import { expectURLContainsQueryParam, fillSearchInputAndSubmit, + generateRandomString, } from "./searchSpecUtil"; interface PageProps { @@ -21,7 +22,7 @@ test.describe("Search page tests", () => { test("should return 0 results when searching for obscure term", async ({ page, }: PageProps) => { - const searchTerm = "0resultearch"; + const searchTerm = generateRandomString([10]); await fillSearchInputAndSubmit(searchTerm, page); await new Promise((resolve) => setTimeout(resolve, 3250)); diff --git a/frontend/tests/e2e/search/searchSpecUtil.ts b/frontend/tests/e2e/search/searchSpecUtil.ts index 41a669cdff..705d409c22 100644 --- a/frontend/tests/e2e/search/searchSpecUtil.ts +++ b/frontend/tests/e2e/search/searchSpecUtil.ts @@ -14,6 +14,37 @@ export async function fillSearchInputAndSubmit(term: string, page: Page) { await page.click(".usa-search > button[type='submit']"); } +const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + +// adapted from https://stackoverflow.com/a/1349426 +export const generateRandomString = (desiredPattern: number[]) => { + const numberOfPossibleCharacters = characters.length; + return desiredPattern.reduce((randomString, numberOfCharacters, index) => { + let counter = 0; + while (counter < numberOfCharacters) { + randomString += characters.charAt( + Math.floor(Math.random() * numberOfPossibleCharacters), + ); + counter += 1; + } + if (index < desiredPattern.length - 1) { + randomString += " "; + } + return randomString; + }, ""); +}; + +// let result = ""; +// const charactersLength = characters.length; +// let counter = 0; +// while (counter < length) { +// result += characters.charAt(Math.floor(Math.random() * charactersLength)); +// counter += 1; +// } +// return result; +// }; +// (Math.random() + 1).toString(36).substring(7); + export function expectURLContainsQueryParam( page: Page, queryParamName: string,