diff --git a/src-ui/src/app/components/document-detail/document-detail.component.spec.ts b/src-ui/src/app/components/document-detail/document-detail.component.spec.ts index ca6f48d1b..51cd9ba04 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.spec.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.spec.ts @@ -1897,6 +1897,47 @@ describe('DocumentDetailComponent', () => { expect(urlRevokeSpy).toHaveBeenCalled() }) + it('should include version in download and print only for non-latest selected version', () => { + initNormally() + component.document.versions = [ + { id: doc.id, is_root: true }, + { id: 10, is_root: false }, + ] as any + + const getDownloadUrlSpy = jest + .spyOn(documentService, 'getDownloadUrl') + .mockReturnValueOnce('download-latest') + .mockReturnValueOnce('print-latest') + .mockReturnValueOnce('download-non-latest') + .mockReturnValueOnce('print-non-latest') + + component.selectedVersionId = 10 + component.download() + expect(getDownloadUrlSpy).toHaveBeenNthCalledWith(1, doc.id, false, null) + httpTestingController + .expectOne('download-latest') + .error(new ProgressEvent('failed')) + + component.printDocument() + expect(getDownloadUrlSpy).toHaveBeenNthCalledWith(2, doc.id, false, null) + httpTestingController + .expectOne('print-latest') + .error(new ProgressEvent('failed')) + + component.selectedVersionId = doc.id + component.download() + expect(getDownloadUrlSpy).toHaveBeenNthCalledWith(3, doc.id, false, doc.id) + httpTestingController + .expectOne('download-non-latest') + .error(new ProgressEvent('failed')) + + component.printDocument() + expect(getDownloadUrlSpy).toHaveBeenNthCalledWith(4, doc.id, false, doc.id) + httpTestingController + .expectOne('print-non-latest') + .error(new ProgressEvent('failed')) + }) + it('should download a file with the correct filename', () => { const mockBlob = new Blob(['test content'], { type: 'text/plain' }) const mockResponse = new HttpResponse({ diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index eaab781c6..e4e704aba 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -1399,11 +1399,24 @@ export class DocumentDetailComponent this.versionUploadError = null } + private getSelectedNonLatestVersionId(): number | null { + const versions = this.document?.versions ?? [] + if (!versions.length || !this.selectedVersionId) { + return null + } + const latestVersionId = Math.max(...versions.map((version) => version.id)) + return this.selectedVersionId === latestVersionId + ? null + : this.selectedVersionId + } + download(original: boolean = false) { this.downloading = true + const selectedVersionId = this.getSelectedNonLatestVersionId() const downloadUrl = this.documentsService.getDownloadUrl( - this.selectedVersionId || this.documentId, - original + this.documentId, + original, + selectedVersionId ) this.http .get(downloadUrl, { observe: 'response', responseType: 'blob' }) @@ -1835,9 +1848,11 @@ export class DocumentDetailComponent } printDocument() { + const selectedVersionId = this.getSelectedNonLatestVersionId() const printUrl = this.documentsService.getDownloadUrl( this.document.id, - false + false, + selectedVersionId ) this.http .get(printUrl, { responseType: 'blob' })