feat: track received image outcomes

This commit is contained in:
jjbrunton committed 2026-08-08 18:53:11 +01:00
1 parent 50de1c180d
commit d819a0f1e6
15 files changed
+145 -21

No files matched your search

+20 -2
View File
@@ -8,7 +8,7 @@ import { MatrixClient } from '../src/services/chat/matrix/client.js';
import { MediaService } from '../src/services/media.js';
import type { MediaDownloader } from '../src/services/media.js';
import { createMockLogger } from './mockLogger.js';
import { authenticatedAccountAuth } from './testUtils.js';
import { authenticatedAccountAuth, createTestDb, createTestRepositories } from './testUtils.js';
const creds = {
homeserver: 'https://matrix.example.test',
@@ -79,8 +79,18 @@ describe('ChatService delta sync — media attachment', () => {
const logger = createMockLogger();
const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'chat-delta-media-merge-'));
const cacheFile = path.join(tmpDir, 'chat-cache.json');
const db = createTestDb();
const repos = createTestRepositories(db);
try {
const now = Date.now();
repos.postsRepo.insert({
id: 'source-post', subreddit: 'example', author: 'alice', title: 'Source',
imageUrl: null, processedAt: now - 10_000,
});
repos.messagesRepo.insert({
postId: 'source-post', recipient: 'alice', subject: 'alice', message: 'hello',
sentAt: now - 9_000, strategyId: 'direct', chatRoomId: '!room1:example.test',
});
const existing = {
version: 1,
savedAt: now - 60_000,
@@ -129,7 +139,7 @@ describe('ChatService delta sync — media attachment', () => {
const media = new MediaService(buildDownloader(), logger, tmpDir);
const cache = new ChatCache(logger, cacheFile);
const svc = new ChatService(matrix, logger, undefined, media, undefined, undefined, cache, undefined, undefined, authenticatedAccountAuth);
const svc = new ChatService(matrix, logger, undefined, media, undefined, undefined, cache, repos.messagesRepo, undefined, authenticatedAccountAuth);
await svc.loadCache();
// refreshTopChats always runs a /sync (unlike getActiveChats, which can
@@ -145,7 +155,15 @@ describe('ChatService delta sync — media attachment', () => {
expect(imageMsg).toBeDefined();
expect(imageMsg!.media).toBeDefined();
expect(imageMsg!.media!.length).toBe(1);
const performanceMessage = repos.messagesRepo.getByChatRoomId('!room1:example.test');
expect(performanceMessage).toMatchObject({ gotResponse: true, gotImage: true });
expect(repos.messagesRepo.getStrategyStats()).toEqual([
expect.objectContaining({
strategyId: 'direct', totalResponses: 1, totalImages: 1, responseRate: 100, imageRate: 100,
}),
]);
} finally {
db.close();
await fs.rm(tmpDir, { recursive: true, force: true });
}
});