[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