fleet/frontend/pages/SoftwarePage/SoftwareAddPage/helpers.tests.tsx
Brian Rotich 87faea21d9
Fix UI error message when adding duplicate software title to a team (#36394)
Resolves #36021. Fix the copy shown when a user adds a customer software to a team with a
duplicate title.
2025-12-09 08:48:10 -05:00

77 lines
2.9 KiB
TypeScript

import React from "react";
import { render } from "@testing-library/react";
import {
ensurePeriod,
formatAlreadyAvailableInstallMessage,
ADD_SOFTWARE_ERROR_PREFIX,
} from "./helpers"; // Adjust path as needed
// --- ensurePeriod tests ---
describe("ensurePeriod", () => {
it("adds a period to a string that doesn't end with a period", () => {
expect(ensurePeriod("Test string")).toBe("Test string.");
});
it("returns the original string if it already ends with a period", () => {
expect(ensurePeriod("Test string.")).toBe("Test string.");
});
it("returns an empty string unchanged", () => {
expect(ensurePeriod("")).toBe("");
});
it("returns the original string if the string is only a period", () => {
expect(ensurePeriod(".")).toBe(".");
});
});
// --- formatAlreadyAvailableInstallMessage tests ---
describe("formatAlreadyAvailableInstallMessage", () => {
it("returns a React fragment with the correct text and team when the string matches the regex", () => {
// Example input: "Couldn't add. MyApp already has a package or app available for install on the Marketing team."
const msg = `${ADD_SOFTWARE_ERROR_PREFIX} MyApp already has a package or app available for install on the Marketing team.`;
const result = formatAlreadyAvailableInstallMessage(msg);
// Render for querying text
const { container } = render(<>{result}</>);
expect(container.textContent).toContain("Couldn't add.");
expect(container.textContent).toContain("MyApp");
expect(container.textContent).toContain("Marketing team");
});
it("returns React with correct text and team when the string matches the package exists regex", () => {
const msg = `SoftwareInstaller "MyApp" already exists with team "Marketing".`;
const result = formatAlreadyAvailableInstallMessage(msg);
const { container } = render(<>{result}</>);
expect(container.textContent).toContain("Couldn't add.");
expect(container.textContent).toContain("MyApp");
expect(container.textContent).toContain(
"already has an installer available"
);
expect(container.textContent).toContain("Marketing");
});
it("returns null if the string does not match the expected pattern", () => {
const msg = "Random error message not matching pattern";
const result = formatAlreadyAvailableInstallMessage(msg);
expect(result).toBeNull();
});
it("works for different app names and team names", () => {
const msg = `${ADD_SOFTWARE_ERROR_PREFIX} Zoom already has a package or app available for install on the Engineering team.`;
const result = formatAlreadyAvailableInstallMessage(msg);
const { container } = render(<>{result}</>);
expect(container.textContent).toContain("Zoom");
expect(container.textContent).toContain("Engineering team");
});
it("returns null if the input is empty", () => {
expect(formatAlreadyAvailableInstallMessage("")).toBeNull();
});
});