Improve messaging and dashboard reliability
This commit is contained in:
1 parent
345ec99348
commit
5a5a30a1d4
20 files changed
+406
-56
No files matched your search
@@ -6,7 +6,11 @@ import { runMigrations } from '../src/database/client.js';
|
||||
import { RedditUsersRepository } from '../src/database/repositories.js';
|
||||
import { ChatService } from '../src/services/chat/service.js';
|
||||
import { ChatCache } from '../src/services/chat/cache.js';
|
||||
import { MatrixAuthError, MatrixClient } from '../src/services/chat/matrix/client.js';
|
||||
import {
|
||||
MatrixAuthError,
|
||||
MatrixClient,
|
||||
MatrixFeatureDisabledError,
|
||||
} from '../src/services/chat/matrix/client.js';
|
||||
import { createMockLogger } from './mockLogger.js';
|
||||
import { authenticatedAccountAuth } from './testUtils.js';
|
||||
|
||||
@@ -232,4 +236,54 @@ describe('ChatService username persistence', () => {
|
||||
expect(matrix.getRoomFullState).toHaveBeenCalledOnce();
|
||||
expect(matrix.getRoomMessages).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('stops room state lookups after the homeserver reports the feature is disabled', async () => {
|
||||
const logger = createMockLogger();
|
||||
const cache = tmpCache(logger);
|
||||
cache.set(['first', 'second'].map((name) => ({
|
||||
username: 'unknown',
|
||||
roomName: 'unknown',
|
||||
lastMessageTime: Date.now(),
|
||||
lastMessageSnippet: '',
|
||||
isFromUs: false,
|
||||
unread: false,
|
||||
roomId: `!${name}:reddit.com`,
|
||||
messages: [],
|
||||
})));
|
||||
|
||||
const matrix = buildMatrix();
|
||||
matrix.getRoomFullState = vi.fn().mockRejectedValue(
|
||||
new MatrixFeatureDisabledError('disabled by configuration'),
|
||||
);
|
||||
matrix.getRoomMessages = vi.fn().mockImplementation(async (roomId: string) => ({
|
||||
start: 'start',
|
||||
chunk: [{
|
||||
event_id: `$${roomId}`,
|
||||
type: 'm.room.message',
|
||||
sender: `@t2_${roomId.includes('first') ? 'first' : 'second'}:reddit.com`,
|
||||
origin_server_ts: Date.now(),
|
||||
content: { msgtype: 'm.text', body: 'hello' },
|
||||
}],
|
||||
}));
|
||||
const usernameResolver = { resolveT2Ids: vi.fn().mockResolvedValue({}) };
|
||||
const svc = new ChatService(
|
||||
matrix,
|
||||
logger,
|
||||
undefined, undefined, undefined, usernameResolver,
|
||||
cache,
|
||||
undefined,
|
||||
undefined,
|
||||
authenticatedAccountAuth,
|
||||
);
|
||||
|
||||
await svc.enrichUsernames();
|
||||
|
||||
expect(matrix.getRoomFullState).toHaveBeenCalledOnce();
|
||||
expect(matrix.getRoomMessages).toHaveBeenCalledTimes(2);
|
||||
expect(logger.logs.filter((entry) =>
|
||||
entry.message.includes('room state lookup is disabled upstream'),
|
||||
)).toHaveLength(1);
|
||||
expect((await svc.getCachedConversations()).map((chat) => chat.username))
|
||||
.toEqual(['t2_first', 't2_second']);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user