diff --git a/core-web/libs/data-access/src/lib/dot-upload-file/dot-upload-file.service.spec.ts b/core-web/libs/data-access/src/lib/dot-upload-file/dot-upload-file.service.spec.ts index b4da43b126e5..1ca7d99e7f61 100644 --- a/core-web/libs/data-access/src/lib/dot-upload-file/dot-upload-file.service.spec.ts +++ b/core-web/libs/data-access/src/lib/dot-upload-file/dot-upload-file.service.spec.ts @@ -1,4 +1,5 @@ -import { createHttpFactory, HttpMethod, SpectatorHttp } from '@ngneat/spectator/jest'; +import { createHttpFactory, SpectatorHttp, SpyObject, mockProvider } from '@ngneat/spectator/jest'; +import { of } from 'rxjs'; import { DotWorkflowActionsFireService } from '@dotcms/data-access'; @@ -6,12 +7,19 @@ import { DotUploadFileService } from './dot-upload-file.service'; describe('DotUploadFileService', () => { let spectator: SpectatorHttp; + let dotWorkflowActionsFireService: SpyObject; + + const createHttp = createHttpFactory({ service: DotUploadFileService, - providers: [DotUploadFileService, DotWorkflowActionsFireService] + providers: [DotUploadFileService, mockProvider(DotWorkflowActionsFireService)] }); - beforeEach(() => (spectator = createHttp())); + beforeEach(() => { + spectator = createHttp(); + + dotWorkflowActionsFireService = spectator.inject(DotWorkflowActionsFireService); + }); it('should be created', () => { expect(spectator.service).toBeTruthy(); @@ -19,27 +27,15 @@ describe('DotUploadFileService', () => { describe('uploadDotAsset', () => { it('should upload a file as a dotAsset', () => { + dotWorkflowActionsFireService.newContentlet.mockReturnValueOnce(of({ entity: { identifier: 'test' } })); + const file = new File([''], 'test.png', { type: 'image/png' }); spectator.service.uploadDotAsset(file).subscribe(); - const req = spectator.expectOne( - '/api/v1/workflow/actions/default/fire/NEW', - HttpMethod.PUT - ); - - expect(req.request.body.get('json')).toEqual( - JSON.stringify({ - contentlet: { - file: 'test.png', - contentType: 'dotAsset' - } - }) - ); - - req.flush({ entity: { identifier: 'test' } }); + expect(dotWorkflowActionsFireService.newContentlet).toHaveBeenCalled(); }); }); }); diff --git a/core-web/libs/data-access/src/lib/dot-workflow-actions-fire/dot-workflow-actions-fire.service.spec.ts b/core-web/libs/data-access/src/lib/dot-workflow-actions-fire/dot-workflow-actions-fire.service.spec.ts index fc32a26a9e73..d2a00e897f4f 100644 --- a/core-web/libs/data-access/src/lib/dot-workflow-actions-fire/dot-workflow-actions-fire.service.spec.ts +++ b/core-web/libs/data-access/src/lib/dot-workflow-actions-fire/dot-workflow-actions-fire.service.spec.ts @@ -68,6 +68,40 @@ describe('DotWorkflowActionsFireService', () => { }); }); + it('should SAVE and return a new contentlet with FormData', (done) => { + const mockResult = { + name: 'test' + }; + + const file = new File(['hello'], 'hello.txt', { type: 'text/plain' }); + + const requestBody = { + contentlet: { + contentType: 'dotAsset', + file: file.name + } + }; + + const formData = new FormData(); + formData.append('file', file); + + spectator.service.newContentlet('dotAsset', { file: file.name }, formData).subscribe((res) => { + expect(res).toEqual([mockResult]); + done(); + }); + + const req = spectator.expectOne( + '/api/v1/workflow/actions/default/fire/NEW', + HttpMethod.PUT + ); + + expect(req.request.body.get('json')).toEqual(JSON.stringify(requestBody)); + + req.flush({ + entity: [mockResult] + }); + }); + it('should EDIT and return the updated contentlet', (done) => { const mockResult = { inode: '123' diff --git a/core-web/libs/data-access/src/lib/dot-workflow-actions-fire/dot-workflow-actions-fire.service.ts b/core-web/libs/data-access/src/lib/dot-workflow-actions-fire/dot-workflow-actions-fire.service.ts index 1b5f9fd59872..f7de6b4d218e 100644 --- a/core-web/libs/data-access/src/lib/dot-workflow-actions-fire/dot-workflow-actions-fire.service.ts +++ b/core-web/libs/data-access/src/lib/dot-workflow-actions-fire/dot-workflow-actions-fire.service.ts @@ -195,7 +195,7 @@ export class DotWorkflowActionsFireService { .put( url, formData ? formData : bodyRequest, - { headers: this.defaultHeaders } + { headers: formData ? new HttpHeaders() : this.defaultHeaders } ) .pipe(take(1), pluck('entity')); } diff --git a/core-web/libs/edit-content/src/lib/components/dot-edit-content-field/dot-edit-content-field.component.spec.ts b/core-web/libs/edit-content/src/lib/components/dot-edit-content-field/dot-edit-content-field.component.spec.ts index d354aa40ef2a..4dbc05c58831 100644 --- a/core-web/libs/edit-content/src/lib/components/dot-edit-content-field/dot-edit-content-field.component.spec.ts +++ b/core-web/libs/edit-content/src/lib/components/dot-edit-content-field/dot-edit-content-field.component.spec.ts @@ -14,7 +14,8 @@ import { DotHttpErrorManagerService, DotLicenseService, DotMessageDisplayService, - DotMessageService + DotMessageService, + DotWorkflowActionsFireService } from '@dotcms/data-access'; import { DotKeyValueComponent } from '@dotcms/ui'; @@ -159,6 +160,16 @@ const FIELD_TYPES_COMPONENTS: Record | DotEditFieldTe }, [FIELD_TYPES.WYSIWYG]: { component: DotEditContentWYSIWYGFieldComponent, + providers: [ + { + provide: DotFileFieldUploadService, + useValue: {} + }, + { + provide: DotWorkflowActionsFireService, + useValue: {} + } + ], declarations: [MockComponent(EditorComponent)] }, [FIELD_TYPES.CATEGORY]: {