| 1 | import supertest from 'supertest'; |
| 2 | import { Agent } from '../agent'; |
| 3 | import { platform, platform2 } from '../mockData'; |
| 4 | |
| 5 | describe('HotTopicController (e2e)', () => { |
| 6 | let agent: supertest.Agent; |
| 7 | |
| 8 | beforeAll(async () => { |
| 9 | agent = Agent.get(); |
| 10 | }); |
| 11 | |
| 12 | describe('findAll', () => { |
| 13 | it('should return top 10 hot topics for each platform', async () => { |
| 14 | const result = await agent.get('/hot-topics/all').expect(200); |
| 15 | |
| 16 | expect(Array.isArray(result.body.data)).toBe(true); |
| 17 | |
| 18 | // 验证返回的数据结构 |
| 19 | result.body.data.forEach(group => { |
| 20 | expect(group).toHaveProperty('platform'); |
| 21 | expect(group).toHaveProperty('topics'); |
| 22 | expect(Array.isArray(group.topics)).toBe(true); |
| 23 | expect(group.topics.length).toBeLessThanOrEqual(10); |
| 24 | |
| 25 | // 验证每个平台的话题都正确分组 |
| 26 | group.topics.forEach(topic => { |
| 27 | expect(topic.platformId._id.toString()).toBe(group.platform._id.toString()); |
| 28 | }); |
| 29 | |
| 30 | // 验证每个平台内的话题按rank升序排序 |
| 31 | const ranks = group.topics.map(topic => topic.rank); |
| 32 | expect(ranks).toEqual([...ranks].sort((a, b) => a - b)); |
| 33 | }); |
| 34 | |
| 35 | // 验证包含所有有话题的平台 |
| 36 | const platformIds = result.body.data.map(group => group.platform._id.toString()); |
| 37 | expect(platformIds).toContain(platform._id.toString()); |
| 38 | expect(platformIds).toContain(platform2._id.toString()); |
| 39 | }); |
| 40 | }); |
| 41 | }); |
| 42 |