You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.9 KiB
TypeScript
62 lines
1.9 KiB
TypeScript
// frontend/tests/connectors/ConnectorCard.test.tsx — on/off 액션 + 동기화 콜백
|
|
import { render, screen, fireEvent } from "@testing-library/react";
|
|
import { describe, expect, it, vi } from "vitest";
|
|
import { ConnectorCard } from "@/components/connectors/ConnectorCard";
|
|
import type { ConnectorStatus } from "@/lib/types";
|
|
|
|
const base: ConnectorStatus = {
|
|
id: "ca-mail-work",
|
|
domain: "mail",
|
|
provider: "google_workspace",
|
|
name: "회사",
|
|
kind: "Lumi Workspace",
|
|
tone: "coral",
|
|
mode: "mock",
|
|
env_mode: "mock",
|
|
state: "connected",
|
|
on: true,
|
|
last: "방금 동기화",
|
|
last_synced_at: null,
|
|
error_detail: "",
|
|
email: "",
|
|
};
|
|
|
|
const noop = () => {};
|
|
|
|
describe("ConnectorCard", () => {
|
|
it("on 커넥터는 [동기화]+[해제] 노출", () => {
|
|
render(<ConnectorCard connector={base} onSync={noop} onDisconnect={noop} onImport={noop} />);
|
|
expect(screen.getByText("동기화")).toBeInTheDocument();
|
|
expect(screen.getByText("해제")).toBeInTheDocument();
|
|
expect(screen.queryByText("연결")).toBeNull();
|
|
});
|
|
|
|
it("off 커넥터는 [연결] 노출", () => {
|
|
render(
|
|
<ConnectorCard
|
|
connector={{
|
|
...base,
|
|
id: "ca-health-fit",
|
|
name: "Google Fit",
|
|
state: "disconnected",
|
|
on: false,
|
|
last: "연결 안 됨",
|
|
}}
|
|
onSync={noop}
|
|
onDisconnect={noop}
|
|
onImport={noop}
|
|
/>,
|
|
);
|
|
expect(screen.getByText("연결")).toBeInTheDocument();
|
|
expect(screen.queryByText("동기화")).toBeNull();
|
|
expect(screen.queryByText("해제")).toBeNull();
|
|
});
|
|
|
|
it("동기화 클릭 시 onSync(id) 호출", () => {
|
|
const onSync = vi.fn();
|
|
render(<ConnectorCard connector={base} onSync={onSync} onDisconnect={noop} onImport={noop} />);
|
|
fireEvent.click(screen.getByText("동기화"));
|
|
expect(onSync).toHaveBeenCalledWith("ca-mail-work");
|
|
});
|
|
});
|