+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import axios, { AxiosInstance } from "axios";
+// import MockAdapter from 'axios-mock-adapter';
+import { ApiClientAuthorizationService } from "./api-client-authorization-service";
+
+
+describe('ApiClientAuthorizationService', () => {
+ let apiClientAuthorizationService: ApiClientAuthorizationService;
+ let serverApi: AxiosInstance;
+ let actions;
+
+
+ beforeEach(() => {
+ serverApi = axios.create();
+ actions = {
+ progressFn: jest.fn(),
+ } as any;
+ apiClientAuthorizationService = new ApiClientAuthorizationService(serverApi, actions);
+ });
+
+ describe('createCollectionSharingToken', () => {
+ it('should return error on invalid collection uuid', () => {
+ expect(() => apiClientAuthorizationService.createCollectionSharingToken("foo")).toThrowError("UUID foo is not a collection");
+ });
+
+ it('should make a create request with proper scopes', async () => {
+ serverApi.post = jest.fn(() => Promise.resolve(
+ { data: { uuid: 'zzzzz-4zz18-0123456789abcde' } }
+ ));
+ const uuid = 'zzzzz-4zz18-0123456789abcde'
+ await apiClientAuthorizationService.createCollectionSharingToken(uuid);
+ expect(serverApi.post).toHaveBeenCalledWith(
+ '/api_client_authorizations', {
+ scopes: [
+ `GET /arvados/v1/collections/${uuid}`,
+ `GET /arvados/v1/collections/${uuid}/`,
+ `GET /arvados/v1/keep_services/accessible`,
+ ]
+ }
+ );
+ });
+ });
+
+ describe('listCollectionSharingToken', () => {
+ it('should return error on invalid collection uuid', () => {
+ expect(() => apiClientAuthorizationService.listCollectionSharingTokens("foo")).toThrowError("UUID foo is not a collection");
+ });
+
+ it('should make a list request with proper scopes', async () => {
+ serverApi.get = jest.fn(() => Promise.resolve(
+ { data: { items: [{}] } }
+ ));
+ const uuid = 'zzzzz-4zz18-0123456789abcde'
+ await apiClientAuthorizationService.listCollectionSharingTokens(uuid);
+ expect(serverApi.get).toHaveBeenCalledWith(
+ `/api_client_authorizations`, {params: {
+ filters: '[["scopes","=","' + JSON.stringify([
+ `GET /arvados/v1/collections/${uuid}`,
+ `GET /arvados/v1/collections/${uuid}/`,
+ `GET /arvados/v1/keep_services/accessible`,
+ ]) + '"]]',
+ select: undefined,
+ }}
+ );
+ });
+ });
+});
\ No newline at end of file