68 lines
2.1 KiB
TypeScript
68 lines
2.1 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest';
|
|
import os from 'os';
|
|
import path from 'path';
|
|
import type { RedditUsersRepository } from '../src/database/repositories.js';
|
|
import { ChatCache } from '../src/services/chat/cache.js';
|
|
import { ChatService } from '../src/services/chat/service.js';
|
|
import { MatrixClient } from '../src/services/chat/matrix/client.js';
|
|
import { createMockLogger } from './mockLogger.js';
|
|
import { authenticatedAccountAuth } from './testUtils.js';
|
|
|
|
const creds = {
|
|
homeserver: 'https://matrix.example.test',
|
|
accessToken: 'tok',
|
|
userId: '@t2_me:reddit.com',
|
|
capturedAt: Date.now(),
|
|
};
|
|
|
|
describe('ChatService direct-room repair', () => {
|
|
it('repairs cached outbound rooms during delta sync', async () => {
|
|
const logger = createMockLogger();
|
|
const matrix = new MatrixClient(creds, logger, {
|
|
minRequestIntervalMs: 0,
|
|
fetchImpl: vi.fn(),
|
|
});
|
|
matrix.sync = vi.fn().mockResolvedValue({ next_batch: 'next', rooms: { join: {} } });
|
|
matrix.repairDirectRoomMappings = vi.fn().mockResolvedValue(1);
|
|
|
|
const users = {
|
|
getAll: () => [{ t2Id: 't2_alice', username: 'alice' }],
|
|
getByUsername: () => ({ t2Id: 't2_alice', username: 'alice' }),
|
|
upsert: vi.fn(),
|
|
} as unknown as RedditUsersRepository;
|
|
|
|
const cache = new ChatCache(
|
|
logger,
|
|
path.join(os.tmpdir(), `chat-direct-repair-${Date.now()}-${Math.random()}.json`),
|
|
);
|
|
cache.set([{
|
|
username: 'alice',
|
|
roomName: 'alice',
|
|
lastMessageTime: Date.now(),
|
|
lastMessageSnippet: 'hello',
|
|
isFromUs: true,
|
|
unread: false,
|
|
url: 'https://chat.reddit.com/room/room',
|
|
roomId: '!room:reddit.com',
|
|
messages: [],
|
|
}]);
|
|
|
|
const service = new ChatService(
|
|
matrix,
|
|
logger,
|
|
undefined, undefined, undefined, undefined,
|
|
cache,
|
|
undefined,
|
|
users,
|
|
authenticatedAccountAuth,
|
|
);
|
|
|
|
await service.refreshTopChats();
|
|
|
|
expect(matrix.repairDirectRoomMappings).toHaveBeenCalledWith([{
|
|
recipientMxid: '@t2_alice:reddit.com',
|
|
roomId: '!room:reddit.com',
|
|
}]);
|
|
});
|
|
});
|