Put "start at" at the top of the modal
[oweals/peertube.git] / client / src / app / videos / recommendations / recent-videos-recommendation.service.spec.ts
1 import { RecentVideosRecommendationService } from '@app/videos/recommendations/recent-videos-recommendation.service'
2 import { VideosProvider } from '@app/shared/video/video.service'
3 import { EMPTY, of } from 'rxjs'
4 import Mock = jest.Mock
5
6 describe('"Recent Videos" Recommender', () => {
7   describe('getRecommendations', () => {
8     let videosService: VideosProvider
9     let service: RecentVideosRecommendationService
10     let getVideosMock: Mock<any>
11     beforeEach(() => {
12       getVideosMock = jest.fn(() => EMPTY)
13       videosService = {
14         getVideos: getVideosMock
15       }
16       service = new RecentVideosRecommendationService(videosService)
17     })
18     it('should filter out the given UUID from the results', async (done) => {
19       const vids = [
20         { uuid: 'uuid1' },
21         { uuid: 'uuid2' }
22       ]
23       getVideosMock.mockReturnValueOnce(of({ videos: vids }))
24       const result = await service.getRecommendations({ uuid: 'uuid1' }).toPromise()
25       const uuids = result.map(v => v.uuid)
26       expect(uuids).toEqual(['uuid2'])
27       done()
28     })
29     it('should return 5 results when the given UUID is NOT in the first 5 results', async (done) => {
30       const vids = [
31         { uuid: 'uuid2' },
32         { uuid: 'uuid3' },
33         { uuid: 'uuid4' },
34         { uuid: 'uuid5' },
35         { uuid: 'uuid6' },
36         { uuid: 'uuid7' }
37       ]
38       getVideosMock.mockReturnValueOnce(of({ videos: vids }))
39       const result = await service.getRecommendations({ uuid: 'uuid1' }).toPromise()
40       expect(result.length).toEqual(5)
41       done()
42     })
43     it('should return 5 results when the given UUID IS PRESENT in the first 5 results', async (done) => {
44       const vids = [
45         { uuid: 'uuid1' },
46         { uuid: 'uuid2' },
47         { uuid: 'uuid3' },
48         { uuid: 'uuid4' },
49         { uuid: 'uuid5' },
50         { uuid: 'uuid6' }
51       ]
52       getVideosMock
53         .mockReturnValueOnce(of({ videos: vids }))
54       const result = await service.getRecommendations({ uuid: 'uuid1' }).toPromise()
55       expect(result.length).toEqual(5)
56       done()
57     })
58     it('should fetch an extra result in case the given UUID is in the list', async (done) => {
59       await service.getRecommendations({ uuid: 'uuid1' }).toPromise()
60       let expectedSize = service.pageSize + 1
61       let params = { currentPage: jasmine.anything(), itemsPerPage: expectedSize }
62       expect(getVideosMock).toHaveBeenCalledWith(params, jasmine.anything())
63       done()
64     })
65   })
66 })