Skip to content
Merged
Show file tree
Hide file tree
Changes from 110 commits
Commits
Show all changes
114 commits
Select commit Hold shift + click to select a range
8ecde5c
Add too large chip
cdarsow Nov 19, 2025
fbec864
Add crossed pencil icon
cdarsow Nov 19, 2025
16db24f
Add initial interaction handler
cdarsow Nov 19, 2025
e18fc87
Move edit mode mapper
cdarsow Nov 19, 2025
82f6282
Cleanup
cdarsow Nov 19, 2025
f736868
Adjust import
cdarsow Nov 19, 2025
262a653
Add collabora opening
cdarsow Nov 19, 2025
08631c5
Only one chip at a time
cdarsow Nov 19, 2025
bff0fee
Show updatef info
cdarsow Nov 19, 2025
c7fe920
Generate file storage API
cdarsow Nov 20, 2025
0ce3935
Show content last modified info
cdarsow Nov 20, 2025
36832aa
Adjust chip icons and text color
cdarsow Nov 20, 2025
dcbdb2c
Adjust language key
cdarsow Nov 20, 2025
09a7d00
Add contentLastModifiedAt
cdarsow Nov 20, 2025
c11dc2b
Adjust existing tests
cdarsow Nov 20, 2025
3d8b5bb
Add file state tests
cdarsow Nov 20, 2025
28cc37b
Add file interaction tests
cdarsow Nov 20, 2025
a246178
Improve imports
cdarsow Nov 20, 2025
cb5b4b9
Pass edit permission as prop
cdarsow Nov 20, 2025
5cf19ae
Add check if board in store belongs to folder
cdarsow Nov 20, 2025
d31a9eb
Undo change
cdarsow Nov 21, 2025
21b93ba
Add check if board in store is correct
cdarsow Nov 21, 2025
af29afa
Add fab items
cdarsow Nov 21, 2025
4b5e86f
Initial add doc dialog
cdarsow Nov 21, 2025
98a3438
Move collabora enum to global structure
cdarsow Nov 24, 2025
b7112df
Move collabora asset function to helper
cdarsow Nov 24, 2025
08ccb22
Merge branch 'main' into BC-10467
cdarsow Nov 24, 2025
ebb7695
Refactor composable
cdarsow Nov 24, 2025
8096c4e
Add missing tests for non-interactive files
cdarsow Nov 24, 2025
43c0348
Merge branch 'main' into BC-10467
cdarsow Nov 24, 2025
5d3bf1c
Merge branch 'main' into BC-10468
cdarsow Nov 24, 2025
7941a07
Add tests
cdarsow Nov 24, 2025
2884d81
Add test
cdarsow Nov 24, 2025
8e28b27
fix test
cdarsow Nov 24, 2025
c2a5312
Add return uploaded file record info
cdarsow Nov 25, 2025
9ec873b
Add opening new doc in tab
cdarsow Nov 25, 2025
f22b706
Move openCollabora to helpers
cdarsow Nov 25, 2025
9bb0caf
Merge branch 'main' into BC-10468
cdarsow Nov 25, 2025
fbf3bd4
Add tests
cdarsow Nov 25, 2025
f147b73
Adjust tests
cdarsow Nov 25, 2025
6364ac5
Add tests
cdarsow Nov 25, 2025
4504f5d
Use own lang keys
cdarsow Nov 25, 2025
958a5b6
add test, adjust test
cdarsow Nov 25, 2025
9b9cd8d
Cover upload file reset
cdarsow Nov 25, 2025
124f6cb
Fix missing contentModifiedAt
cdarsow Nov 26, 2025
79dfaa2
Add test for tab opening
cdarsow Nov 26, 2025
8e692ce
Add test for non existing createdAt
cdarsow Nov 26, 2025
0ee728d
Adjust watcher
cdarsow Nov 26, 2025
fe33753
Adjust test ids
cdarsow Nov 26, 2025
b13fb72
Adjust test ids
cdarsow Nov 26, 2025
ba4bf6e
Move factory to test-utils
cdarsow Nov 26, 2025
eadbb56
Test return value
cdarsow Nov 26, 2025
a1204c6
Cleanup
cdarsow Nov 26, 2025
2ab69c1
Adjust enum style
cdarsow Nov 26, 2025
c8bfc58
Remove unneeded mock
cdarsow Nov 26, 2025
b0338f8
Export all helpers
cdarsow Nov 26, 2025
aebaa3f
Merge branch 'main' into BC-10467
cdarsow Nov 26, 2025
a10480f
simplify mocking
cdarsow Nov 26, 2025
8d98a03
Merge branch 'main' into BC-10467
cdarsow Nov 26, 2025
545f88f
Merge branch 'main' into BC-10468
cdarsow Nov 26, 2025
6fdf99b
Merge branch 'BC-10467' into BC-10468
cdarsow Nov 26, 2025
6d548b1
Cleanup after merge
cdarsow Nov 26, 2025
1c734cf
Use helper
cdarsow Nov 26, 2025
c7d44ea
Merge branch 'main' into BC-10468
cdarsow Nov 28, 2025
9811dc1
Add fab action keys
cdarsow Nov 28, 2025
7e7c185
Add feature flag check
cdarsow Nov 28, 2025
19db9b2
Fix import issue
cdarsow Nov 28, 2025
5dee272
Adjust type
cdarsow Dec 1, 2025
24b8ae7
Use emit instead watcher
cdarsow Dec 1, 2025
22fee2e
Move options and upload to component
cdarsow Dec 1, 2025
eeb5744
Restructure helpers, global enum
cdarsow Dec 1, 2025
df8bd51
Adjust tests
cdarsow Dec 1, 2025
eace8ec
Adjust test and check for emit
cdarsow Dec 1, 2025
29deb9d
Readd mapper
cdarsow Dec 1, 2025
3bb56fe
Fix double import
cdarsow Dec 1, 2025
f1e7d61
Adjust tests
cdarsow Dec 1, 2025
b987bc1
Undo changes
cdarsow Dec 1, 2025
ee2cb64
Undo changes
cdarsow Dec 1, 2025
c263acf
Undo changes
cdarsow Dec 1, 2025
522f7b9
Cleanup imports
cdarsow Dec 1, 2025
df9a49c
Test all options
cdarsow Dec 1, 2025
e055173
Refactor editMode mapper
cdarsow Dec 1, 2025
3912e6c
Remove unneeded check
cdarsow Dec 1, 2025
2789ab3
Add tests
cdarsow Dec 1, 2025
09656da
Adjust test wording
cdarsow Dec 1, 2025
8b9f5a3
BC-10468-max (#3986)
bischofmax Dec 2, 2025
91ff51c
Implement Collabora editor component and move logic from page
bischofmax Dec 2, 2025
ac68bac
Refactor test descriptions for CollaboraEditor to improve clarity
bischofmax Dec 3, 2025
a5dec65
Update Collabora iframe title localization keys for consistency
bischofmax Dec 3, 2025
b99b3d2
Remove doubled dialog
cdarsow Dec 3, 2025
5b95221
Merge branch 'main' into BC-11042
cdarsow Dec 4, 2025
2241506
Move logic to CardStore
cdarsow Dec 4, 2025
a8902fc
Add editMode history
cdarsow Dec 4, 2025
01db8f2
Add payload type
cdarsow Dec 4, 2025
048d9ad
Adjust test
cdarsow Dec 4, 2025
33ff814
Add missing mock
cdarsow Dec 4, 2025
29648b6
Fix mock
cdarsow Dec 4, 2025
03b8971
Merge branch 'main' into BC-11042
cdarsow Dec 4, 2025
106806e
Adjust dialog tests
cdarsow Dec 4, 2025
4999476
Cleanup lang keys
cdarsow Dec 4, 2025
7383534
Add test for failing upload
cdarsow Dec 4, 2025
0cf703a
Add @onCreateCollaboraFile test
cdarsow Dec 4, 2025
4463721
Testing failing upload
cdarsow Dec 4, 2025
1041d88
Add card store tests
cdarsow Dec 4, 2025
36d8179
Readd lang key
cdarsow Dec 5, 2025
37a6909
Fix click behaviour
cdarsow Dec 5, 2025
c56b5a0
Improve event handling
cdarsow Dec 5, 2025
9f4c430
Cleanup test
cdarsow Dec 5, 2025
13e510e
Cover errors in tests
cdarsow Dec 5, 2025
c385c1d
Adjust wordings and ids
cdarsow Dec 5, 2025
69229e3
Merge branch 'main' into BC-11042
cdarsow Dec 8, 2025
309c371
Improve test setup
cdarsow Dec 8, 2025
9aad6b5
Merge branch 'main' into BC-11042
cdarsow Dec 8, 2025
de39762
Merge branch 'main' into BC-11042
cdarsow Dec 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 6 additions & 11 deletions src/locales/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -539,8 +539,6 @@ export default {
"components.cardElement.fileElement.emptyAlt": "Hier ist ein Bild mit folgendem Namen",
"components.cardElement.fileElement.pdfAlt": "Vorschaubild für ",
"components.cardElement.fileElement.collaboraFile": "Dokument",
"components.cardElement.fileElement.collaboraFile.types": "Dokumententyp",
"components.cardElement.fileElement.collaboraFile.untitled": "Unbenanntes Dokument",
"components.cardElement.fileElement.previewError": "Laden der Vorschau fehlgeschlagen.",
"components.cardElement.fileElement.reloadStatus": "Status aktualisieren",
"components.cardElement.fileElement.videoFormatError":
Expand Down Expand Up @@ -592,9 +590,6 @@ export default {
"components.elementTypeSelection.elements.videoConferenceElement.subtitle": "Videokonferenz",
"components.elementTypeSelection.elements.h5pElement.subtitle": "Interaktives Lernelement",
"components.elementTypeSelection.elements.collabora.subtitle": "Dokument erstellen",
"components.elementTypeSelection.elements.collabora.option.text": ".docx (Text)",
"components.elementTypeSelection.elements.collabora.option.spreadsheet": ".xlsx (Tabelle)",
"components.elementTypeSelection.elements.collabora.option.presentation": ".pptx (Präsentation)",
"components.externalTools.status.deactivated": "Deaktiviert",
"components.externalTools.status.incomplete": "Unvollständig",
"components.externalTools.status.latest": "Aktuell",
Expand Down Expand Up @@ -2012,6 +2007,12 @@ export default {
"feature.media-shelf.layout.list": "Zeilen",
"feature.media-shelf.layout.grid": "Raster",
"feature.collabora.iframeTitle": "Office-Dokument Editor",
"feature.collabora.add-collabora-file-dialog.title": "Dokument erstellen",
"feature.collabora.add-collabora-file-dialog.doc-types": "Dokumententyp",
"feature.collabora.add-collabora-file-dialog.untitled-file": "Unbenanntes Dokument",
"feature.collabora.add-collabora-file-dialog.option.text": ".docx (Text)",
"feature.collabora.add-collabora-file-dialog.option.spreadsheet": ".xlsx (Tabelle)",
"feature.collabora.add-collabora-file-dialog.option.presentation": ".pptx (Präsentation)",
"pages.folder.emptyState": "Aktuell gibt es hier noch keine Dateien",
"pages.folder.fab.title": "Datei hinzufügen",
"pages.folder.untitled": "Unbenannter Ordner",
Expand All @@ -2032,10 +2033,4 @@ export default {
"pages.folder.rename-file-dialog.validation.invalid-characters": "Der Dateiname enthält ungültige Zeichen.",
"pages.folder.fab.upload-file": "Datei hochladen",
"pages.folder.fab.create-document": "Dokument erstellen",
"pages.folder.add-collabora-file-dialog.title": "Dokument erstellen",
"pages.folder.add-collabora-file-dialog.doc-types": "Dokumententyp",
"pages.folder.add-collabora-file-dialog.untitled-file": "Unbenanntes Dokument",
"pages.folder.add-collabora-file-dialog.option.text": ".docx (Text)",
"pages.folder.add-collabora-file-dialog.option.spreadsheet": ".xlsx (Tabelle)",
"pages.folder.add-collabora-file-dialog.option.presentation": ".pptx (Präsentation)",
};
17 changes: 6 additions & 11 deletions src/locales/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -525,8 +525,6 @@ export default {
"components.cardElement.fileElement.emptyAlt": "Here is an image with the following name",
"components.cardElement.fileElement.pdfAlt": "Preview image for ",
"components.cardElement.fileElement.collaboraFile": "Document",
"components.cardElement.fileElement.collaboraFile.types": "Document type",
"components.cardElement.fileElement.collaboraFile.untitled": "Untitled document",
"components.cardElement.fileElement.previewError": "Failed to load the preview.",
"components.cardElement.fileElement.reloadStatus": "Update status",
"components.cardElement.fileElement.videoFormatError":
Expand Down Expand Up @@ -579,9 +577,6 @@ export default {
"components.elementTypeSelection.elements.videoConferenceElement.subtitle": "Video conference",
"components.elementTypeSelection.elements.h5pElement.subtitle": "Interactive learning element",
"components.elementTypeSelection.elements.collabora.subtitle": "Create document",
"components.elementTypeSelection.elements.collabora.option.text": ".docx (text)",
"components.elementTypeSelection.elements.collabora.option.spreadsheet": ".xlsx (spreadsheet)",
"components.elementTypeSelection.elements.collabora.option.presentation": ".pptx (presentation)",
"components.externalTools.status.deactivated": "Deactivated",
"components.externalTools.status.incomplete": "Configuration incomplete",
"components.externalTools.status.latest": "Latest",
Expand Down Expand Up @@ -1977,6 +1972,12 @@ export default {
"feature.media-shelf.layout.list": "Lines",
"feature.media-shelf.layout.grid": "Grid",
"feature.collabora.iframeTitle": "Office document editor",
"feature.collabora.add-collabora-file-dialog.title": "Create document",
"feature.collabora.add-collabora-file-dialog.doc-types": "Document type",
"feature.collabora.add-collabora-file-dialog.untitled-file": "Untitled document",
"feature.collabora.add-collabora-file-dialog.option.text": ".docx (Text)",
"feature.collabora.add-collabora-file-dialog.option.spreadsheet": ".xlsx (Spreadsheet)",
"feature.collabora.add-collabora-file-dialog.option.presentation": ".pptx (Presentation)",
"pages.folder.emptyState": "There are currently no files here",
"pages.folder.fab.title": "Add file",
"pages.folder.untitled": "Untitled folder",
Expand All @@ -1997,10 +1998,4 @@ export default {
"pages.folder.rename-file-dialog.validation.invalid-characters": "The file name contains invalid characters.",
"pages.folder.fab.upload-file": "Upload file",
"pages.folder.fab.create-document": "Create document",
"pages.folder.add-collabora-file-dialog.title": "Create document",
"pages.folder.add-collabora-file-dialog.doc-types": "Document type",
"pages.folder.add-collabora-file-dialog.untitled-file": "Untitled document",
"pages.folder.add-collabora-file-dialog.option.text": ".docx (Text)",
"pages.folder.add-collabora-file-dialog.option.spreadsheet": ".xlsx (Spreadsheet)",
"pages.folder.add-collabora-file-dialog.option.presentation": ".pptx (Presentation)",
};
17 changes: 6 additions & 11 deletions src/locales/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -534,8 +534,6 @@ export default {
"components.cardElement.fileElement.emptyAlt": "Aquí tenéis una imagen con el siguiente nombre",
"components.cardElement.fileElement.pdfAlt": "Imagen de vista previa para ",
"components.cardElement.fileElement.collaboraFile": "Archivo",
"components.cardElement.fileElement.collaboraFile.types": "Tipo de documento",
"components.cardElement.fileElement.collaboraFile.untitled": "Documento sin título",
"components.cardElement.fileElement.previewError": "No se ha podido cargar la vista previa.",
"components.cardElement.fileElement.reloadStatus": "Estado de actualización",
"components.cardElement.fileElement.videoFormatError":
Expand Down Expand Up @@ -588,9 +586,6 @@ export default {
"components.elementTypeSelection.elements.videoConferenceElement.subtitle": "Videoconferencia",
"components.elementTypeSelection.elements.h5pElement.subtitle": "Elemento de aprendizaje interactivo",
"components.elementTypeSelection.elements.collabora.subtitle": "Crear documento",
"components.elementTypeSelection.elements.collabora.option.text": ".docx (Texto)",
"components.elementTypeSelection.elements.collabora.option.spreadsheet": ".xlsx (Hoja de cálculo)",
"components.elementTypeSelection.elements.collabora.option.presentation": ".pptx (Presentación)",
"components.externalTools.status.deactivated": "Desactivado",
"components.externalTools.status.incomplete": "Configuración incompleta",
"components.externalTools.status.latest": "Actual",
Expand Down Expand Up @@ -2027,6 +2022,12 @@ export default {
"feature.media-shelf.layout.list": "Líneas",
"feature.media-shelf.layout.grid": "Red",
"feature.collabora.iframeTitle": "Editor de documentos de Office",
"feature.collabora.add-collabora-file-dialog.title": "Crear documento",
"feature.collabora.add-collabora-file-dialog.doc-types": "Tipo de documento",
"feature.collabora.add-collabora-file-dialog.untitled-file": "Documento sin título",
"feature.collabora.add-collabora-file-dialog.option.text": ".docx (Texto)",
"feature.collabora.add-collabora-file-dialog.option.spreadsheet": ".xlsx (Hoja de cálculo)",
"feature.collabora.add-collabora-file-dialog.option.presentation": ".pptx (Presentación)",
"pages.folder.emptyState": "Actualmente no hay archivos aquí",
"pages.folder.fab.title": "Añadir archivo",
"pages.folder.untitled": "Carpeta sin título",
Expand All @@ -2048,10 +2049,4 @@ export default {
"El nombre del archivo contiene caracteres no válidos.",
"pages.folder.fab.upload-file": "Subir archivo",
"pages.folder.fab.create-document": "Crear documento",
"pages.folder.add-collabora-file-dialog.title": "Crear documento",
"pages.folder.add-collabora-file-dialog.doc-types": "Tipo de documento",
"pages.folder.add-collabora-file-dialog.untitled-file": "Documento sin título",
"pages.folder.add-collabora-file-dialog.option.text": ".docx (Texto)",
"pages.folder.add-collabora-file-dialog.option.spreadsheet": ".xlsx (Hoja de cálculo)",
"pages.folder.add-collabora-file-dialog.option.presentation": ".pptx (Presentación)",
};
17 changes: 6 additions & 11 deletions src/locales/uk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -534,8 +534,6 @@ export default {
"components.cardElement.fileElement.emptyAlt": "Ось зображення з такою назвою",
"components.cardElement.fileElement.pdfAlt": "попередній перегляд зображення для ",
"components.cardElement.fileElement.collaboraFile": "Документ",
"components.cardElement.fileElement.collaboraFile.types": "Тип документа",
"components.cardElement.fileElement.collaboraFile.untitled": "Без назви документ",
"components.cardElement.fileElement.previewError": "Не вдалося завантажити попередній перегляд.",
"components.cardElement.fileElement.reloadStatus": "Статус оновлення",
"components.cardElement.fileElement.videoFormatError":
Expand Down Expand Up @@ -588,9 +586,6 @@ export default {
"components.elementTypeSelection.elements.videoConferenceElement.subtitle": "Відеоконференція",
"components.elementTypeSelection.elements.h5pElement.subtitle": "Інтерактивний елемент навчання",
"components.elementTypeSelection.elements.collabora.subtitle": "Створити документ",
"components.elementTypeSelection.elements.collabora.option.text": ".docx (Документ)",
"components.elementTypeSelection.elements.collabora.option.spreadsheet": ".xlsx (Таблиця)",
"components.elementTypeSelection.elements.collabora.option.presentation": ".pptx (Презентація)",
"components.externalTools.status.deactivated": "Деактивовано",
"components.externalTools.status.incomplete": "Конфігурація не завершена",
"components.externalTools.status.latest": "Останній",
Expand Down Expand Up @@ -1996,6 +1991,12 @@ export default {
"feature.media-shelf.layout.list": "лінії",
"feature.media-shelf.layout.grid": "сітка",
"feature.collabora.iframeTitle": "Редактор документів Office",
"feature.collabora.add-collabora-file-dialog.title": "Створити документ",
"feature.collabora.add-collabora-file-dialog.doc-types": "Тип документа",
"feature.collabora.add-collabora-file-dialog.untitled-file": "Без назви документ",
"feature.collabora.add-collabora-file-dialog.option.text": ".docx (Документ)",
"feature.collabora.add-collabora-file-dialog.option.spreadsheet": ".xlsx (Таблиця)",
"feature.collabora.add-collabora-file-dialog.option.presentation": ".pptx (Презентація)",
"pages.folder.emptyState": "Наразі тут немає файлів",
"pages.folder.fab.title": "Додати файл",
"pages.folder.untitled": "Папка без назви",
Expand All @@ -2016,10 +2017,4 @@ export default {
"pages.folder.rename-file-dialog.validation.invalid-characters": "Ім'я файлу містить недопустимі символи.",
"pages.folder.fab.upload-file": "Завантажити файл",
"pages.folder.fab.create-document": "Створити документ",
"pages.folder.add-collabora-file-dialog.title": "Створити документ",
"pages.folder.add-collabora-file-dialog.doc-types": "Тип документа",
"pages.folder.add-collabora-file-dialog.untitled-file": "Без назви документ",
"pages.folder.add-collabora-file-dialog.option.text": ".docx (Документ)",
"pages.folder.add-collabora-file-dialog.option.spreadsheet": ".xlsx (Таблиця)",
"pages.folder.add-collabora-file-dialog.option.presentation": ".pptx (Презентація)",
};
23 changes: 23 additions & 0 deletions src/modules/data/board/Card.store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@ import {
import { useCardRestApi } from "./cardActions/cardRestApi.composable";
import { useCardSocketApi } from "./cardActions/cardSocketApi.composable";
import { CardResponse, ContentElementType, PreferredToolResponse, ToolContextType } from "@/serverApi/v3";
import { FileRecordParent } from "@/types/file/File";
import { notifyInfo } from "@data-app";
import { useEnvConfig } from "@data-env";
import { CollaboraFileType, useFileStorageApi } from "@data-file";
import { useSharedEditMode, useSharedLastCreatedElement } from "@util-board";
import { defineStore } from "pinia";
import { nextTick, Ref, ref } from "vue";
Expand All @@ -35,6 +37,7 @@ export const useCardStore = defineStore("cardStore", () => {

const { setFocus, forceFocus } = useBoardFocusHandler();
const { setEditModeId, editModeId } = useSharedEditMode();
const { uploadCollaboraFile } = useFileStorageApi();

const fetchCardRequest = socketOrRest.fetchCardRequest;

Expand Down Expand Up @@ -109,6 +112,25 @@ export const useCardStore = defineStore("cardStore", () => {

const createElementRequest = socketOrRest.createElementRequest;

const createFileElementWithCollabora = async (type: CollaboraFileType, fileName: string) => {
if (!editModeId.value) {
return;
}

const element = await createElementRequest({
type: ContentElementType.File,
cardId: editModeId.value,
});
if (!element) {
return;
}

const uploadedCollaboraFile = await uploadCollaboraFile(type, element.id, FileRecordParent.BOARDNODES, fileName);
if (!uploadedCollaboraFile) {
await deleteElementRequest({ elementId: element.id, cardId: editModeId.value });
}
};

const createPreferredElement = (payload: CreateElementRequestPayload, tool: PreferredToolResponse) => {
restApi.createPreferredElement(payload, tool);
};
Expand Down Expand Up @@ -265,5 +287,6 @@ export const useCardStore = defineStore("cardStore", () => {
preferredTools,
isPreferredToolsLoading,
disconnectSocketRequest,
createFileElementWithCollabora,
};
});
106 changes: 106 additions & 0 deletions src/modules/data/board/Card.store.unit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,11 @@ import { cardResponseFactory } from "@@/tests/test-utils/factory/cardResponseFac
import { drawingElementResponseFactory } from "@@/tests/test-utils/factory/drawingElementResponseFactory";
import { useNotificationStore } from "@data-app";
import { CreateElementRequestPayload, useCardStore, useSocketConnection } from "@data-board";
import { CollaboraFileType, useFileStorageApi } from "@data-file";
import { createMock, DeepMocked } from "@golevelup/ts-vitest";
import { createTestingPinia } from "@pinia/testing";
import { useSharedEditMode, useSharedLastCreatedElement } from "@util-board";
import { flushPromises } from "@vue/test-utils";
import { cloneDeep } from "lodash-es";
import { createPinia, setActivePinia } from "pinia";
import type { Mock } from "vitest";
Expand Down Expand Up @@ -49,6 +51,9 @@ const mockedUseSocketConnection = vi.mocked(useSocketConnection);
vi.mock("./BoardFocusHandler.composable");
const mockedBoardFocusHandler = vi.mocked(useBoardFocusHandler);

vi.mock("@data-file");
const mockedFileStorageApi = vi.mocked(useFileStorageApi);

describe("CardStore", () => {
let mockedBoardApiCalls: DeepMocked<ReturnType<typeof useBoardApi>>;
let mockedErrorHandlerCalls: DeepMocked<ReturnType<typeof useErrorHandler>>;
Expand All @@ -59,6 +64,7 @@ describe("CardStore", () => {
let setEditModeId: Mock;
let editModeId: Ref<string | undefined>;
let mockedBoardFocusCalls: DeepMocked<ReturnType<typeof useBoardFocusHandler>>;
let mockedFileStorageActions: DeepMocked<ReturnType<typeof useFileStorageApi>>;

beforeEach(() => {
setActivePinia(createPinia());
Expand Down Expand Up @@ -110,6 +116,11 @@ describe("CardStore", () => {
mockedBoardFocusCalls = createMock<ReturnType<typeof useBoardFocusHandler>>();
mockedBoardFocusHandler.mockReturnValue(mockedBoardFocusCalls);

mockedFileStorageActions = createMock<ReturnType<typeof useFileStorageApi>>({
uploadCollaboraFile: vi.fn(),
});
mockedFileStorageApi.mockReturnValue(mockedFileStorageActions);

setEditModeId = vi.fn();
editModeId = ref(undefined);
mockedSharedEditMode.mockReturnValue({
Expand Down Expand Up @@ -970,4 +981,99 @@ describe("CardStore", () => {
});
});
});

describe("createFileElementWithCollabora", () => {
describe("when a card is in edit mode", () => {
it("should call createElementRequest", () => {
const { cardStore } = setup(false);

editModeId.value = "cardId";
mockedCardRestApiActions.createElementRequest.mockReturnValueOnce(
Promise.resolve({
id: "elementId",
type: ContentElementType.File,
content: {},
})
);
mockedFileStorageActions.uploadCollaboraFile.mockReturnValueOnce(Promise.resolve({ id: "fileId" }));
cardStore.createFileElementWithCollabora(CollaboraFileType.Text, "fileName.docx");

expect(mockedCardRestApiActions.createElementRequest).toHaveBeenCalled();
});

it("should call uploadCollaboraFile", async () => {
const { cardStore } = setup(false);

editModeId.value = "cardId";
mockedCardRestApiActions.createElementRequest.mockReturnValueOnce(
Promise.resolve({
id: "elementId",
type: ContentElementType.File,
content: {},
})
);
mockedFileStorageActions.uploadCollaboraFile.mockReturnValueOnce(Promise.resolve({ id: "fileId" }));
await cardStore.createFileElementWithCollabora(CollaboraFileType.Text, "fileName.docx");

expect(mockedFileStorageActions.uploadCollaboraFile).toHaveBeenCalled();
});

describe("when element creation fails", () => {
it("should not call uploadCollaboraFile", async () => {
const { cardStore } = setup(false);

editModeId.value = "cardId";
mockedCardRestApiActions.createElementRequest.mockReturnValueOnce(undefined);
await cardStore.createFileElementWithCollabora(CollaboraFileType.Text, "fileName.docx");

expect(mockedFileStorageActions.uploadCollaboraFile).not.toHaveBeenCalled();
});
});

describe("when uploading collabora file fails", () => {
it("should delete created element", async () => {
const { cardStore } = setup(false);

editModeId.value = "cardId";
mockedCardRestApiActions.createElementRequest.mockReturnValueOnce(
Promise.resolve({
id: "elementId",
type: ContentElementType.File,
content: {},
})
);
mockedFileStorageActions.uploadCollaboraFile.mockReturnValueOnce(Promise.resolve(undefined));
await cardStore.createFileElementWithCollabora(CollaboraFileType.Text, "fileName.docx");
await flushPromises();

expect(mockedCardRestApiActions.deleteElementRequest).toHaveBeenCalled();
});
});
});

describe("when no card is in edit mode", () => {
it("should not call createElementRequest", () => {
const { cardStore } = setup(false);

cardStore.createFileElementWithCollabora(CollaboraFileType.Text, "fileName.docx");

expect(mockedCardRestApiActions.createElementRequest).not.toHaveBeenCalled();
});

it("should not call uploadCollaboraFile", async () => {
const { cardStore } = setup(false);

mockedCardRestApiActions.createElementRequest.mockReturnValueOnce(
Promise.resolve({
id: "elementId",
type: ContentElementType.File,
content: {},
})
);
await cardStore.createFileElementWithCollabora(CollaboraFileType.Text, "fileName.docx");

expect(mockedFileStorageActions.uploadCollaboraFile).not.toHaveBeenCalled();
});
});
});
});
Loading
Loading