import { isInvalidParentFrameOrigin, isReadyMessage } from "./MessageValidation";

describe("isInvalidParentFrameOrigin", () => {
  test.each`
    domain                                                              | expected
    ${"https://cosmos.azure.com"}                                       | ${false}
    ${"https://cosmos.azure.us"}                                        | ${false}
    ${"https://cosmos.azure.cn"}                                        | ${false}
    ${"https://portal.azure.com"}                                       | ${false}
    ${"https://portal.azure.us"}                                        | ${false}
    ${"https://portal.azure.cn"}                                        | ${false}
    ${"https://portal.microsoftazure.de"}                               | ${false}
    ${"https://subdomain.portal.azure.com"}                             | ${false}
    ${"https://subdomain.portal.azure.us"}                              | ${false}
    ${"https://subdomain.portal.azure.cn"}                              | ${false}
    ${"https://cdb-ms-prod-pbe.cosmos.azure.com"}                       | ${false}
    ${"https://cdb-ff-prod-pbe.cosmos.azure.us"}                        | ${false}
    ${"https://cdb-mc-prod-pbe.cosmos.azure.cn"}                        | ${false}
    ${"https://cosmos-db-dataexplorer-germanycentral.azurewebsites.de"} | ${false}
    ${"https://random.domain"}                                          | ${true}
    ${"https://malicious.cloudapp.azure.com"}                           | ${true}
    ${"https://malicious.germanycentral.cloudapp.microsoftazure.de"}    | ${true}
    ${"https://maliciousazure.com"}                                     | ${true}
    ${"https://maliciousportalsazure.com"}                              | ${true}
    ${"https://cosmos-db-dataexplorer-germanycentralAazurewebsites.de"} | ${true}
  `("returns $expected when called with $domain", ({ domain, expected }) => {
    expect(isInvalidParentFrameOrigin({ origin: domain } as MessageEvent)).toBe(expected);
  });
});

describe("isReadyMessage", () => {
  test.each`
    event                                                 | expected
    ${{ data: { kind: "ready" } }}                        | ${true}
    ${{ data: { data: "ready" } }}                        | ${true}
    ${{ data: { data: "ready", kind: "ready" } }}         | ${true}
    ${{ data: { kind: "not-ready" } }}                    | ${false}
    ${{ data: { data: "not-ready" } }}                    | ${false}
    ${{ data: { data: "not-ready", kind: "not-ready" } }} | ${false}
    ${{ data: {} }}                                       | ${false}
    ${{}}                                                 | ${false}
  `("returns $expected when called with $event", ({ event, expected }) => {
    expect(isReadyMessage(event as MessageEvent)).toBe(expected);
  });
});
