[ARVADOS-WORKBENCH2] updated: 1.1.4-348-g68ac0f4

Git user git at public.curoverse.com
Mon Jul 23 10:57:05 EDT 2018


Summary of changes:
 src/common/api/common-resource-service.test.ts     | 11 +++-
 .../favorite-service/favorite-service.test.ts      | 77 ++++++++++++++++++++++
 2 files changed, 87 insertions(+), 1 deletion(-)
 create mode 100644 src/services/favorite-service/favorite-service.test.ts

       via  68ac0f45eef3ed971615fb0a0849c950b74d7e06 (commit)
      from  bccb9ca5151f041d8c8b73098a3e1874023e3efa (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 68ac0f45eef3ed971615fb0a0849c950b74d7e06
Author: Michal Klobukowski <michal.klobukowski at contractors.roche.com>
Date:   Mon Jul 23 16:56:48 2018 +0200

    Create util for mocking resource services, create tests for FavoriteService
    
    Feature #13840
    
    Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski at contractors.roche.com>

diff --git a/src/common/api/common-resource-service.test.ts b/src/common/api/common-resource-service.test.ts
index 8346624..d909c09 100644
--- a/src/common/api/common-resource-service.test.ts
+++ b/src/common/api/common-resource-service.test.ts
@@ -3,8 +3,17 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import { CommonResourceService } from "./common-resource-service";
-import axios from "axios";
+import axios, { AxiosInstance } from "axios";
 import MockAdapter from "axios-mock-adapter";
+import { Resource } from "../../models/resource";
+
+export const mockResourceService = <R extends Resource, C extends CommonResourceService<R>>(Service: new (client: AxiosInstance) => C) => {
+    const axiosInstance = axios.create();
+    const axiosMock = new MockAdapter(axiosInstance);
+    const service = new Service(axiosInstance);
+    Object.keys(service).map(key => service[key] = jest.fn());
+    return service;
+};
 
 describe("CommonResourceService", () => {
     const axiosInstance = axios.create();
diff --git a/src/services/favorite-service/favorite-service.test.ts b/src/services/favorite-service/favorite-service.test.ts
new file mode 100644
index 0000000..7e74b52
--- /dev/null
+++ b/src/services/favorite-service/favorite-service.test.ts
@@ -0,0 +1,77 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import { LinkService } from "../link-service/link-service";
+import { GroupsService, GroupContentsResource } 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";
+
+describe("FavoriteService", () => {
+
+    let linkService: LinkService;
+    let groupService: GroupsService;
+
+    beforeEach(() => {
+        linkService = mockResourceService(LinkService);
+        groupService = mockResourceService(GroupsService);
+    });
+
+    it("marks resource as favorite", async () => {
+        linkService.create = jest.fn().mockReturnValue(Promise.resolve({ uuid: "newUuid" }));
+        const favoriteService = new FavoriteService(linkService, groupService);
+
+        const newFavorite = await favoriteService.create({ userUuid: "userUuid", resourceUuid: "resourceUuid" });
+
+        expect(linkService.create).toHaveBeenCalledWith({
+            ownerUuid: "userUuid",
+            tailUuid: "userUuid",
+            headUuid: "resourceUuid",
+            linkClass: LinkClass.STAR,
+            name: "resourceUuid"
+        });
+        expect(newFavorite.uuid).toEqual("newUuid");
+
+    });
+
+    it("unmarks resource as favorite", async () => {
+        const list = jest.fn().mockReturnValue(Promise.resolve({ items: [{ uuid: "linkUuid" }] }));
+        const filters = FilterBuilder
+            .create<LinkResource>()
+            .addEqual('tailUuid', "userUuid")
+            .addEqual('headUuid', "resourceUuid")
+            .addEqual('linkClass', LinkClass.STAR);
+        linkService.list = list;
+        linkService.delete = jest.fn().mockReturnValue(Promise.resolve({ uuid: "linkUuid" }));
+        const favoriteService = new FavoriteService(linkService, groupService);
+
+        const newFavorite = await favoriteService.delete({ userUuid: "userUuid", resourceUuid: "resourceUuid" });
+
+        expect(list.mock.calls[0][0].filters.getFilters()).toEqual(filters.getFilters());
+        expect(linkService.delete).toHaveBeenCalledWith("linkUuid");
+        expect(newFavorite[0].uuid).toEqual("linkUuid");
+    });
+
+    it("lists favorite resources", async () => {
+        const list = jest.fn().mockReturnValue(Promise.resolve({ items: [{ headUuid: "headUuid" }] }));
+        const listFilters = FilterBuilder
+            .create<LinkResource>()
+            .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"]);
+        linkService.list = list;
+        groupService.contents = contents;
+        const favoriteService = new FavoriteService(linkService, groupService);
+
+        const favorites = await favoriteService.list("userUuid");
+
+        expect(list.mock.calls[0][0].filters.getFilters()).toEqual(listFilters.getFilters());
+        expect(contents.mock.calls[0][0]).toEqual("userUuid");
+        expect(contents.mock.calls[0][1].filters.getFilters()).toEqual(contentFilters.getFilters());
+        expect(favorites).toEqual({ items: [{ uuid: "resourceUuid" }] });
+    });
+
+});

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list