import { beforeEach, expect, describe, it } from "@jest/globals" import { ensureUniqueId, joinPaths, createSingularWarning} from "../../src/utils" describe("Utils", () => { let element: HTMLElement; beforeEach(() => { element = document.createElement("div"); }) it("ensureUniqueId sets unique id on element", async () => { expect(element.id).toBe("") ensureUniqueId(element) expect(element.id).toBe("py-internal-0") }) it("ensureUniqueId sets unique id with increasing counter", async () => { const secondElement = document.createElement("div") expect(element.id).toBe("") expect(secondElement.id).toBe("") ensureUniqueId(element) ensureUniqueId(secondElement) // The counter will have been incremented on // the previous test, make sure it keeps increasing expect(element.id).toBe("py-internal-1") expect(secondElement.id).toBe("py-internal-2") }) }) describe("JoinPaths", () => { it("should remove trailing slashes from the beginning and the end", () => { const paths: string[] = ['///abc/d/e///']; const joinedPath = joinPaths(paths); expect(joinedPath).toStrictEqual('/abc/d/e'); }) it("should not remove slashes from the middle to preserve protocols such as http", () => { const paths: string[] = ['http://google.com', '///data.txt']; const joinedPath = joinPaths(paths); expect(joinedPath).toStrictEqual('http://google.com/data.txt'); }) it("should not join paths when they are empty strings", () => { const paths: string[] = ['', '///hhh/ll/pp///', '', 'kkk']; const joinedPath = joinPaths(paths); expect(joinedPath).toStrictEqual('hhh/ll/pp/kkk'); }) describe("createSingularBanner", () => { it("should create one and new banner containing the sentinel text, and not duplicate it", () => { //One warning banner with the desired text should be created createSingularWarning("A unique error message", "unique") expect(document.getElementsByClassName("alert-banner")?.length).toEqual(1) expect(document.getElementsByClassName("alert-banner")[0].textContent).toEqual(expect.stringContaining("A unique error message")) //Should still only be one banner, since the second uses the existing sentinel value "unique" createSingularWarning("This banner should not appear", "unique") expect(document.getElementsByClassName("alert-banner")?.length).toEqual(1) expect(document.getElementsByClassName("alert-banner")[0].textContent).toEqual(expect.stringContaining("A unique error message")) //If the sentinel value is not provided, the entire msg is used as the sentinel createSingularWarning("A unique error message", null) expect(document.getElementsByClassName("alert-banner")?.length).toEqual(1) expect(document.getElementsByClassName("alert-banner")[0].textContent).toEqual(expect.stringContaining("A unique error message")) }) }) })