feat: persist settings and enrich conversation context
This commit is contained in:
1 parent
a36723a325
commit
2c100d72b6
84 files changed
+2248
-644
No files matched your search
@@ -34,8 +34,79 @@ describe('ChatService account authentication gate', () => {
|
||||
auth,
|
||||
);
|
||||
|
||||
await service.refreshTopChats();
|
||||
await expect(service.refreshTopChats()).rejects.toThrow(
|
||||
'Matrix authentication could not be restored',
|
||||
);
|
||||
|
||||
expect(matrix.sync).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('coalesces concurrent delta refresh requests before they reach Matrix', async () => {
|
||||
const logger = createMockLogger();
|
||||
const matrix = new MatrixClient({
|
||||
homeserver: 'https://matrix.example.test',
|
||||
accessToken: 'verified',
|
||||
userId: '@t2_account:reddit.com',
|
||||
capturedAt: 1,
|
||||
}, logger, { minRequestIntervalMs: 0 });
|
||||
let finishSync!: (value: { next_batch: string }) => void;
|
||||
matrix.sync = vi.fn(() => new Promise((resolve) => {
|
||||
finishSync = resolve;
|
||||
})) as typeof matrix.sync;
|
||||
const cache = new ChatCache(
|
||||
logger,
|
||||
path.join(os.tmpdir(), `chat-auth-${Date.now()}-${Math.random()}.json`),
|
||||
);
|
||||
const service = new ChatService(
|
||||
matrix,
|
||||
logger,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
cache,
|
||||
undefined,
|
||||
undefined,
|
||||
{ isFullyAuthenticated: () => true, invalidate: vi.fn() },
|
||||
);
|
||||
|
||||
const first = service.refreshTopChats();
|
||||
const second = service.refreshTopChats();
|
||||
await vi.waitFor(() => expect(matrix.sync).toHaveBeenCalledOnce());
|
||||
finishSync({ next_batch: 's1' });
|
||||
|
||||
await expect(Promise.all([first, second])).resolves.toEqual([undefined, undefined]);
|
||||
expect(matrix.sync).toHaveBeenCalledOnce();
|
||||
});
|
||||
|
||||
it('reports failed sync termination to progress listeners', async () => {
|
||||
const logger = createMockLogger();
|
||||
const matrix = new MatrixClient({
|
||||
homeserver: 'https://matrix.example.test',
|
||||
accessToken: 'unverified',
|
||||
userId: '@t2_account:reddit.com',
|
||||
capturedAt: 1,
|
||||
}, logger, { minRequestIntervalMs: 0 });
|
||||
const service = new ChatService(
|
||||
matrix,
|
||||
logger,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
new ChatCache(logger, path.join(os.tmpdir(), `chat-auth-${Date.now()}-${Math.random()}.json`)),
|
||||
undefined,
|
||||
undefined,
|
||||
{ isFullyAuthenticated: () => false, invalidate: vi.fn() },
|
||||
);
|
||||
const listener = vi.fn();
|
||||
service.setProgressListener(listener);
|
||||
|
||||
await expect(service.refreshTopChats()).rejects.toThrow();
|
||||
|
||||
expect(listener).toHaveBeenLastCalledWith(null, {
|
||||
status: 'failed',
|
||||
error: 'Matrix authentication could not be restored',
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user