diff --git a/docs/core/services/nodes-api.service.md b/docs/core/services/nodes-api.service.md
index ce6ef9582d..b9b9d89110 100644
--- a/docs/core/services/nodes-api.service.md
+++ b/docs/core/services/nodes-api.service.md
@@ -89,6 +89,15 @@ Accesses and manipulates ACS document nodes using their node IDs.
- _nodeId:_ `string` - ID of the target node
- _options:_ `{ includeSource?: boolean; } & NodesIncludeQuery & ContentPagingQuery` - Optional parameters supported by JS-API
- **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`Hold[]`](../../../lib/js-api/src/api/gs-core-rest-api/docs/Hold.md)`>` - List of assigned holds
+- **initiateFolderSizeCalculation**(nodeId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`JobIdBodyEntry`](../../../lib/js-api/src/api/content-rest-api/docs/NodesApi.md#jobidbodyentry)`>`
+ Initiate a new request to calculate folder size.
+ - _nodeId:_ `string` - ID of the target node
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`JobIdBodyEntry`](../../../lib/js-api/src/api/content-rest-api/docs/NodesApi.md#jobidbodyentry)`>` - Job id which can be used to track request status
+- **getFolderSizeInfo**(nodeId: `string`, jobId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SizeDetailsEntry`](../../../lib/js-api/src/api/content-rest-api/docs/NodesApi.md#sizedetailsentry)`>`
+ Gets the size of a folder.
+ - _nodeId:_ `string` - ID of the target node
+ - _jobId:_ `string` - ID of the job started by the `initiateFolderSizeCalculation` request
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SizeDetailsEntry`](../../../lib/js-api/src/api/content-rest-api/docs/NodesApi.md#sizedetailsentry)`>` - Details of the folder
## Details
diff --git a/lib/content-services/src/lib/common/services/nodes-api.service.spec.ts b/lib/content-services/src/lib/common/services/nodes-api.service.spec.ts
new file mode 100644
index 0000000000..70f31fb41a
--- /dev/null
+++ b/lib/content-services/src/lib/common/services/nodes-api.service.spec.ts
@@ -0,0 +1,73 @@
+/*!
+ * @license
+ * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { TestBed } from '@angular/core/testing';
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { CoreTestingModule, RedirectAuthService } from '@alfresco/adf-core';
+import { EMPTY, firstValueFrom, of } from 'rxjs';
+import { JobIdBodyEntry, SizeDetails, SizeDetailsEntry } from '@alfresco/js-api';
+import { NodesApiService } from './nodes-api.service';
+import { AlfrescoApiService } from '../../services/alfresco-api.service';
+import { AlfrescoApiServiceMock } from '../../mock/alfresco-api.service.mock';
+
+const fakeInitiateFolderSizeResponse: JobIdBodyEntry = {
+ entry: {
+ jobId: 'fake-job-id'
+ }
+};
+
+const fakeFolderSizeResponse: SizeDetailsEntry = {
+ entry: {
+ jobId: 'fake-job-id',
+ calculatedAt: new Date().toString(),
+ sizeInBytes: '1234',
+ numberOfFiles: 1,
+ status: SizeDetails.StatusEnum.COMPLETE,
+ id: 'fake-id'
+ }
+};
+
+describe('NodesApiService', () => {
+ let nodesApiService: NodesApiService;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ imports: [HttpClientTestingModule, CoreTestingModule],
+ providers: [
+ NodesApiService,
+ { provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
+ { provide: RedirectAuthService, useValue: { onLogin: EMPTY, onTokenReceived: of(), init: () => {} } }
+ ]
+ });
+
+ nodesApiService = TestBed.inject(NodesApiService);
+ });
+
+ it('should call initiateFolderSizeCalculation api with nodeId parameter', async () => {
+ spyOn(nodesApiService.nodesApi, 'initiateFolderSizeCalculation').and.returnValue(Promise.resolve(fakeInitiateFolderSizeResponse));
+ await firstValueFrom(nodesApiService.initiateFolderSizeCalculation('fake-node-id'));
+
+ expect(nodesApiService.nodesApi.initiateFolderSizeCalculation).toHaveBeenCalledWith('fake-node-id');
+ });
+
+ it('should call getFolderSizeInfo api with nodeId and jobId parameter', async () => {
+ spyOn(nodesApiService.nodesApi, 'getFolderSizeInfo').and.returnValue(Promise.resolve(fakeFolderSizeResponse));
+ await firstValueFrom(nodesApiService.getFolderSizeInfo('fake-node-id', 'fake-job-id'));
+
+ expect(nodesApiService.nodesApi.getFolderSizeInfo).toHaveBeenCalledWith('fake-node-id', 'fake-job-id');
+ });
+});
diff --git a/lib/content-services/src/lib/common/services/nodes-api.service.ts b/lib/content-services/src/lib/common/services/nodes-api.service.ts
index 0d49083aea..01a896fbcf 100644
--- a/lib/content-services/src/lib/common/services/nodes-api.service.ts
+++ b/lib/content-services/src/lib/common/services/nodes-api.service.ts
@@ -16,7 +16,18 @@
*/
import { UserPreferencesService } from '@alfresco/adf-core';
-import { ContentPagingQuery, Node, NodeAssignedHold, NodeEntry, NodePaging, NodesApi, NodesIncludeQuery, TrashcanApi } from '@alfresco/js-api';
+import {
+ ContentPagingQuery,
+ Node,
+ NodeAssignedHold,
+ NodeEntry,
+ NodePaging,
+ NodesApi,
+ NodesIncludeQuery,
+ TrashcanApi,
+ SizeDetailsEntry,
+ JobIdBodyEntry
+} from '@alfresco/js-api';
import { Injectable } from '@angular/core';
import { from, Observable, Subject, throwError } from 'rxjs';
import { catchError, map } from 'rxjs/operators';
@@ -246,6 +257,27 @@ export class NodesApiService {
return this.createNodeInsideRoot(name || this.randomNodeName(), nodeType, properties, path);
}
+ /**
+ * Initiate a new request to calculate folder size.
+ *
+ * @param nodeId Node Id
+ * @returns The job id which can be used to track request status
+ */
+ initiateFolderSizeCalculation(nodeId: string): Observable {
+ return from(this.nodesApi.initiateFolderSizeCalculation(nodeId));
+ }
+
+ /**
+ * Gets the size of a folder.
+ *
+ * @param nodeId Node Id
+ * @param jobId Job Id
+ * @returns Folder details
+ */
+ getFolderSizeInfo(nodeId: string, jobId: string): Observable {
+ return from(this.nodesApi.getFolderSizeInfo(nodeId, jobId));
+ }
+
private randomNodeName(): string {
return `node_${Date.now()}`;
}
diff --git a/lib/core/src/lib/dialogs/dialog/dialog.component.html b/lib/core/src/lib/dialogs/dialog/dialog.component.html
index e87b915292..a4baa769de 100644
--- a/lib/core/src/lib/dialogs/dialog/dialog.component.html
+++ b/lib/core/src/lib/dialogs/dialog/dialog.component.html
@@ -22,6 +22,7 @@
*ngIf="!isCloseButtonHidden"
mat-icon-button
mat-dialog-close
+ title="{{'CLOSE' | translate }}"
data-automation-id="adf-dialog-close-button"
>
close
diff --git a/lib/js-api/src/api/content-rest-api/api/nodes.api.ts b/lib/js-api/src/api/content-rest-api/api/nodes.api.ts
index 4f2129d30e..7fe53721c8 100644
--- a/lib/js-api/src/api/content-rest-api/api/nodes.api.ts
+++ b/lib/js-api/src/api/content-rest-api/api/nodes.api.ts
@@ -28,7 +28,9 @@ import {
NodeBodyMove,
NodeBodyUpdate,
NodeChildAssociationPaging,
- NodeEntry
+ NodeEntry,
+ SizeDetailsEntry,
+ JobIdBodyEntry
} from '../model';
import { BaseApi } from './base.api';
import { throwIfNotDefined } from '../../../assert';
@@ -960,4 +962,50 @@ export class NodesApi extends BaseApi {
returnType: DirectAccessUrlEntry
});
}
+
+ /**
+ * Initiate a new request to calculate folder size.
+ *
+ * **Note:** this endpoint is available in Alfresco 25.1.0 and newer versions.
+ * @param nodeId Node Id
+ * @returns The job id which can be used to track request status
+ */
+ initiateFolderSizeCalculation(nodeId: string): Promise {
+ throwIfNotDefined(nodeId, 'nodeId');
+
+ const pathParams = {
+ nodeId
+ };
+
+ return this.post({
+ path: '/nodes/{nodeId}/size-details',
+ pathParams,
+ returnType: JobIdBodyEntry
+ });
+ }
+
+ /**
+ * Gets the size of a folder.
+ *
+ * **Note:** this endpoint is available in Alfresco 25.1.0 and newer versions.
+ * @param nodeId Node Id
+ * @param jobId Job Id
+ * @returns Folder details
+ */
+
+ getFolderSizeInfo(nodeId: string, jobId: string): Promise {
+ throwIfNotDefined(nodeId, 'nodeId');
+ throwIfNotDefined(jobId, 'jobId');
+
+ const pathParams = {
+ nodeId,
+ jobId
+ };
+
+ return this.get({
+ path: 'nodes/{nodeId}/size-details/{jobId}',
+ pathParams,
+ returnType: SizeDetailsEntry
+ });
+ }
}
diff --git a/lib/js-api/src/api/content-rest-api/docs/NodesApi.md b/lib/js-api/src/api/content-rest-api/docs/NodesApi.md
index e760708db4..a2be171308 100644
--- a/lib/js-api/src/api/content-rest-api/docs/NodesApi.md
+++ b/lib/js-api/src/api/content-rest-api/docs/NodesApi.md
@@ -25,6 +25,8 @@ All URIs are relative to *https://localhost/alfresco/api/-default-/public/alfres
| [unlockNode](#unlockNode) | **POST** /nodes/{nodeId}/unlock | Unlock a node |
| [updateNode](#updateNode) | **PUT** /nodes/{nodeId} | Update a node |
| [updateNodeContent](#updateNodeContent) | **PUT** /nodes/{nodeId}/content | Update node content |
+| [initiateFolderSizeCalculation](#initiateFolderSizeCalculation) | **POST** /nodes/{nodeId}/size-details | Initiate a new request to calculate folder size |
+| [getFolderSizeInfo](#getFolderSizeInfo) | **GET** /nodes/{nodeId}/size-details/{jobId} | Gets the details of a folder |
## copyNode
@@ -1196,6 +1198,67 @@ nodesApi.updateNodeContent(``, contentBodyUpdate, opts).then((data) => {
console.log('API called successfully. Returned data: ' + data);
});
```
+## initiateFolderSizeCalculation
+
+Initiates a new request to calculate folder size.
+
+> this endpoint is available in **Alfresco 25.1.0** and newer versions.
+
+Initiates a request to calculate the size of the node with identifier **nodeId**.
+
+**Parameters**
+
+| Name | Type | Description |
+|-----------------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **nodeId** | string | The identifier of a node. |
+
+**Return type**: [JobIdBodyEntry](#JobIdBodyEntry)
+
+**Example**
+
+```javascript
+import {AlfrescoApi, NodesApi} from '@alfresco/js-api';
+
+const alfrescoApi = new AlfrescoApi(/*..*/);
+const nodesApi = new NodesApi(alfrescoApi);
+const contentBodyUpdate = {};
+const opts = {};
+
+nodesApi.initiateFolderSizeCalculation(``).then((data) => {
+ console.log('API called successfully. Returned data: ' + data);
+});
+```
+## getFolderSizeInfo
+
+Gets the size details of a folder
+
+> this endpoint is available in **Alfresco 25.1.0** and newer versions.
+
+Fetches the size details of folder with the identifier **nodeId**
+
+**Parameters**
+
+| Name | Type | Description |
+|------------|----------|------------------------------------------------------------------------------------|
+| **nodeId** | string | The identifier of a node. |
+| **jobId** | string | The identifier for the job which is calculating the currently selected node's size |
+
+**Return type**: [SizeDetailsEntry](#SizeDetailsEntry)
+
+**Example**
+
+```javascript
+import {AlfrescoApi, NodesApi} from '@alfresco/js-api';
+
+const alfrescoApi = new AlfrescoApi(/*..*/);
+const nodesApi = new NodesApi(alfrescoApi);
+const contentBodyUpdate = {};
+const opts = {};
+
+nodesApi.getFolderSizeInfo(``, ``).then((data) => {
+ console.log('API called successfully. Returned data: ' + data);
+});
+```
# Models
@@ -1409,6 +1472,39 @@ nodesApi.updateNodeContent(``, contentBodyUpdate, opts).then((data) => {
| isInheritanceEnabled | boolean |
| locallySet | [PermissionElement[]](PermissionElement.md) |
+# JobIdBodyEntry
+**Properties**
+| Name | Type |
+|-----------|-------------------------|
+| **entry** | [JobIdBody](#JobIdBody) |
+# JobIdBody
+
+**Properties**
+
+| Name | Type | Description | Notes |
+|-----------|--------|---------------------------------------------------------------------------------------|-------------------|
+| **jobId** | string | Id of the job that can be used to track the status of folder size calculation request | [default to null] |
+
+# SizeDetailsEntry
+
+**Properties**
+
+| Name | Type |
+|-----------|-----------------------------|
+| **entry** | [SizeDetails](#SizeDetails) |
+
+# SizeDetails
+
+**Properties**
+
+| Name | Type | Description | Notes |
+|-------------------|--------|-----------------------------------------------------------------------------|------------------|
+| **id** | string | Unique alphanumeric id unique to this response request | [default to null]|
+| **sizeInBytes** | string | Size of the folder in bytes | [default to null]|
+| **calculatedAt** | string | Timestamp of when the folder size was calculated | [default to null]|
+| **numberOfFiles** | number | Number of files present within the folder | [default to null]|
+| **status** | string | Status of the request. Can be 'NOT-INITIATED', 'IN-PROGRESS' or 'COMPLETED' | [default to null]|
+| **jobId** | string | The job ID which was used to track down the folder details | [default to null]|
diff --git a/lib/js-api/src/api/content-rest-api/model/index.ts b/lib/js-api/src/api/content-rest-api/model/index.ts
index b375236317..b8d8b81845 100644
--- a/lib/js-api/src/api/content-rest-api/model/index.ts
+++ b/lib/js-api/src/api/content-rest-api/model/index.ts
@@ -211,3 +211,7 @@ export * from './versionPagingList';
export * from './deletedNode';
export * from './nodeAssociation';
export * from './nodeChildAssociation';
+export * from './sizeDetails';
+export * from './sizeDetailsEntry';
+export * from './jobIdBody';
+export * from './jobIdBodyEntry';
diff --git a/lib/js-api/src/api/content-rest-api/model/jobIdBody.ts b/lib/js-api/src/api/content-rest-api/model/jobIdBody.ts
new file mode 100644
index 0000000000..1541418fda
--- /dev/null
+++ b/lib/js-api/src/api/content-rest-api/model/jobIdBody.ts
@@ -0,0 +1,24 @@
+/*!
+ * @license
+ * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export class JobIdBody {
+ jobId: string;
+
+ constructor(jobIdBody: JobIdBody) {
+ this.jobId = jobIdBody.jobId;
+ }
+}
diff --git a/lib/js-api/src/api/content-rest-api/model/jobIdBodyEntry.ts b/lib/js-api/src/api/content-rest-api/model/jobIdBodyEntry.ts
new file mode 100644
index 0000000000..41e817b585
--- /dev/null
+++ b/lib/js-api/src/api/content-rest-api/model/jobIdBodyEntry.ts
@@ -0,0 +1,29 @@
+/*!
+ * @license
+ * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { JobIdBody } from './jobIdBody';
+
+export class JobIdBodyEntry {
+ entry: JobIdBody;
+
+ constructor(input?: Partial) {
+ if (input) {
+ Object.assign(this, input);
+ this.entry = input.entry ? new JobIdBody(input.entry) : undefined;
+ }
+ }
+}
diff --git a/lib/js-api/src/api/content-rest-api/model/sizeDetails.ts b/lib/js-api/src/api/content-rest-api/model/sizeDetails.ts
new file mode 100644
index 0000000000..cc1a22371c
--- /dev/null
+++ b/lib/js-api/src/api/content-rest-api/model/sizeDetails.ts
@@ -0,0 +1,42 @@
+/*!
+ * @license
+ * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export class SizeDetails {
+ id: string;
+ sizeInBytes: string;
+ calculatedAt: string;
+ numberOfFiles: number;
+ status: SizeDetails.StatusEnum;
+ jobId: string;
+
+ constructor(entry: SizeDetails) {
+ this.id = entry.id;
+ this.sizeInBytes = entry.sizeInBytes;
+ this.calculatedAt = entry.calculatedAt;
+ this.numberOfFiles = entry.numberOfFiles;
+ this.status = entry.status;
+ this.jobId = entry.jobId;
+ }
+}
+export namespace SizeDetails {
+ export type StatusEnum = 'IN-PROGRESS' | 'COMPLETED' | 'NOT-INITIATED';
+ export const StatusEnum = {
+ IN_PROGRESS: 'IN-PROGRESS' as StatusEnum,
+ COMPLETE: 'COMPLETED' as StatusEnum,
+ NOT_INITIATED: 'NOT-INITIATED' as StatusEnum
+ };
+}
diff --git a/lib/js-api/src/api/content-rest-api/model/sizeDetailsEntry.ts b/lib/js-api/src/api/content-rest-api/model/sizeDetailsEntry.ts
new file mode 100644
index 0000000000..0f8fac85d5
--- /dev/null
+++ b/lib/js-api/src/api/content-rest-api/model/sizeDetailsEntry.ts
@@ -0,0 +1,29 @@
+/*!
+ * @license
+ * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { SizeDetails } from './sizeDetails';
+
+export class SizeDetailsEntry {
+ entry: SizeDetails;
+
+ constructor(input?: Partial) {
+ if (input) {
+ Object.assign(this, input);
+ this.entry = input.entry ? new SizeDetails(input.entry) : undefined;
+ }
+ }
+}
diff --git a/lib/js-api/test/content-services/nodeApi.spec.ts b/lib/js-api/test/content-services/nodeApi.spec.ts
index bf46b3f038..f6f9e96dfc 100644
--- a/lib/js-api/test/content-services/nodeApi.spec.ts
+++ b/lib/js-api/test/content-services/nodeApi.spec.ts
@@ -150,4 +150,59 @@ describe('Node', () => {
);
});
});
+
+ describe('FolderInformation', () => {
+ it('should return jobId on initiateFolderSizeCalculation API call if everything is ok', (done) => {
+ nodeMock.post200ResponseInitiateFolderSizeCalculation();
+
+ nodesApi.initiateFolderSizeCalculation('b4cff62a-664d-4d45-9302-98723eac1319').then((response) => {
+ assert.equal(response.entry.jobId, '5ade426e-8a04-4d50-9e42-6e8a041d50f3');
+ done();
+ });
+ });
+
+ it('should return 404 error on initiateFolderSizeCalculation API call if nodeId is not found', (done) => {
+ nodeMock.post404NodeIdNotFound();
+
+ nodesApi.initiateFolderSizeCalculation('b4cff62a-664d-4d45-9302-98723eac1319').then(
+ () => {},
+ (err) => {
+ const { error } = JSON.parse(err.response.text);
+ assert.equal(error.statusCode, 404);
+ assert.equal(error.errorKey, 'framework.exception.EntityNotFound');
+ assert.equal(error.briefSummary, '11207522 The entity with id: b4cff62a-664d-4d45-9302-98723eac1319 was not found');
+ done();
+ }
+ );
+ });
+
+ it('should return size details on getFolderSizeInfo API call if everything is ok', (done) => {
+ nodeMock.get200ResponseGetFolderSizeInfo();
+
+ nodesApi.getFolderSizeInfo('b4cff62a-664d-4d45-9302-98723eac1319', '5ade426e-8a04-4d50-9e42-6e8a041d50f3').then((response) => {
+ assert.equal(response.entry.id, '32e522f1-1f28-4ea3-a522-f11f284ea397');
+ assert.equal(response.entry.jobId, '5ade426e-8a04-4d50-9e42-6e8a041d50f3');
+ assert.equal(response.entry.sizeInBytes, 2689);
+ assert.equal(response.entry.numberOfFiles, 100);
+ assert.equal(response.entry.calculatedAt, '2024-12-20T12:02:23.989+0000');
+ assert.equal(response.entry.status, 'COMPLETED');
+ done();
+ });
+ });
+
+ it('should return 404 error on getFolderSizeInfo API call if jobId is not found', (done) => {
+ nodeMock.get404JobIdNotFound();
+
+ nodesApi.getFolderSizeInfo('b4cff62a-664d-4d45-9302-98723eac1319', '5ade426e-8a04-4d50-9e42-6e8a041d50f3').then(
+ () => {},
+ (err) => {
+ const { error } = JSON.parse(err.response.text);
+ assert.equal(error.statusCode, 404);
+ assert.equal(error.errorKey, 'jobId does not exist');
+ assert.equal(error.briefSummary, '11207212 jobId does not exist');
+ done();
+ }
+ );
+ });
+ });
});
diff --git a/lib/js-api/test/mockObjects/content-services/node.mock.ts b/lib/js-api/test/mockObjects/content-services/node.mock.ts
index d960b924e5..a47787c5a8 100644
--- a/lib/js-api/test/mockObjects/content-services/node.mock.ts
+++ b/lib/js-api/test/mockObjects/content-services/node.mock.ts
@@ -230,4 +230,63 @@ export class NodeMock extends BaseMock {
}
});
}
+
+ post200ResponseInitiateFolderSizeCalculation(): void {
+ nock(this.host, { encodedQueryParams: true })
+ .post('/alfresco/api/-default-/public/alfresco/versions/1/nodes/b4cff62a-664d-4d45-9302-98723eac1319/size-details')
+ .reply(200, {
+ entry: {
+ jobId: '5ade426e-8a04-4d50-9e42-6e8a041d50f3'
+ }
+ });
+ }
+
+ post404NodeIdNotFound(): void {
+ nock(this.host, { encodedQueryParams: true })
+ .post('/alfresco/api/-default-/public/alfresco/versions/1/nodes/b4cff62a-664d-4d45-9302-98723eac1319/size-details')
+ .reply(404, {
+ error: {
+ errorKey: 'framework.exception.EntityNotFound',
+ statusCode: 404,
+ briefSummary: '11207522 The entity with id: b4cff62a-664d-4d45-9302-98723eac1319 was not found',
+ stackTrace: 'For security reasons the stack trace is no longer displayed, but the property is kept for previous versions',
+ descriptionURL: 'https://api-explorer.alfresco.com',
+ logId: 'fafaf3c9-4e23-412b-baf3-c94e23912be5'
+ }
+ });
+ }
+
+ get200ResponseGetFolderSizeInfo(): void {
+ nock(this.host, { encodedQueryParams: true })
+ .get(
+ '/alfresco/api/-default-/public/alfresco/versions/1/nodes/b4cff62a-664d-4d45-9302-98723eac1319/size-details/5ade426e-8a04-4d50-9e42-6e8a041d50f3'
+ )
+ .reply(200, {
+ entry: {
+ numberOfFiles: 100,
+ jobId: '5ade426e-8a04-4d50-9e42-6e8a041d50f3',
+ sizeInBytes: 2689,
+ id: '32e522f1-1f28-4ea3-a522-f11f284ea397',
+ calculatedAt: '2024-12-20T12:02:23.989+0000',
+ status: 'COMPLETED'
+ }
+ });
+ }
+
+ get404JobIdNotFound(): void {
+ nock(this.host, { encodedQueryParams: true })
+ .get(
+ '/alfresco/api/-default-/public/alfresco/versions/1/nodes/b4cff62a-664d-4d45-9302-98723eac1319/size-details/5ade426e-8a04-4d50-9e42-6e8a041d50f3'
+ )
+ .reply(404, {
+ error: {
+ errorKey: 'jobId does not exist',
+ statusCode: 404,
+ briefSummary: '11207212 jobId does not exist',
+ stackTrace: 'For security reasons the stack trace is no longer displayed, but the property is kept for previous versions',
+ descriptionURL: 'https://api-explorer.alfresco.com',
+ logId: 'a98180c0-b1c0-48cb-8180-c0b1c0f8cba8'
+ }
+ });
+ }
}