mirror of
https://wget.la/https://github.com/Wxw-Gu/WechatExplorer
synced 2026-08-18 03:57:02 +08:00
feat: 增加日报模板
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
|
||||
const { getByHash } = vi.hoisted(() => ({ getByHash: vi.fn() }))
|
||||
|
||||
vi.mock('../../src/main/db/image-insights-store', () => ({
|
||||
imageInsightsStore: {
|
||||
getByHash,
|
||||
upsert: vi.fn(),
|
||||
listBySession: vi.fn()
|
||||
}
|
||||
}))
|
||||
|
||||
import { imageInsightService } from '../../src/main/services/image-insight-service'
|
||||
|
||||
const query = {
|
||||
sessionId: 'group@chatroom',
|
||||
startTime: 0,
|
||||
endTime: Date.now(),
|
||||
limit: 3
|
||||
}
|
||||
|
||||
const input = (id: string, responseCount: number, interactionCount: number): {
|
||||
messageId: string
|
||||
md5: string
|
||||
sessionId: string
|
||||
sender: string
|
||||
sentAt: number
|
||||
responseCount: number
|
||||
interactionCount: number
|
||||
} => ({
|
||||
messageId: id,
|
||||
md5: id.repeat(32).slice(0, 32),
|
||||
sessionId: 'group@chatroom',
|
||||
sender: id,
|
||||
sentAt: Date.now(),
|
||||
responseCount,
|
||||
interactionCount
|
||||
})
|
||||
|
||||
describe('ImageInsightService hot image selection', () => {
|
||||
beforeEach(() => {
|
||||
getByHash.mockReset()
|
||||
getByHash.mockReturnValue(null)
|
||||
})
|
||||
|
||||
it('returns fewer than three images when only two pass the hot threshold', async () => {
|
||||
const result = await imageInsightService.listTopHotImages(query, [
|
||||
input('a', 3, 0),
|
||||
input('b', 1, 1),
|
||||
input('c', 1, 0),
|
||||
input('d', 0, 5),
|
||||
input('e', 0, 0)
|
||||
])
|
||||
|
||||
expect(result.map((item) => item.messageId)).toEqual(['a', 'b'])
|
||||
})
|
||||
|
||||
it('keeps the three highest-scoring hot images when more are eligible', async () => {
|
||||
const result = await imageInsightService.listTopHotImages(query, [
|
||||
input('a', 2, 0),
|
||||
input('b', 5, 0),
|
||||
input('c', 1, 1),
|
||||
input('d', 3, 1)
|
||||
])
|
||||
|
||||
expect(result.map((item) => item.messageId)).toEqual(['b', 'd', 'a'])
|
||||
expect(result).toHaveLength(3)
|
||||
})
|
||||
|
||||
it('returns no candidates when no image has meaningful follow-up activity', async () => {
|
||||
const result = await imageInsightService.listTopHotImages(query, [
|
||||
input('a', 1, 0),
|
||||
input('b', 0, 4),
|
||||
input('c', 0, 0)
|
||||
])
|
||||
|
||||
expect(result).toEqual([])
|
||||
})
|
||||
|
||||
it('keeps a cached insight attached to an eligible candidate', async () => {
|
||||
const cached = { imageHash: 'a'.repeat(32), description: '缓存识别结果' }
|
||||
getByHash.mockImplementation((hash: string) => (hash === 'a'.repeat(32) ? cached : null))
|
||||
|
||||
const result = await imageInsightService.listTopHotImages(query, [input('a', 2, 0)])
|
||||
|
||||
expect(result[0]).toMatchObject({ messageId: 'a', insight: cached })
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user