1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
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";
12 describe("FavoriteService", () => {
14 let linkService: LinkService;
15 let groupService: GroupsService;
18 linkService = mockResourceService(LinkService);
19 groupService = mockResourceService(GroupsService);
22 it("marks resource as favorite", async () => {
23 linkService.create = jest.fn().mockReturnValue(Promise.resolve({ uuid: "newUuid" }));
24 const favoriteService = new FavoriteService(linkService, groupService);
26 const newFavorite = await favoriteService.create({ userUuid: "userUuid", resourceUuid: "resourceUuid" });
28 expect(linkService.create).toHaveBeenCalledWith({
29 ownerUuid: "userUuid",
31 headUuid: "resourceUuid",
32 linkClass: LinkClass.STAR,
35 expect(newFavorite.uuid).toEqual("newUuid");
39 it("unmarks resource as favorite", async () => {
40 const list = jest.fn().mockReturnValue(Promise.resolve({ items: [{ uuid: "linkUuid" }] }));
41 const filters = FilterBuilder
42 .create<LinkResource>()
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);
50 const newFavorite = await favoriteService.delete({ userUuid: "userUuid", resourceUuid: "resourceUuid" });
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");
57 it("lists favorite resources", async () => {
58 const list = jest.fn().mockReturnValue(Promise.resolve({ items: [{ headUuid: "headUuid" }] }));
59 const listFilters = FilterBuilder
60 .create<LinkResource>()
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<GroupContentsResource>().addIn('uuid', ["headUuid"]);
65 linkService.list = list;
66 groupService.contents = contents;
67 const favoriteService = new FavoriteService(linkService, groupService);
69 const favorites = await favoriteService.list("userUuid");
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" }] });