diff --git a/package.json b/package.json index 5ad2f8a055..a0d868961f 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "@box/types": "^2.1.8", "@box/unified-share-modal": "^2.15.16", "@box/user-selector": "^1.77.13", - "@box/uploads-manager": "^1.15.0", + "@box/uploads-manager": "^1.17.2", "@cfaester/enzyme-adapter-react-18": "^0.8.0", "@chromatic-com/storybook": "^4.0.1", "@commitlint/cli": "^19.8.0", @@ -314,7 +314,7 @@ "@box/types": "^2.1.8", "@box/unified-share-modal": "^2.15.16", "@box/user-selector": "^1.77.13", - "@box/uploads-manager": "^1.15.0", + "@box/uploads-manager": "^1.17.2", "@hapi/address": "^2.1.4", "@tanstack/react-virtual": "^3.13.12", "axios": "^0.32.0", diff --git a/src/api/uploads/PlainUpload.js b/src/api/uploads/PlainUpload.js index 3acb849a0a..cadb687366 100644 --- a/src/api/uploads/PlainUpload.js +++ b/src/api/uploads/PlainUpload.js @@ -73,10 +73,10 @@ class PlainUpload extends BaseUpload { if (this.fileId) { uploadUrl = uploadUrl.replace('content', `${this.fileId}/content`); } + } - if (this.fields) { - uploadUrl = updateQueryParameters(uploadUrl, { fields: this.fields.toString() }); - } + if (this.fields) { + uploadUrl = updateQueryParameters(uploadUrl, { fields: this.fields.toString() }); } const attributes = JSON.stringify({ diff --git a/src/api/uploads/__tests__/PlainUpload.test.js b/src/api/uploads/__tests__/PlainUpload.test.js index 451381b48d..12ea7d0ec1 100644 --- a/src/api/uploads/__tests__/PlainUpload.test.js +++ b/src/api/uploads/__tests__/PlainUpload.test.js @@ -174,6 +174,27 @@ describe('api/uploads/PlainUpload', () => { }); }); + test('should append fields query parameter to upload URL when fields are provided', () => { + upload.isDestroyed = jest.fn().mockReturnValueOnce(false); + upload.computeSHA1 = jest.fn().mockReturnValueOnce(Promise.resolve('somehash')); + upload.file = { + name: 'warlock', + }; + upload.folderId = '123'; + upload.fields = ['content_created_at', 'version_number']; + upload.xhr = { + uploadFile: jest.fn(), + }; + + return upload.preflightSuccessHandler({ data: {} }).then(() => { + expect(upload.xhr.uploadFile).toHaveBeenCalledWith( + expect.objectContaining({ + url: `${upload.uploadHost}/api/2.0/files/content?fields=content_created_at%2Cversion_number`, + }), + ); + }); + }); + test('should upload with no Content-MD5 hash if hashing fails', () => { upload.isDestroyed = jest.fn().mockReturnValueOnce(false); upload.computeSHA1 = jest.fn().mockReturnValueOnce(Promise.resolve('')); diff --git a/src/elements/content-uploader/utils/__tests__/mapToModernizedUploadItem.test.ts b/src/elements/content-uploader/utils/__tests__/mapToModernizedUploadItem.test.ts index cc5ac9aef4..0f6b08c981 100644 --- a/src/elements/content-uploader/utils/__tests__/mapToModernizedUploadItem.test.ts +++ b/src/elements/content-uploader/utils/__tests__/mapToModernizedUploadItem.test.ts @@ -30,6 +30,7 @@ describe('mapToModernizedUploadItem()', () => { status: 'uploading', isFolder: undefined, errorMessage: undefined, + versionNumber: undefined, }); }); @@ -63,6 +64,22 @@ describe('mapToModernizedUploadItem()', () => { expect(result.extension).toBe(''); expect(result.progress).toBe(0); }); + + test('forwards versionNumber from item.boxFile.version_number', () => { + const result = mapToModernizedUploadItem( + buildLegacyItem({ + status: STATUS_COMPLETE, + boxFile: { version_number: '2' }, + }), + '0', + ); + expect(result.versionNumber).toBe('2'); + }); + + test('leaves versionNumber undefined when boxFile is missing', () => { + const result = mapToModernizedUploadItem(buildLegacyItem({ status: STATUS_IN_PROGRESS }), '0'); + expect(result.versionNumber).toBeUndefined(); + }); }); describe('mapToModernizedUploadItems()', () => { diff --git a/src/elements/content-uploader/utils/mapToModernizedUploadItem.ts b/src/elements/content-uploader/utils/mapToModernizedUploadItem.ts index 95d4d3f6bc..a2e8a28111 100644 --- a/src/elements/content-uploader/utils/mapToModernizedUploadItem.ts +++ b/src/elements/content-uploader/utils/mapToModernizedUploadItem.ts @@ -44,6 +44,7 @@ export function mapToModernizedUploadItem(item: LegacyUploadItem | FolderUploadI status: STATUS_MAP[item.status] ?? 'pending', isFolder: item.isFolder, errorMessage, + versionNumber: item.boxFile?.version_number, }; } diff --git a/yarn.lock b/yarn.lock index f0803fa965..7d9aecf9c2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1242,10 +1242,10 @@ resolved "https://registry.yarnpkg.com/@box/unified-share-modal/-/unified-share-modal-2.15.16.tgz#49deb182bf1ac7f1ffe4bae713ab12ff2822533e" integrity sha512-Y1bE+JWDQm058lT+AcsfwJqK3WvGAsZj6ro9PLvejJZ1LxzexvOzyQFkM0sL4Kmj/93k2VEKoAJ/onBgheAJoQ== -"@box/uploads-manager@^1.15.0": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@box/uploads-manager/-/uploads-manager-1.15.0.tgz#59e68734bb2dd0c84b356e3270f7d41e964dcbc9" - integrity sha512-pvz8wsZbhfoDK6tPfYl3Yo+48++C9Rcx6NxNVQxeq0dTGCjQeP4z0nLPvEaAGOUDI6osyF31pKSTDhwBSQsM7g== +"@box/uploads-manager@^1.17.2": + version "1.17.2" + resolved "https://registry.yarnpkg.com/@box/uploads-manager/-/uploads-manager-1.17.2.tgz#e7640ca60c0b1eac6fda1ab6dc5d8269a124eb69" + integrity sha512-pVXoPDFmAYx/ErD8+kP3yi4/EOG331tWl4yiO7cEDE1ia5X6mmKGp3va5twJfiqmTmnxBJJZAFEBa4QYb5yV5Q== "@box/user-selector@^1.77.13": version "1.77.13"