3bc959df353e09b4a1bf3e0b3477390c4c74aac0
[arvados-workbench2.git] / src / services / favorite-service / favorite-service.test.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { LinkService } from "../link-service/link-service";
6 import { GroupsService, GroupContentsResource } from "../groups-service/groups-service";
7 import { FavoriteService } from "./favorite-service";
8 import { LinkClass, LinkResource } from "../../models/link";
9 import { mockResourceService } from "../../common/api/common-resource-service.test";
10 import { FilterBuilder } from "../../common/api/filter-builder";
11
12 describe("FavoriteService", () => {
13
14     let linkService: LinkService;
15     let groupService: GroupsService;
16
17     beforeEach(() => {
18         linkService = mockResourceService(LinkService);
19         groupService = mockResourceService(GroupsService);
20     });
21
22     it("marks resource as favorite", async () => {
23         linkService.create = jest.fn().mockReturnValue(Promise.resolve({ uuid: "newUuid" }));
24         const favoriteService = new FavoriteService(linkService, groupService);
25
26         const newFavorite = await favoriteService.create({ userUuid: "userUuid", resource: { uuid: "resourceUuid", name: "resource" } });
27
28         expect(linkService.create).toHaveBeenCalledWith({
29             ownerUuid: "userUuid",
30             tailUuid: "userUuid",
31             headUuid: "resourceUuid",
32             linkClass: LinkClass.STAR,
33             name: "resource"
34         });
35         expect(newFavorite.uuid).toEqual("newUuid");
36
37     });
38
39     it("unmarks resource as favorite", async () => {
40         const list = jest.fn().mockReturnValue(Promise.resolve({ items: [{ uuid: "linkUuid" }] }));
41         const filters = FilterBuilder
42             .create()
43             .addEqual('tailUuid', "userUuid")
44             .addEqual('headUuid', "resourceUuid")
45             .addEqual('linkClass', LinkClass.STAR);
46         linkService.list = list;
47         linkService.delete = jest.fn().mockReturnValue(Promise.resolve({ uuid: "linkUuid" }));
48         const favoriteService = new FavoriteService(linkService, groupService);
49
50         const newFavorite = await favoriteService.delete({ userUuid: "userUuid", resourceUuid: "resourceUuid" });
51
52         expect(list.mock.calls[0][0].filters.getFilters()).toEqual(filters.getFilters());
53         expect(linkService.delete).toHaveBeenCalledWith("linkUuid");
54         expect(newFavorite[0].uuid).toEqual("linkUuid");
55     });
56
57     it("lists favorite resources", async () => {
58         const list = jest.fn().mockReturnValue(Promise.resolve({ items: [{ headUuid: "headUuid" }] }));
59         const listFilters = FilterBuilder
60             .create()
61             .addEqual('tailUuid', "userUuid")
62             .addEqual('linkClass', LinkClass.STAR);
63         const contents = jest.fn().mockReturnValue(Promise.resolve({ items: [{ uuid: "resourceUuid" }] }));
64         const contentFilters = FilterBuilder.create().addIn('uuid', ["headUuid"]);
65         linkService.list = list;
66         groupService.contents = contents;
67         const favoriteService = new FavoriteService(linkService, groupService);
68
69         const favorites = await favoriteService.list("userUuid");
70
71         expect(list.mock.calls[0][0].filters.getFilters()).toEqual(listFilters.getFilters());
72         expect(contents.mock.calls[0][0]).toEqual("userUuid");
73         expect(contents.mock.calls[0][1].filters.getFilters()).toEqual(contentFilters.getFilters());
74         expect(favorites).toEqual({ items: [{ uuid: "resourceUuid" }] });
75     });
76
77     it("checks if resources are present in favorites", async () => {
78         const list = jest.fn().mockReturnValue(Promise.resolve({ items: [{ headUuid: "foo" }] }));
79         const listFilters = FilterBuilder
80             .create()
81             .addIn("headUuid", ["foo", "oof"])
82             .addEqual("tailUuid", "userUuid")
83             .addEqual("linkClass", LinkClass.STAR);
84         linkService.list = list;
85         const favoriteService = new FavoriteService(linkService, groupService);
86
87         const favorites = await favoriteService.checkPresenceInFavorites("userUuid", ["foo", "oof"]);
88
89         expect(list.mock.calls[0][0].filters.getFilters()).toEqual(listFilters.getFilters());
90         expect(favorites).toEqual({ foo: true, oof: false });
91     });
92
93 });