1- import { ErrorType , useFileStorageApi } from "./FileStorageApi.composable" ;
1+ import { CollaboraFileType , ErrorType , useFileStorageApi } from "./FileStorageApi.composable" ;
22import * as serverApi from "@/fileStorageApi/v3/api/file-api" ;
33import * as wopiApi from "@/fileStorageApi/v3/api/wopi-api" ;
44import {
@@ -18,6 +18,7 @@ import {
1818import { apiResponseErrorFactory } from "@@/tests/test-utils/factory/apiResponseErrorFactory" ;
1919import { axiosErrorFactory } from "@@/tests/test-utils/factory/axiosErrorFactory" ;
2020import { fileRecordFactory } from "@@/tests/test-utils/factory/filerecordResponse.factory" ;
21+ import { fileUrlParamsFactory } from "@@/tests/test-utils/factory/fileUrlParamsFactory" ;
2122import { ObjectIdMock } from "@@/tests/test-utils/ObjectIdMock" ;
2223import { useNotificationStore } from "@data-app" ;
2324import { createMock } from "@golevelup/ts-vitest" ;
@@ -445,6 +446,15 @@ describe("FileStorageApi Composable", () => {
445446 expect ( fileRecord ) . toStrictEqual ( [ fileRecordResponse ] ) ;
446447 } ) ;
447448
449+ it ( "should return created file record" , async ( ) => {
450+ const { parentId, parentType, imageUrl, fileRecordResponse } = setup ( ) ;
451+ const { uploadFromUrl } = useFileStorageApi ( ) ;
452+
453+ const createdFileRecord = await uploadFromUrl ( imageUrl , parentId , parentType ) ;
454+
455+ expect ( createdFileRecord ) . toStrictEqual ( fileRecordResponse ) ;
456+ } ) ;
457+
448458 describe ( "when file name is empty" , ( ) => {
449459 it ( "should upload file with default filename" , async ( ) => {
450460 const emptyFileName = "" ;
@@ -806,4 +816,198 @@ describe("FileStorageApi Composable", () => {
806816 } ) ;
807817 } ) ;
808818 } ) ;
819+
820+ describe ( "uploadCollaboraFile" , ( ) => {
821+ describe ( "when uploading a collabora text file" , ( ) => {
822+ const setup = ( ) => {
823+ const fileName = "newCollaboraFile" ;
824+ const parentId = ObjectIdMock ( ) ;
825+ const parentType = FileRecordParent . BOARDNODES ;
826+ const fileRecordResponse = fileRecordFactory . build ( {
827+ parentId,
828+ parentType,
829+ name : fileName + ".docx" ,
830+ } ) ;
831+ const response = createMock < AxiosResponse < FileRecord , unknown > > ( {
832+ data : fileRecordResponse ,
833+ } ) ;
834+
835+ const fileApi = createMock < serverApi . FileApiInterface > ( ) ;
836+ vi . spyOn ( serverApi , "FileApiFactory" ) . mockReturnValueOnce ( fileApi ) ;
837+ fileApi . uploadFromUrl . mockResolvedValueOnce ( response ) ;
838+
839+ const { uploadCollaboraFile } = useFileStorageApi ( ) ;
840+
841+ const fileParams = fileUrlParamsFactory . build ( {
842+ fileName : `${ fileName } .docx` ,
843+ headers : {
844+ "User-Agent" : "Embed Request User Agent" ,
845+ } ,
846+ url : `http://localhost:3000/collabora/doc.docx` ,
847+ } ) ;
848+
849+ return {
850+ uploadCollaboraFile,
851+ fileRecordResponse,
852+ fileName,
853+ fileApi,
854+ fileParams,
855+ } ;
856+ } ;
857+
858+ it ( "returns created file record" , async ( ) => {
859+ const { uploadCollaboraFile, fileRecordResponse, fileName } = setup ( ) ;
860+ const newFile = await uploadCollaboraFile (
861+ CollaboraFileType . Text ,
862+ "parentId" ,
863+ FileRecordParent . BOARDNODES ,
864+ fileName
865+ ) ;
866+
867+ expect ( newFile ) . toBe ( fileRecordResponse ) ;
868+ } ) ;
869+
870+ it ( "calls uploadFromUrl with correct params" , async ( ) => {
871+ const { uploadCollaboraFile, fileName, fileApi, fileParams } = setup ( ) ;
872+
873+ await uploadCollaboraFile ( CollaboraFileType . Text , "parentId" , FileRecordParent . BOARDNODES , fileName ) ;
874+
875+ expect ( fileApi . uploadFromUrl ) . toHaveBeenCalledWith (
876+ "schoolId" ,
877+ StorageLocation . SCHOOL ,
878+ "parentId" ,
879+ FileRecordParent . BOARDNODES ,
880+ fileParams
881+ ) ;
882+ } ) ;
883+ } ) ;
884+
885+ describe ( "when uploading a collabora spreadsheet file" , ( ) => {
886+ const setup = ( ) => {
887+ const fileName = "newCollaboraFile" ;
888+ const parentId = ObjectIdMock ( ) ;
889+ const parentType = FileRecordParent . BOARDNODES ;
890+ const fileRecordResponse = fileRecordFactory . build ( {
891+ parentId,
892+ parentType,
893+ name : fileName + ".xlsx" ,
894+ } ) ;
895+ const response = createMock < AxiosResponse < FileRecord , unknown > > ( {
896+ data : fileRecordResponse ,
897+ } ) ;
898+
899+ const fileApi = createMock < serverApi . FileApiInterface > ( ) ;
900+ vi . spyOn ( serverApi , "FileApiFactory" ) . mockReturnValueOnce ( fileApi ) ;
901+ fileApi . uploadFromUrl . mockResolvedValueOnce ( response ) ;
902+
903+ const { uploadCollaboraFile } = useFileStorageApi ( ) ;
904+
905+ const fileParams = fileUrlParamsFactory . build ( {
906+ fileName : `${ fileName } .xlsx` ,
907+ headers : {
908+ "User-Agent" : "Embed Request User Agent" ,
909+ } ,
910+ url : `http://localhost:3000/collabora/spreadsheet.xlsx` ,
911+ } ) ;
912+
913+ return {
914+ uploadCollaboraFile,
915+ fileRecordResponse,
916+ fileName,
917+ fileApi,
918+ fileParams,
919+ } ;
920+ } ;
921+
922+ it ( "returns created file record" , async ( ) => {
923+ const { uploadCollaboraFile, fileRecordResponse, fileName } = setup ( ) ;
924+ const newFile = await uploadCollaboraFile (
925+ CollaboraFileType . Spreadsheet ,
926+ "parentId" ,
927+ FileRecordParent . BOARDNODES ,
928+ fileName
929+ ) ;
930+
931+ expect ( newFile ) . toBe ( fileRecordResponse ) ;
932+ } ) ;
933+
934+ it ( "calls uploadFromUrl with correct params" , async ( ) => {
935+ const { uploadCollaboraFile, fileName, fileApi, fileParams } = setup ( ) ;
936+
937+ await uploadCollaboraFile ( CollaboraFileType . Spreadsheet , "parentId" , FileRecordParent . BOARDNODES , fileName ) ;
938+
939+ expect ( fileApi . uploadFromUrl ) . toHaveBeenCalledWith (
940+ "schoolId" ,
941+ StorageLocation . SCHOOL ,
942+ "parentId" ,
943+ FileRecordParent . BOARDNODES ,
944+ fileParams
945+ ) ;
946+ } ) ;
947+ } ) ;
948+
949+ describe ( "when uploading a collabora presentation file" , ( ) => {
950+ const setup = ( ) => {
951+ const fileName = "newCollaboraFile" ;
952+ const parentId = ObjectIdMock ( ) ;
953+ const parentType = FileRecordParent . BOARDNODES ;
954+ const fileRecordResponse = fileRecordFactory . build ( {
955+ parentId,
956+ parentType,
957+ name : fileName + ".pptx" ,
958+ } ) ;
959+ const response = createMock < AxiosResponse < FileRecord , unknown > > ( {
960+ data : fileRecordResponse ,
961+ } ) ;
962+
963+ const fileApi = createMock < serverApi . FileApiInterface > ( ) ;
964+ vi . spyOn ( serverApi , "FileApiFactory" ) . mockReturnValueOnce ( fileApi ) ;
965+ fileApi . uploadFromUrl . mockResolvedValueOnce ( response ) ;
966+
967+ const { uploadCollaboraFile } = useFileStorageApi ( ) ;
968+
969+ const fileParams = fileUrlParamsFactory . build ( {
970+ fileName : `${ fileName } .pptx` ,
971+ headers : {
972+ "User-Agent" : "Embed Request User Agent" ,
973+ } ,
974+ url : `http://localhost:3000/collabora/presentation.pptx` ,
975+ } ) ;
976+
977+ return {
978+ uploadCollaboraFile,
979+ fileRecordResponse,
980+ fileName,
981+ fileApi,
982+ fileParams,
983+ } ;
984+ } ;
985+
986+ it ( "returns created file record" , async ( ) => {
987+ const { uploadCollaboraFile, fileRecordResponse, fileName } = setup ( ) ;
988+ const newFile = await uploadCollaboraFile (
989+ CollaboraFileType . Presentation ,
990+ "parentId" ,
991+ FileRecordParent . BOARDNODES ,
992+ fileName
993+ ) ;
994+
995+ expect ( newFile ) . toBe ( fileRecordResponse ) ;
996+ } ) ;
997+
998+ it ( "calls uploadFromUrl with correct params" , async ( ) => {
999+ const { uploadCollaboraFile, fileName, fileApi, fileParams } = setup ( ) ;
1000+
1001+ await uploadCollaboraFile ( CollaboraFileType . Presentation , "parentId" , FileRecordParent . BOARDNODES , fileName ) ;
1002+
1003+ expect ( fileApi . uploadFromUrl ) . toHaveBeenCalledWith (
1004+ "schoolId" ,
1005+ StorageLocation . SCHOOL ,
1006+ "parentId" ,
1007+ FileRecordParent . BOARDNODES ,
1008+ fileParams
1009+ ) ;
1010+ } ) ;
1011+ } ) ;
1012+ } ) ;
8091013} ) ;
0 commit comments