Files
prowler/ui/lib/utm.test.ts
T

67 lines
1.9 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { copyAttributionParams, extractUtmParams } from "./utm";
describe("extractUtmParams", () => {
it("captures every utm_* param when utm_source is present", () => {
// Given
const params = new URLSearchParams(
"utm_source=blackhat&utm_medium=conference&utm_content=badge&foo=bar",
);
// When / Then
expect(extractUtmParams(params)).toEqual({
utm_source: "blackhat",
utm_medium: "conference",
utm_content: "badge",
});
});
it("returns empty for utm params without attribution source", () => {
// Given / When / Then
expect(extractUtmParams({ utm_content: "alerts" })).toEqual({});
});
it("captures promo_code on its own as valid attribution", () => {
// Given
const params = new URLSearchParams(
"promo_code=95b2c481-f9d5-4fc2-bc34-0b542e25f00b",
);
// When / Then
expect(extractUtmParams(params)).toEqual({
promo_code: "95b2c481-f9d5-4fc2-bc34-0b542e25f00b",
});
});
it("lets promo_code carry sourceless utm params", () => {
// Given
const params = new URLSearchParams("utm_content=badge&promo_code=abc");
// When / Then
expect(extractUtmParams(params)).toEqual({
utm_content: "badge",
promo_code: "abc",
});
});
});
describe("copyAttributionParams", () => {
it("copies attribution params and drops unrelated params", () => {
// Given
const source = new URLSearchParams(
"promo_code=black-hat-2026&utm_source=blackhat&foo=bar",
);
const target = new URLSearchParams("callbackUrl=/");
// When
copyAttributionParams(source, target);
// Then
expect(target.get("callbackUrl")).toBe("/");
expect(target.get("promo_code")).toBe("black-hat-2026");
expect(target.get("utm_source")).toBe("blackhat");
expect(target.get("foo")).toBeNull();
});
});