69 lines · 2.6 KB · TypeScript
RawDownload
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; const expoModulesCoreMocks = vi.hoisted(() => ({  requireNativeViewManager: vi.fn(),}));const nativeView = () => null;const originalExpo = globalThis.expo; function setExpoViewConfigAvailable() {  globalThis.expo = {    getViewConfig: vi.fn().mockReturnValue({ validAttributes: {}, directEventTypes: {} }),  } as unknown as typeof globalThis.expo;} vi.mock("expo-modules-core", () => ({  requireNativeViewManager: expoModulesCoreMocks.requireNativeViewManager,})); describe("resolveNativeReviewDiffView", () => {  beforeEach(() => {    vi.clearAllMocks();    vi.resetModules();    globalThis.expo = undefined as unknown as typeof globalThis.expo;  });   afterEach(() => {    globalThis.expo = originalExpo;  });   it("returns null when the native review diff view config is unavailable", async () => {    const { resolveNativeReviewDiffView } = await import("./nativeReviewDiffSurface");    expect(resolveNativeReviewDiffView()).toBeNull();    expect(expoModulesCoreMocks.requireNativeViewManager).not.toHaveBeenCalled();  });   it("returns the native review diff view when the view config is installed", async () => {    setExpoViewConfigAvailable();    expoModulesCoreMocks.requireNativeViewManager.mockReturnValue(nativeView);    const { resolveNativeReviewDiffView } = await import("./nativeReviewDiffSurface");    expect(resolveNativeReviewDiffView()).toBe(nativeView);    expect(expoModulesCoreMocks.requireNativeViewManager).toHaveBeenCalledWith(      "T3ReviewDiffSurface",    );  });   it("does not fall back to stale legacy native review diff view names", async () => {    globalThis.expo = {      getViewConfig: vi.fn().mockImplementation((moduleName: string) => {        if (moduleName === "T3ReviewDiffView") {          return { validAttributes: {}, directEventTypes: {} };        }        return null;      }),    } as unknown as typeof globalThis.expo;    expoModulesCoreMocks.requireNativeViewManager.mockReturnValue(nativeView);    const { resolveNativeReviewDiffView } = await import("./nativeReviewDiffSurface");    expect(resolveNativeReviewDiffView()).toBeNull();    expect(expoModulesCoreMocks.requireNativeViewManager).not.toHaveBeenCalled();  });   it("returns null when the view manager cannot be required", async () => {    setExpoViewConfigAvailable();    expoModulesCoreMocks.requireNativeViewManager.mockImplementation(() => {      throw new Error("boom");    });    const { resolveNativeReviewDiffView } = await import("./nativeReviewDiffSurface");    expect(resolveNativeReviewDiffView()).toBeNull();  });});