File size: 1,149 Bytes
eb3f11e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
 * Shared assertions for channel directory id contract tests.
 */
import { expect } from "vitest";
import type { ChannelDirectoryEntry } from "../channel-contract.js";
import type { OpenClawConfig } from "../config-contracts.js";

export type DirectoryListFn = (params: {
  cfg: OpenClawConfig;
  accountId?: string;
  query?: string | null;
  limit?: number | null;
}) => Promise<ChannelDirectoryEntry[]>;

/** Calls a directory lister and compares returned ids, optionally ignoring order. */
export async function expectDirectoryIds(
  listFn: DirectoryListFn,
  cfg: OpenClawConfig,
  expected: string[],
  options?: { sorted?: boolean },
) {
  const entries = await listFn({
    cfg,
    accountId: "default",
    query: null,
    limit: null,
  });
  const ids = entries.map((entry) => entry.id);
  expect(options?.sorted ? sortDirectoryIds(ids) : ids).toEqual(
    options?.sorted ? sortDirectoryIds(expected) : expected,
  );
}

function compareDirectoryIds(left: string, right: string) {
  return left < right ? -1 : left > right ? 1 : 0;
}

function sortDirectoryIds(values: string[]) {
  return values.toSorted(compareDirectoryIds);
}