98 lines · 2.9 KB · TypeScript
RawDownload
import { describe, expect, it } from "@effect/vitest"; import { collectRawWorkOSList, collectWorkOSList } from "./workos"; describe("collectWorkOSList", () => {  it("collects memberships beyond the first WorkOS page", async () => {    const autoPaginationCalls: string[] = [];     const response = await collectWorkOSList({      object: "list",      data: [{ id: "om_first_page" }],      listMetadata: {        before: null,        after: "om_next_page",      },      autoPagination: async () => {        autoPaginationCalls.push("called");        return [{ id: "om_first_page" }, { id: "om_second_page" }];      },    });     expect(response.data).toEqual([{ id: "om_first_page" }, { id: "om_second_page" }]);    expect(response.listMetadata).toEqual({ before: null, after: null });    expect(autoPaginationCalls).toEqual(["called"]);  });   it("keeps the first page when WorkOS reports no next page", async () => {    let autoPaginationCalls = 0;     const response = await collectWorkOSList({      object: "list",      data: [{ id: "om_only_page" }],      listMetadata: {        before: null,        after: null,      },      autoPagination: async () => {        autoPaginationCalls += 1;        return [{ id: "om_unexpected_page" }];      },    });     expect(response.data).toEqual([{ id: "om_only_page" }]);    expect(response.listMetadata).toEqual({ before: null, after: null });    expect(autoPaginationCalls).toBe(0);  });}); describe("collectRawWorkOSList", () => {  it("collects raw WorkOS lists using snake-case cursors", async () => {    const requestedCursors: Array<string | undefined> = [];     const response = await collectRawWorkOSList(async (after) => {      requestedCursors.push(after);      return after        ? {            data: [{ id: "api_key_second_page" }],            list_metadata: {              before: null,              after: null,            },          }        : {            data: [{ id: "api_key_first_page" }],            list_metadata: {              before: null,              after: "api_key_second_page",            },          };    });     expect(response.data).toEqual([{ id: "api_key_first_page" }, { id: "api_key_second_page" }]);    expect(response.listMetadata).toEqual({ before: null, after: null });    expect(requestedCursors).toEqual([undefined, "api_key_second_page"]);  });   it("collects raw WorkOS lists using camel-case cursors", async () => {    const response = await collectRawWorkOSList(async (after) =>      after        ? {            data: [{ id: "second" }],            listMetadata: {              before: null,              after: null,            },          }        : {            data: [{ id: "first" }],            listMetadata: {              before: null,              after: "second",            },          },    );     expect(response.data).toEqual([{ id: "first" }, { id: "second" }]);  });});