From: Lucas Di Pentima Date: Mon, 4 Apr 2022 20:03:05 +0000 (-0300) Subject: 18966: Changes back collectionService.get() to use the GET HTTP method. X-Git-Tag: 2.4.0^2~2 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/c1c27e7fe3cbe068e939994e20b26a78348597c6 18966: Changes back collectionService.get() to use the GET HTTP method. To avoid getting the manifest text, we hardcode the default list of selected fields instead of using the LIST request. This makes the code detect 404s correctly. Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima --- diff --git a/src/models/collection.ts b/src/models/collection.ts index 3effe672..9a5d2ee2 100644 --- a/src/models/collection.ts +++ b/src/models/collection.ts @@ -28,6 +28,40 @@ export interface CollectionResource extends TrashableResource, ResourceWithPrope fileSizeTotal: number; } +// We exclude 'manifestText' and 'unsignedManifestText' from the default +export const defaultCollectionSelectedFields = [ + 'name', + 'description', + 'portableDataHash', + 'replicationDesired', + 'replicationConfirmed', + 'replicationConfirmedAt', + 'storageClassesDesired', + 'storageClassesConfirmed', + 'storageClassesConfirmedAt', + 'currentVersionUuid', + 'version', + 'preserveVersion', + 'fileCount', + 'fileSizeTotal', + // ResourceWithProperties field + 'properties', + // TrashableResource fields + 'trashAt', + 'deleteAt', + 'isTrashed', + // Resource fields + 'uuid', + 'ownerUuid', + 'createdAt', + 'modifiedByClientUuid', + 'modifiedByUserUuid', + 'modifiedAt', + 'href', + 'kind', + 'etag', +]; + export const getCollectionUrl = (uuid: string) => { return `/collections/${uuid}`; }; diff --git a/src/services/collection-service/collection-service.test.ts b/src/services/collection-service/collection-service.test.ts index b759fd1a..61068369 100644 --- a/src/services/collection-service/collection-service.test.ts +++ b/src/services/collection-service/collection-service.test.ts @@ -4,7 +4,8 @@ import axios, { AxiosInstance } from 'axios'; import MockAdapter from 'axios-mock-adapter'; -import { CollectionResource } from 'models/collection'; +import { snakeCase } from 'lodash'; +import { CollectionResource, defaultCollectionSelectedFields } from 'models/collection'; import { AuthService } from '../auth-service/auth-service'; import { CollectionService } from './collection-service'; @@ -31,17 +32,16 @@ describe('collection-service', () => { }); describe('get', () => { - it('should make a list request with uuid filtering', async () => { + it('should make a request with default selected fields', async () => { serverApi.get = jest.fn(() => Promise.resolve( { data: { items: [{}] } } )); const uuid = 'zzzzz-4zz18-0123456789abcde' await collectionService.get(uuid); expect(serverApi.get).toHaveBeenCalledWith( - '/collections', { + `/collections/${uuid}`, { params: { - filters: `[["uuid","=","zzzzz-4zz18-0123456789abcde"]]`, - include_old_versions: true, + select: JSON.stringify(defaultCollectionSelectedFields.map(snakeCase)), }, } ); @@ -54,10 +54,8 @@ describe('collection-service', () => { const uuid = 'zzzzz-4zz18-0123456789abcde' await collectionService.get(uuid, undefined, ['manifestText']); expect(serverApi.get).toHaveBeenCalledWith( - '/collections', { + `/collections/${uuid}`, { params: { - filters: `[["uuid","=","zzzzz-4zz18-0123456789abcde"]]`, - include_old_versions: true, select: `["manifest_text"]` }, } diff --git a/src/services/collection-service/collection-service.ts b/src/services/collection-service/collection-service.ts index 0bddc82b..857828c2 100644 --- a/src/services/collection-service/collection-service.ts +++ b/src/services/collection-service/collection-service.ts @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { CollectionResource } from "models/collection"; +import { CollectionResource, defaultCollectionSelectedFields } from "models/collection"; import { AxiosInstance } from "axios"; import { CollectionFile, CollectionDirectory } from "models/collection-file"; import { WebDAV } from "common/webdav"; @@ -11,8 +11,6 @@ import { extractFilesData } from "./collection-service-files-response"; import { TrashableResourceService } from "services/common-service/trashable-resource-service"; import { ApiActions } from "services/api/api-actions"; import { customEncodeURI } from "common/url"; -import { FilterBuilder } from "services/api/filter-builder"; -import { ListArguments } from "services/common-service/common-service"; import { Session } from "models/session"; export type UploadProgress = (fileId: number, loaded: number, total: number, currentTime: number) => void; @@ -33,19 +31,8 @@ export class CollectionService extends TrashableResourceService) { diff --git a/src/services/common-service/common-service.ts b/src/services/common-service/common-service.ts index ddaf2ab0..f16a2024 100644 --- a/src/services/common-service/common-service.ts +++ b/src/services/common-service/common-service.ts @@ -117,7 +117,13 @@ export class CommonService { get(uuid: string, showErrors?: boolean, select?: string[], session?: Session) { this.validateUuid(uuid); - const cfg: AxiosRequestConfig = {}; + const cfg: AxiosRequestConfig = { + params: { + select: select + ? `[${select.map(snakeCase).map(s => `"${s}"`).join(',')}]` + : undefined + } + }; if (session) { cfg.baseURL = session.baseUrl; cfg.headers = { 'Authorization': 'Bearer ' + session.token }; @@ -125,7 +131,7 @@ export class CommonService { return CommonService.defaultResponse( this.serverApi - .get(`/${this.resourceType}/${uuid}`, session ? cfg : undefined), + .get(`/${this.resourceType}/${uuid}`, cfg), this.actions, true, // mapKeys showErrors