

















@@ -81,33 +81,52 @@ describe("FileBackedMatrixSyncStore", () => {
81818282it("persists sync data so restart resumes from the saved cursor", async () => {
8383const storagePath = createStoragePath();
84+const syncResponse = createSyncResponse("s123");
84858586const firstStore = new FileBackedMatrixSyncStore(storagePath);
8687expect(firstStore.hasSavedSync()).toBe(false);
87-await firstStore.setSyncData(createSyncResponse("s123"));
88+await firstStore.setSyncData(syncResponse);
8889await firstStore.flush();
89909091const secondStore = new FileBackedMatrixSyncStore(storagePath);
9192expect(secondStore.hasSavedSync()).toBe(true);
9293await expect(secondStore.getSavedSyncToken()).resolves.toBe("s123");
93949495const savedSync = await secondStore.getSavedSync();
95-expect(savedSync?.nextBatch).toBe("s123");
96-expect(savedSync?.accountData).toEqual([
97-{
98-content: { theme: "dark" },
99-type: "com.openclaw.test",
100-},
101-]);
102-expect(savedSync?.roomsData.join?.["!room:example.org"]).toMatchObject({
103-timeline: {
104-events: [
105-{
106-event_id: "$message",
107-sender: "@user:example.org",
108-type: "m.room.message",
96+expect(savedSync).toEqual({
97+nextBatch: "s123",
98+accountData: syncResponse.account_data.events,
99+roomsData: {
100+join: {
101+"!room:example.org": {
102+summary: {
103+"m.heroes": [],
104+},
105+state: { events: [] },
106+"org.matrix.msc4222.state_after": { events: [] },
107+timeline: {
108+events: [
109+{
110+content: {
111+body: "hello",
112+msgtype: "m.text",
113+},
114+event_id: "$message",
115+origin_server_ts: 1,
116+sender: "@user:example.org",
117+type: "m.room.message",
118+},
119+],
120+prev_batch: "t0",
121+},
122+ephemeral: { events: [] },
123+account_data: { events: [] },
124+unread_notifications: {},
109125},
110-],
126+},
127+invite: {},
128+leave: {},
129+knock: {},
111130},
112131});
113132expect(secondStore.hasSavedSyncFromCleanShutdown()).toBe(false);
@@ -195,17 +214,66 @@ describe("FileBackedMatrixSyncStore", () => {
195214await vi.advanceTimersByTimeAsync(1);
196215await Promise.resolve();
197216expect(writeSpy).toHaveBeenCalledTimes(1);
198-expect(writeSpy).toHaveBeenCalledWith(
217+expect(writeSpy.mock.calls[0]).toEqual([
199218storagePath,
200-expect.objectContaining({
201-savedSync: expect.objectContaining({
219+{
220+version: 1,
221+savedSync: {
202222nextBatch: "s222",
203-}),
223+accountData: createSyncResponse("s222").account_data.events,
224+roomsData: {
225+join: {
226+"!room:example.org": {
227+summary: {
228+"m.heroes": [],
229+"m.invited_member_count": undefined,
230+"m.joined_member_count": undefined,
231+},
232+state: { events: [] },
233+"org.matrix.msc4222.state_after": { events: [] },
234+timeline: {
235+events: [
236+{
237+content: {
238+body: "hello",
239+msgtype: "m.text",
240+},
241+event_id: "$message",
242+origin_server_ts: 1,
243+sender: "@user:example.org",
244+type: "m.room.message",
245+},
246+{
247+content: {
248+body: "hello",
249+msgtype: "m.text",
250+},
251+event_id: "$message",
252+origin_server_ts: 1,
253+sender: "@user:example.org",
254+type: "m.room.message",
255+},
256+],
257+prev_batch: "t0",
258+},
259+ephemeral: { events: [] },
260+account_data: { events: [] },
261+unread_notifications: {},
262+unread_thread_notifications: undefined,
263+msc4354_sticky: undefined,
264+},
265+},
266+invite: {},
267+leave: {},
268+knock: {},
269+},
270+},
271+cleanShutdown: false,
204272clientOptions: {
205273lazyLoadMembers: true,
206274},
207-}),
208-);
275+},
276+]);
209277210278await store.flush();
211279});
@@ -267,10 +335,13 @@ describe("FileBackedMatrixSyncStore", () => {
267335const store = new FileBackedMatrixSyncStore(storagePath);
268336expect(store.hasSavedSync()).toBe(true);
269337await expect(store.getSavedSyncToken()).resolves.toBe("legacy-token");
270-await expect(store.getSavedSync()).resolves.toMatchObject({
338+await expect(store.getSavedSync()).resolves.toEqual({
271339nextBatch: "legacy-token",
272340roomsData: {
273341join: {},
342+invite: {},
343+leave: {},
344+knock: {},
274345},
275346accountData: [],
276347});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。