Skip to content

Commit

Permalink
test: RFC: tests for EventTypeAppCardInterface (CALCOM-11005 ) (calco…
Browse files Browse the repository at this point in the history
…m#11344)

Co-authored-by: gitstart-calcom <[email protected]>
Co-authored-by: gitstart-calcom <[email protected]>
  • Loading branch information
3 people authored Oct 5, 2023
1 parent a86d4ec commit bba52db
Show file tree
Hide file tree
Showing 3 changed files with 133 additions and 0 deletions.
97 changes: 97 additions & 0 deletions packages/app-store/_components/eventTypeAppCardInterface.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
import { render, screen } from "@testing-library/react";
import type { CredentialOwner } from "types";
import { vi } from "vitest";

import type { RouterOutputs } from "@calcom/trpc";

import { DynamicComponent } from "./DynamicComponent";
import { EventTypeAppCard } from "./EventTypeAppCardInterface";

vi.mock("./DynamicComponent", async () => {
const actual = (await vi.importActual("./DynamicComponent")) as object;
return {
...actual,
DynamicComponent: vi.fn(() => <div>MockedDynamicComponent</div>),
};
});

afterEach(() => {
vi.clearAllMocks();
});

const getAppDataMock = vi.fn();
const setAppDataMock = vi.fn();
const mockProps = {
app: {
name: "TestApp",
slug: "testapp",
credentialOwner: {},
} as RouterOutputs["viewer"]["integrations"]["items"][number] & { credentialOwner?: CredentialOwner },
eventType: {},
getAppData: getAppDataMock,
setAppData: setAppDataMock,
LockedIcon: <div>MockedIcon</div>,
disabled: false,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
} as any;

describe("Tests for EventTypeAppCard component", () => {
test("Should render DynamicComponent with correct slug", () => {
render(<EventTypeAppCard {...mockProps} />);

expect(DynamicComponent).toHaveBeenCalledWith(
expect.objectContaining({
slug: mockProps.app.slug,
}),
{}
);

expect(screen.getByText("MockedDynamicComponent")).toBeInTheDocument();
});

test("Should invoke getAppData and setAppData from context on render", () => {
render(
<EventTypeAppCard
{...mockProps}
value={{
getAppData: getAppDataMock(),
setAppData: setAppDataMock(),
}}
/>
);

expect(getAppDataMock).toHaveBeenCalled();
expect(setAppDataMock).toHaveBeenCalled();
});

test("Should render DynamicComponent with 'stripepayment' slug for stripe app", () => {
const stripeProps = {
...mockProps,
app: {
...mockProps.app,
slug: "stripe",
},
};

render(<EventTypeAppCard {...stripeProps} />);

expect(DynamicComponent).toHaveBeenCalledWith(
expect.objectContaining({
slug: "stripepayment",
}),
{}
);

expect(screen.getByText("MockedDynamicComponent")).toBeInTheDocument();
});

test("Should display error boundary message on child component error", () => {
(DynamicComponent as jest.Mock).mockImplementation(() => {
return Error("Mocked error from DynamicComponent");
});

render(<EventTypeAppCard {...mockProps} />);
const errorMessage = screen.getByText(`There is some problem with ${mockProps.app.name} App`);
expect(errorMessage).toBeInTheDocument();
});
});
27 changes: 27 additions & 0 deletions packages/app-store/test-setup.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import matchers from "@testing-library/jest-dom/matchers";
import { cleanup } from "@testing-library/react";
import { afterEach, expect, vi } from "vitest";

vi.mock("@calcom/lib/OgImages", async () => {
return {};
});

vi.mock("@calcom/lib/hooks/useLocale", () => ({
useLocale: () => {
return {
t: (str: string) => str,
};
},
}));

global.ResizeObserver = vi.fn().mockImplementation(() => ({
observe: vi.fn(),
unobserve: vi.fn(),
disconnect: vi.fn(),
}));

expect.extend(matchers);

afterEach(() => {
cleanup();
});
9 changes: 9 additions & 0 deletions vitest.workspace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,15 @@ const workspaces = packagedEmbedTestsOnly
setupFiles: ["packages/ui/components/test-setup.ts"],
},
},
{
test: {
globals: true,
name: "EventTypeAppCardInterface components",
include: ["packages/app-store/_components/**/*.{test,spec}.{ts,js,tsx}"],
environment: "jsdom",
setupFiles: ["packages/app-store/test-setup.ts"],
},
},
];

export default defineWorkspace(workspaces);

0 comments on commit bba52db

Please sign in to comment.