@@ -19,6 +19,7 @@ import { cardResponseFactory } from "@@/tests/test-utils/factory/cardResponseFac
1919import { drawingElementResponseFactory } from "@@/tests/test-utils/factory/drawingElementResponseFactory" ;
2020import { useNotificationStore } from "@data-app" ;
2121import { CreateElementRequestPayload , useCardStore , useSocketConnection } from "@data-board" ;
22+ import { CollaboraFileType , useFileStorageApi } from "@data-file" ;
2223import { createMock , DeepMocked } from "@golevelup/ts-vitest" ;
2324import { createTestingPinia } from "@pinia/testing" ;
2425import { useSharedEditMode , useSharedLastCreatedElement } from "@util-board" ;
@@ -49,6 +50,9 @@ const mockedUseSocketConnection = vi.mocked(useSocketConnection);
4950vi . mock ( "./BoardFocusHandler.composable" ) ;
5051const mockedBoardFocusHandler = vi . mocked ( useBoardFocusHandler ) ;
5152
53+ vi . mock ( "@data-file" ) ;
54+ const mockedFileStorageApi = vi . mocked ( useFileStorageApi ) ;
55+
5256describe ( "CardStore" , ( ) => {
5357 let mockedBoardApiCalls : DeepMocked < ReturnType < typeof useBoardApi > > ;
5458 let mockedErrorHandlerCalls : DeepMocked < ReturnType < typeof useErrorHandler > > ;
@@ -59,6 +63,7 @@ describe("CardStore", () => {
5963 let setEditModeId : Mock ;
6064 let editModeId : Ref < string | undefined > ;
6165 let mockedBoardFocusCalls : DeepMocked < ReturnType < typeof useBoardFocusHandler > > ;
66+ let mockedFileStorageActions : DeepMocked < ReturnType < typeof useFileStorageApi > > ;
6267
6368 beforeEach ( ( ) => {
6469 setActivePinia ( createPinia ( ) ) ;
@@ -110,6 +115,11 @@ describe("CardStore", () => {
110115 mockedBoardFocusCalls = createMock < ReturnType < typeof useBoardFocusHandler > > ( ) ;
111116 mockedBoardFocusHandler . mockReturnValue ( mockedBoardFocusCalls ) ;
112117
118+ mockedFileStorageActions = createMock < ReturnType < typeof useFileStorageApi > > ( {
119+ uploadCollaboraFile : vi . fn ( ) ,
120+ } ) ;
121+ mockedFileStorageApi . mockReturnValue ( mockedFileStorageActions ) ;
122+
113123 setEditModeId = vi . fn ( ) ;
114124 editModeId = ref ( undefined ) ;
115125 mockedSharedEditMode . mockReturnValue ( {
@@ -970,4 +980,86 @@ describe("CardStore", () => {
970980 } ) ;
971981 } ) ;
972982 } ) ;
983+
984+ describe ( "createFileElementWithCollabora" , ( ) => {
985+ const setupCreateFileElementWithCollabora = ( editMode = false , createElementFails = false , uploadFails = false ) => {
986+ const { cardStore } = setup ( false ) ;
987+
988+ editModeId . value = editMode ? "cardId" : undefined ;
989+
990+ const createElementRequestReturnValue = createElementFails
991+ ? Promise . resolve ( undefined )
992+ : Promise . resolve ( {
993+ id : "elementId" ,
994+ type : ContentElementType . File ,
995+ content : { } ,
996+ } ) ;
997+ mockedCardRestApiActions . createElementRequest . mockReturnValue ( createElementRequestReturnValue ) ;
998+
999+ const uploadCollaboraFileReturnValue = uploadFails
1000+ ? Promise . resolve ( undefined )
1001+ : Promise . resolve ( { id : "fileId" } ) ;
1002+ mockedFileStorageActions . uploadCollaboraFile . mockReturnValue ( uploadCollaboraFileReturnValue ) ;
1003+
1004+ return {
1005+ cardStore,
1006+ } ;
1007+ } ;
1008+
1009+ describe ( "when a card is in edit mode" , ( ) => {
1010+ it ( "should call createElementRequest" , ( ) => {
1011+ const { cardStore } = setupCreateFileElementWithCollabora ( true , false , false ) ;
1012+
1013+ cardStore . createFileElementWithCollabora ( CollaboraFileType . Text , "fileName.docx" ) ;
1014+
1015+ expect ( mockedCardRestApiActions . createElementRequest ) . toHaveBeenCalled ( ) ;
1016+ } ) ;
1017+
1018+ it ( "should call uploadCollaboraFile" , async ( ) => {
1019+ const { cardStore } = setupCreateFileElementWithCollabora ( true , false , false ) ;
1020+
1021+ await cardStore . createFileElementWithCollabora ( CollaboraFileType . Text , "fileName.docx" ) ;
1022+
1023+ expect ( mockedFileStorageActions . uploadCollaboraFile ) . toHaveBeenCalled ( ) ;
1024+ } ) ;
1025+
1026+ describe ( "when element creation fails" , ( ) => {
1027+ it ( "should not call uploadCollaboraFile" , async ( ) => {
1028+ const { cardStore } = setupCreateFileElementWithCollabora ( true , true , false ) ;
1029+
1030+ await cardStore . createFileElementWithCollabora ( CollaboraFileType . Text , "fileName.docx" ) ;
1031+
1032+ expect ( mockedFileStorageActions . uploadCollaboraFile ) . not . toHaveBeenCalled ( ) ;
1033+ } ) ;
1034+ } ) ;
1035+
1036+ describe ( "when uploading collabora file fails" , ( ) => {
1037+ it ( "should delete created element" , async ( ) => {
1038+ const { cardStore } = setupCreateFileElementWithCollabora ( true , false , true ) ;
1039+
1040+ await cardStore . createFileElementWithCollabora ( CollaboraFileType . Text , "fileName.docx" ) ;
1041+
1042+ expect ( mockedCardRestApiActions . deleteElementRequest ) . toHaveBeenCalled ( ) ;
1043+ } ) ;
1044+ } ) ;
1045+ } ) ;
1046+
1047+ describe ( "when no card is in edit mode" , ( ) => {
1048+ it ( "should not call createElementRequest" , ( ) => {
1049+ const { cardStore } = setupCreateFileElementWithCollabora ( false , false , false ) ;
1050+
1051+ cardStore . createFileElementWithCollabora ( CollaboraFileType . Text , "fileName.docx" ) ;
1052+
1053+ expect ( mockedCardRestApiActions . createElementRequest ) . not . toHaveBeenCalled ( ) ;
1054+ } ) ;
1055+
1056+ it ( "should not call uploadCollaboraFile" , async ( ) => {
1057+ const { cardStore } = setupCreateFileElementWithCollabora ( false , false , false ) ;
1058+
1059+ await cardStore . createFileElementWithCollabora ( CollaboraFileType . Text , "fileName.docx" ) ;
1060+
1061+ expect ( mockedFileStorageActions . uploadCollaboraFile ) . not . toHaveBeenCalled ( ) ;
1062+ } ) ;
1063+ } ) ;
1064+ } ) ;
9731065} ) ;
0 commit comments