Simplify order and filter builder
[arvados-workbench2.git] / src / services / favorite-service / favorite-service.test.ts
index 7e74b52cff447007a8e349eff9b0bc8a0a0a1a2f..47211fed1ff78b30c5c00c37208c8a410d4fc21a 100644 (file)
@@ -3,11 +3,11 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import { LinkService } from "../link-service/link-service";
-import { GroupsService, GroupContentsResource } from "../groups-service/groups-service";
+import { GroupsService } from "../groups-service/groups-service";
 import { FavoriteService } from "./favorite-service";
-import { LinkClass, LinkResource } from "../../models/link";
-import { mockResourceService } from "../../common/api/common-resource-service.test";
-import { FilterBuilder } from "../../common/api/filter-builder";
+import { LinkClass } from "~/models/link";
+import { mockResourceService } from "~/common/api/common-resource-service.test";
+import { FilterBuilder } from "~/common/api/filter-builder";
 
 describe("FavoriteService", () => {
 
@@ -23,14 +23,14 @@ describe("FavoriteService", () => {
         linkService.create = jest.fn().mockReturnValue(Promise.resolve({ uuid: "newUuid" }));
         const favoriteService = new FavoriteService(linkService, groupService);
 
-        const newFavorite = await favoriteService.create({ userUuid: "userUuid", resourceUuid: "resourceUuid" });
+        const newFavorite = await favoriteService.create({ userUuid: "userUuid", resource: { uuid: "resourceUuid", name: "resource" } });
 
         expect(linkService.create).toHaveBeenCalledWith({
             ownerUuid: "userUuid",
             tailUuid: "userUuid",
             headUuid: "resourceUuid",
             linkClass: LinkClass.STAR,
-            name: "resourceUuid"
+            name: "resource"
         });
         expect(newFavorite.uuid).toEqual("newUuid");
 
@@ -38,8 +38,7 @@ describe("FavoriteService", () => {
 
     it("unmarks resource as favorite", async () => {
         const list = jest.fn().mockReturnValue(Promise.resolve({ items: [{ uuid: "linkUuid" }] }));
-        const filters = FilterBuilder
-            .create<LinkResource>()
+        const filters = new FilterBuilder()
             .addEqual('tailUuid', "userUuid")
             .addEqual('headUuid', "resourceUuid")
             .addEqual('linkClass', LinkClass.STAR);
@@ -56,12 +55,11 @@ describe("FavoriteService", () => {
 
     it("lists favorite resources", async () => {
         const list = jest.fn().mockReturnValue(Promise.resolve({ items: [{ headUuid: "headUuid" }] }));
-        const listFilters = FilterBuilder
-            .create<LinkResource>()
+        const listFilters = new FilterBuilder()
             .addEqual('tailUuid', "userUuid")
             .addEqual('linkClass', LinkClass.STAR);
         const contents = jest.fn().mockReturnValue(Promise.resolve({ items: [{ uuid: "resourceUuid" }] }));
-        const contentFilters = FilterBuilder.create<GroupContentsResource>().addIn('uuid', ["headUuid"]);
+        const contentFilters = new FilterBuilder().addIn('uuid', ["headUuid"]);
         linkService.list = list;
         groupService.contents = contents;
         const favoriteService = new FavoriteService(linkService, groupService);
@@ -74,4 +72,19 @@ describe("FavoriteService", () => {
         expect(favorites).toEqual({ items: [{ uuid: "resourceUuid" }] });
     });
 
+    it("checks if resources are present in favorites", async () => {
+        const list = jest.fn().mockReturnValue(Promise.resolve({ items: [{ headUuid: "foo" }] }));
+        const listFilters = new FilterBuilder()
+            .addIn("headUuid", ["foo", "oof"])
+            .addEqual("tailUuid", "userUuid")
+            .addEqual("linkClass", LinkClass.STAR);
+        linkService.list = list;
+        const favoriteService = new FavoriteService(linkService, groupService);
+
+        const favorites = await favoriteService.checkPresenceInFavorites("userUuid", ["foo", "oof"]);
+
+        expect(list.mock.calls[0][0].filters.getFilters()).toEqual(listFilters.getFilters());
+        expect(favorites).toEqual({ foo: true, oof: false });
+    });
+
 });