import { beforeEach, describe, expect, it, vi } from "vitest"; import type { OpenClawConfig } from "../runtime-api.js"; import { getChannelInfoMSTeams, listChannelsMSTeams } from "./graph-teams.js";
// Second call should use the relative path stripped from the nextLink const secondCallPath = mockState.fetchGraphJson.mock.calls[1]?.[0]?.path;
expect(secondCallPath).toBe( "/teams/team-paged/channels?$select=id,displayName,description,membershipType&$skip=1"an>,
);
});
it("stops after 10 pages to avoid runaway pagination", async () => { for (let i = 0; i < 11; i++) {
mockState.fetchGraphJson.mockResolvedValueOnce({
value: [
{
id: `ch-${i}`,
displayName: `Channel ${i}`,
description: null,
membershipType: "standard",
},
], "@odata.nextLink": `https://graph.microsoft.com/v1.0/teams/team-huge/channels?$skip=${i + 1}`,
});
}
const result = await listChannelsMSTeams({
cfg: {} as OpenClawConfig,
teamId: "team-huge",
});
// Should stop at 10 pages even though more nextLinks are available
expect(result.channels).toHaveLength(10);
expect(mockState.fetchGraphJson).toHaveBeenCalledTimes(10);
expect(result.truncated).toBe(true);
});
});
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.18Bemerkung:
(vorverarbeitet am 2026-05-26)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.