@sync-in/server 1.3.9 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +34 -0
- package/README.md +5 -3
- package/environment/environment.dist.yaml +2 -0
- package/package.json +6 -6
- package/server/app.bootstrap.js +9 -0
- package/server/app.bootstrap.js.map +1 -1
- package/server/app.service.spec.js +44 -19
- package/server/app.service.spec.js.map +1 -1
- package/server/applications/comments/comments.controller.spec.js +103 -4
- package/server/applications/comments/comments.controller.spec.js.map +1 -1
- package/server/applications/comments/services/comments-manager.service.spec.js +409 -9
- package/server/applications/comments/services/comments-manager.service.spec.js.map +1 -1
- package/server/applications/files/adapters/files-indexer-mysql.service.spec.js +333 -0
- package/server/applications/files/adapters/files-indexer-mysql.service.spec.js.map +1 -0
- package/server/applications/files/constants/files.js +0 -23
- package/server/applications/files/constants/files.js.map +1 -1
- package/server/applications/files/constants/only-office.js +8 -0
- package/server/applications/files/constants/only-office.js.map +1 -1
- package/server/applications/files/constants/routes.js +6 -1
- package/server/applications/files/constants/routes.js.map +1 -1
- package/server/applications/files/files-only-office.controller.js +11 -0
- package/server/applications/files/files-only-office.controller.js.map +1 -1
- package/server/applications/files/files-only-office.controller.spec.js +97 -3
- package/server/applications/files/files-only-office.controller.spec.js.map +1 -1
- package/server/applications/files/files-tasks.controller.spec.js +91 -1
- package/server/applications/files/files-tasks.controller.spec.js.map +1 -1
- package/server/applications/files/files.config.js +5 -0
- package/server/applications/files/files.config.js.map +1 -1
- package/server/applications/files/files.controller.spec.js +268 -46
- package/server/applications/files/files.controller.spec.js.map +1 -1
- package/server/applications/files/guards/files-only-office.guard.spec.js +77 -1
- package/server/applications/files/guards/files-only-office.guard.spec.js.map +1 -1
- package/server/applications/files/guards/files-only-office.strategy.js +0 -1
- package/server/applications/files/guards/files-only-office.strategy.js.map +1 -1
- package/server/applications/files/services/files-only-office-manager.service.js +5 -0
- package/server/applications/files/services/files-only-office-manager.service.js.map +1 -1
- package/server/applications/links/links.controller.spec.js +91 -58
- package/server/applications/links/links.controller.spec.js.map +1 -1
- package/server/applications/links/services/links-manager.service.js +4 -6
- package/server/applications/links/services/links-manager.service.js.map +1 -1
- package/server/applications/links/services/links-manager.service.spec.js +378 -14
- package/server/applications/links/services/links-manager.service.spec.js.map +1 -1
- package/server/applications/links/services/links-queries.service.js +1 -1
- package/server/applications/links/services/links-queries.service.js.map +1 -1
- package/server/applications/notifications/notifications.controller.spec.js +56 -1
- package/server/applications/notifications/notifications.controller.spec.js.map +1 -1
- package/server/applications/notifications/services/notifications-manager.service.spec.js +461 -5
- package/server/applications/notifications/services/notifications-manager.service.spec.js.map +1 -1
- package/server/applications/shares/services/shares-manager.service.spec.js +590 -14
- package/server/applications/shares/services/shares-manager.service.spec.js.map +1 -1
- package/server/applications/spaces/guards/space.guard.spec.js +153 -18
- package/server/applications/spaces/guards/space.guard.spec.js.map +1 -1
- package/server/applications/spaces/services/spaces-browser.service.js +7 -7
- package/server/applications/spaces/services/spaces-browser.service.js.map +1 -1
- package/server/applications/spaces/services/spaces-manager.service.js +17 -17
- package/server/applications/spaces/services/spaces-manager.service.js.map +1 -1
- package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js +120 -0
- package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js.map +1 -0
- package/server/applications/sync/services/sync-clients-manager.service.spec.js +548 -8
- package/server/applications/sync/services/sync-clients-manager.service.spec.js.map +1 -1
- package/server/applications/sync/services/sync-manager.service.spec.js +837 -5
- package/server/applications/sync/services/sync-manager.service.spec.js.map +1 -1
- package/server/applications/sync/services/sync-paths-manager.service.spec.js +900 -7
- package/server/applications/sync/services/sync-paths-manager.service.spec.js.map +1 -1
- package/server/applications/sync/utils/routes.js +1 -1
- package/server/applications/sync/utils/routes.js.map +1 -1
- package/server/applications/users/guards/permissions.guard.js +4 -4
- package/server/applications/users/guards/permissions.guard.js.map +1 -1
- package/server/applications/users/guards/permissions.guard.spec.js +6 -6
- package/server/applications/users/guards/permissions.guard.spec.js.map +1 -1
- package/server/applications/users/guards/roles.guard.js +1 -1
- package/server/applications/users/guards/roles.guard.js.map +1 -1
- package/server/applications/users/models/user.model.js +1 -1
- package/server/applications/users/models/user.model.js.map +1 -1
- package/server/applications/users/services/admin-users-manager.service.js +22 -24
- package/server/applications/users/services/admin-users-manager.service.js.map +1 -1
- package/server/applications/users/services/admin-users-manager.service.spec.js +763 -17
- package/server/applications/users/services/admin-users-manager.service.spec.js.map +1 -1
- package/server/applications/users/services/users-manager.service.js +1 -1
- package/server/applications/users/services/users-manager.service.js.map +1 -1
- package/server/applications/users/services/users-manager.service.spec.js +938 -49
- package/server/applications/users/services/users-manager.service.spec.js.map +1 -1
- package/server/applications/webdav/decorators/if-header.decorator.js +4 -1
- package/server/applications/webdav/decorators/if-header.decorator.js.map +1 -1
- package/server/applications/webdav/filters/webdav.filter.spec.js +77 -0
- package/server/applications/webdav/filters/webdav.filter.spec.js.map +1 -0
- package/server/applications/webdav/guards/webdav-protocol.guard.js +3 -7
- package/server/applications/webdav/guards/webdav-protocol.guard.js.map +1 -1
- package/server/applications/webdav/guards/webdav-protocol.guard.spec.js +580 -0
- package/server/applications/webdav/guards/webdav-protocol.guard.spec.js.map +1 -0
- package/server/applications/webdav/services/webdav-methods.service.spec.js +1582 -3
- package/server/applications/webdav/services/webdav-methods.service.spec.js.map +1 -1
- package/server/applications/webdav/services/webdav-spaces.service.spec.js +390 -2
- package/server/applications/webdav/services/webdav-spaces.service.spec.js.map +1 -1
- package/server/applications/webdav/webdav.controller.js +2 -2
- package/server/applications/webdav/webdav.controller.js.map +1 -1
- package/server/authentication/guards/auth-basic.guard.js.map +1 -1
- package/server/authentication/guards/auth-basic.guard.spec.js +38 -2
- package/server/authentication/guards/auth-basic.guard.spec.js.map +1 -1
- package/server/authentication/guards/auth-basic.strategy.js +0 -1
- package/server/authentication/guards/auth-basic.strategy.js.map +1 -1
- package/server/authentication/guards/auth-digest.guard.js +1 -2
- package/server/authentication/guards/auth-digest.guard.js.map +1 -1
- package/server/authentication/guards/auth-local.guard.js.map +1 -1
- package/server/authentication/guards/auth-local.guard.spec.js +7 -5
- package/server/authentication/guards/auth-local.guard.spec.js.map +1 -1
- package/server/authentication/guards/auth-local.strategy.js +0 -1
- package/server/authentication/guards/auth-local.strategy.js.map +1 -1
- package/server/authentication/guards/auth-token-access.guard.spec.js +30 -0
- package/server/authentication/guards/auth-token-access.guard.spec.js.map +1 -1
- package/server/authentication/guards/auth-token-access.strategy.js +0 -1
- package/server/authentication/guards/auth-token-access.strategy.js.map +1 -1
- package/server/authentication/guards/auth-token-refresh.strategy.js +0 -1
- package/server/authentication/guards/auth-token-refresh.strategy.js.map +1 -1
- package/server/authentication/services/auth-methods/auth-method-database.service.js +1 -1
- package/server/authentication/services/auth-methods/auth-method-database.service.js.map +1 -1
- package/server/authentication/services/auth-methods/auth-method-database.service.spec.js +8 -6
- package/server/authentication/services/auth-methods/auth-method-database.service.spec.js.map +1 -1
- package/server/authentication/services/auth-methods/auth-method-ldap.service.js +2 -2
- package/server/authentication/services/auth-methods/auth-method-ldap.service.js.map +1 -1
- package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js +500 -5
- package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js.map +1 -1
- package/server/configuration/config.loader.js +0 -3
- package/server/configuration/config.loader.js.map +1 -1
- package/server/infrastructure/context/interceptors/context.interceptor.spec.js +135 -0
- package/server/infrastructure/context/interceptors/context.interceptor.spec.js.map +1 -0
- package/server/infrastructure/context/services/context-manager.service.spec.js +98 -0
- package/server/infrastructure/context/services/context-manager.service.spec.js.map +1 -0
- package/server/infrastructure/database/constants.js +0 -1
- package/server/infrastructure/database/constants.js.map +1 -1
- package/server/infrastructure/database/scripts/seed/usersgroups.js +3 -3
- package/server/infrastructure/database/scripts/seed/usersgroups.js.map +1 -1
- package/server/infrastructure/mailer/mailer.service.js +20 -19
- package/server/infrastructure/mailer/mailer.service.js.map +1 -1
- package/server/infrastructure/mailer/mailer.service.spec.js +176 -0
- package/server/infrastructure/mailer/mailer.service.spec.js.map +1 -0
- package/static/3rdpartylicenses.txt +26 -26
- package/static/assets/pdfjs/build/pdf.mjs +1177 -255
- package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
- package/static/assets/pdfjs/build/pdf.sandbox.mjs +25 -2
- package/static/assets/pdfjs/build/pdf.sandbox.mjs.map +1 -1
- package/static/assets/pdfjs/build/pdf.worker.mjs +140 -16
- package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
- package/static/assets/pdfjs/version +1 -1
- package/static/assets/pdfjs/web/debugger.css +31 -0
- package/static/assets/pdfjs/web/debugger.mjs +144 -2
- package/static/assets/pdfjs/web/images/comment-editButton.svg +6 -1
- package/static/assets/pdfjs/web/locale/ach/viewer.ftl +0 -63
- package/static/assets/pdfjs/web/locale/af/viewer.ftl +0 -71
- package/static/assets/pdfjs/web/locale/an/viewer.ftl +0 -63
- package/static/assets/pdfjs/web/locale/ast/viewer.ftl +0 -60
- package/static/assets/pdfjs/web/locale/az/viewer.ftl +0 -63
- package/static/assets/pdfjs/web/locale/be/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/bg/viewer.ftl +0 -37
- package/static/assets/pdfjs/web/locale/bn/viewer.ftl +0 -63
- package/static/assets/pdfjs/web/locale/bo/viewer.ftl +0 -63
- package/static/assets/pdfjs/web/locale/br/viewer.ftl +0 -37
- package/static/assets/pdfjs/web/locale/brx/viewer.ftl +0 -63
- package/static/assets/pdfjs/web/locale/bs/viewer.ftl +22 -0
- package/static/assets/pdfjs/web/locale/ca/viewer.ftl +0 -54
- package/static/assets/pdfjs/web/locale/cak/viewer.ftl +0 -54
- package/static/assets/pdfjs/web/locale/ckb/viewer.ftl +0 -63
- package/static/assets/pdfjs/web/locale/cs/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/cy/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/da/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/de/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/el/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/en-CA/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/en-GB/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/en-US/viewer.ftl +25 -0
- package/static/assets/pdfjs/web/locale/eo/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/es-AR/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/es-CL/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/es-MX/viewer.ftl +0 -6
- package/static/assets/pdfjs/web/locale/et/viewer.ftl +0 -57
- package/static/assets/pdfjs/web/locale/fa/viewer.ftl +0 -37
- package/static/assets/pdfjs/web/locale/ff/viewer.ftl +0 -63
- package/static/assets/pdfjs/web/locale/fi/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/fr/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/fy-NL/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/ga-IE/viewer.ftl +0 -71
- package/static/assets/pdfjs/web/locale/gd/viewer.ftl +0 -54
- package/static/assets/pdfjs/web/locale/gl/viewer.ftl +8 -0
- package/static/assets/pdfjs/web/locale/gn/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/gu-IN/viewer.ftl +0 -63
- package/static/assets/pdfjs/web/locale/he/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/hi-IN/viewer.ftl +0 -60
- package/static/assets/pdfjs/web/locale/hsb/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/hu/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/hy-AM/viewer.ftl +0 -49
- package/static/assets/pdfjs/web/locale/hye/viewer.ftl +0 -60
- package/static/assets/pdfjs/web/locale/ia/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/is/viewer.ftl +0 -3
- package/static/assets/pdfjs/web/locale/it/viewer.ftl +31 -0
- package/static/assets/pdfjs/web/locale/ja/viewer.ftl +8 -0
- package/static/assets/pdfjs/web/locale/ka/viewer.ftl +48 -10
- package/static/assets/pdfjs/web/locale/kab/viewer.ftl +5 -0
- package/static/assets/pdfjs/web/locale/kk/viewer.ftl +8 -0
- package/static/assets/pdfjs/web/locale/km/viewer.ftl +0 -63
- package/static/assets/pdfjs/web/locale/kn/viewer.ftl +0 -71
- package/static/assets/pdfjs/web/locale/ko/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/lij/viewer.ftl +0 -63
- package/static/assets/pdfjs/web/locale/lo/viewer.ftl +0 -54
- package/static/assets/pdfjs/web/locale/lt/viewer.ftl +0 -60
- package/static/assets/pdfjs/web/locale/ltg/viewer.ftl +0 -63
- package/static/assets/pdfjs/web/locale/lv/viewer.ftl +0 -63
- package/static/assets/pdfjs/web/locale/meh/viewer.ftl +0 -75
- package/static/assets/pdfjs/web/locale/mk/viewer.ftl +0 -63
- package/static/assets/pdfjs/web/locale/ml/viewer.ftl +0 -3
- package/static/assets/pdfjs/web/locale/mr/viewer.ftl +0 -63
- package/static/assets/pdfjs/web/locale/ms/viewer.ftl +0 -63
- package/static/assets/pdfjs/web/locale/my/viewer.ftl +0 -71
- package/static/assets/pdfjs/web/locale/nb-NO/viewer.ftl +44 -6
- package/static/assets/pdfjs/web/locale/ne-NP/viewer.ftl +0 -71
- package/static/assets/pdfjs/web/locale/nl/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/nn-NO/viewer.ftl +45 -1
- package/static/assets/pdfjs/web/locale/oc/viewer.ftl +0 -31
- package/static/assets/pdfjs/web/locale/pa-IN/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/pl/viewer.ftl +39 -1
- package/static/assets/pdfjs/web/locale/pt-BR/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/ro/viewer.ftl +355 -1
- package/static/assets/pdfjs/web/locale/ru/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/sat/viewer.ftl +0 -54
- package/static/assets/pdfjs/web/locale/sc/viewer.ftl +0 -38
- package/static/assets/pdfjs/web/locale/scn/viewer.ftl +0 -92
- package/static/assets/pdfjs/web/locale/sco/viewer.ftl +0 -60
- package/static/assets/pdfjs/web/locale/si/viewer.ftl +0 -51
- package/static/assets/pdfjs/web/locale/sk/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/skr/viewer.ftl +0 -27
- package/static/assets/pdfjs/web/locale/sl/viewer.ftl +8 -0
- package/static/assets/pdfjs/web/locale/son/viewer.ftl +0 -71
- package/static/assets/pdfjs/web/locale/sr/viewer.ftl +0 -33
- package/static/assets/pdfjs/web/locale/sv-SE/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/szl/viewer.ftl +0 -63
- package/static/assets/pdfjs/web/locale/ta/viewer.ftl +0 -63
- package/static/assets/pdfjs/web/locale/te/viewer.ftl +0 -60
- package/static/assets/pdfjs/web/locale/tg/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/tl/viewer.ftl +0 -63
- package/static/assets/pdfjs/web/locale/tr/viewer.ftl +40 -2
- package/static/assets/pdfjs/web/locale/trs/viewer.ftl +0 -72
- package/static/assets/pdfjs/web/locale/ur/viewer.ftl +0 -60
- package/static/assets/pdfjs/web/locale/uz/viewer.ftl +0 -71
- package/static/assets/pdfjs/web/locale/vi/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/wo/viewer.ftl +0 -77
- package/static/assets/pdfjs/web/locale/xh/viewer.ftl +0 -71
- package/static/assets/pdfjs/web/locale/zh-CN/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/locale/zh-TW/viewer.ftl +38 -0
- package/static/assets/pdfjs/web/viewer.css +649 -120
- package/static/assets/pdfjs/web/viewer.html +19 -0
- package/static/assets/pdfjs/web/viewer.mjs +489 -38
- package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
- package/static/chunk-22EANI6R.js +1 -0
- package/static/{chunk-KFM544CA.js → chunk-2UWN7IQF.js} +1 -1
- package/static/{chunk-N3T57OCA.js → chunk-2VSPDSJS.js} +1 -1
- package/static/{chunk-HUWQHCUX.js → chunk-34UZ7SYI.js} +1 -1
- package/static/{chunk-MWFRZBJD.js → chunk-45UQJGGY.js} +1 -1
- package/static/{chunk-LYTD6AJE.js → chunk-5TEXH3LJ.js} +1 -1
- package/static/{chunk-4KESSWTF.js → chunk-66FMKVJX.js} +1 -1
- package/static/{chunk-XE5YHU5J.js → chunk-BIUNUYZ5.js} +1 -1
- package/static/chunk-CK4BY2NX.js +27 -0
- package/static/{chunk-QTW62OKJ.js → chunk-CSBDAY77.js} +1 -1
- package/static/{chunk-XUZSYWRF.js → chunk-CXXPLBDZ.js} +1 -1
- package/static/{chunk-ZTXJC5IC.js → chunk-EILQG525.js} +1 -1
- package/static/{chunk-FJFNDK67.js → chunk-ENWABUR4.js} +1 -1
- package/static/{chunk-WL65GYD5.js → chunk-FR4AOLYL.js} +4 -4
- package/static/chunk-HW2H3ISM.js +559 -0
- package/static/{chunk-BW5PQAKK.js → chunk-HYMDGBZL.js} +1 -1
- package/static/{chunk-WLPYIJFI.js → chunk-IML5UYQG.js} +1 -1
- package/static/{chunk-Z5X7LVMZ.js → chunk-IPSMJHMQ.js} +1 -1
- package/static/{chunk-3S4WNZ2T.js → chunk-JVCWYSNP.js} +1 -1
- package/static/{chunk-CLSVDV7J.js → chunk-KGPCIUD2.js} +1 -1
- package/static/{chunk-O4AQBQBF.js → chunk-KQZJSEM3.js} +1 -1
- package/static/{chunk-MK7WZG3F.js → chunk-NPEMJJIU.js} +1 -1
- package/static/{chunk-4TEHM3AS.js → chunk-OEFBC4GG.js} +1 -1
- package/static/{chunk-O67RFAWU.js → chunk-P734A3XZ.js} +1 -1
- package/static/{chunk-SRLMFJ7C.js → chunk-RASR4CK6.js} +1 -1
- package/static/{chunk-S5WXHO6D.js → chunk-RFMOUC22.js} +1 -1
- package/static/{chunk-TTQ37MUV.js → chunk-RSS6GYNE.js} +1 -1
- package/static/{chunk-3FX6ISDY.js → chunk-SBOQGGZX.js} +1 -1
- package/static/{chunk-NV2MEIWP.js → chunk-SJAFPXQV.js} +1 -1
- package/static/{chunk-PYSFXLMV.js → chunk-XTYGMF2V.js} +1 -1
- package/static/{chunk-ZFKCGL6X.js → chunk-YCWMV2YR.js} +1 -1
- package/static/{chunk-LB7B5RIV.js → chunk-YGD22MWQ.js} +1 -1
- package/static/{chunk-MTRNPGS4.js → chunk-ZC5NIT55.js} +1 -1
- package/static/{chunk-SKDQM65G.js → chunk-ZVY37DKS.js} +1 -1
- package/static/index.html +2 -2
- package/static/main-N5CZRHAO.js +7 -0
- package/static/styles-FYUSO6OJ.css +1 -0
- package/static/chunk-AY2GOSJ2.js +0 -24
- package/static/chunk-RSNLYAN6.js +0 -560
- package/static/chunk-ZZ3LHYOY.js +0 -1
- package/static/main-RREKR34B.js +0 -10
- package/static/styles-3DONJ2Z4.css +0 -1
|
@@ -15,7 +15,15 @@ const _filesmethodsservice = require("./services/files-methods.service");
|
|
|
15
15
|
const _filesonlyofficemanagerservice = require("./services/files-only-office-manager.service");
|
|
16
16
|
describe(_filesonlyofficecontroller.FilesOnlyOfficeController.name, ()=>{
|
|
17
17
|
let controller;
|
|
18
|
-
|
|
18
|
+
const filesOnlyOfficeManagerMock = {
|
|
19
|
+
getSettings: jest.fn(),
|
|
20
|
+
callBack: jest.fn()
|
|
21
|
+
};
|
|
22
|
+
const filesMethodsMock = {
|
|
23
|
+
headOrGet: jest.fn()
|
|
24
|
+
};
|
|
25
|
+
beforeEach(async ()=>{
|
|
26
|
+
jest.clearAllMocks();
|
|
19
27
|
const module = await _testing.Test.createTestingModule({
|
|
20
28
|
controllers: [
|
|
21
29
|
_filesonlyofficecontroller.FilesOnlyOfficeController
|
|
@@ -23,11 +31,11 @@ describe(_filesonlyofficecontroller.FilesOnlyOfficeController.name, ()=>{
|
|
|
23
31
|
providers: [
|
|
24
32
|
{
|
|
25
33
|
provide: _filesonlyofficemanagerservice.FilesOnlyOfficeManager,
|
|
26
|
-
useValue:
|
|
34
|
+
useValue: filesOnlyOfficeManagerMock
|
|
27
35
|
},
|
|
28
36
|
{
|
|
29
37
|
provide: _filesmethodsservice.FilesMethods,
|
|
30
|
-
useValue:
|
|
38
|
+
useValue: filesMethodsMock
|
|
31
39
|
},
|
|
32
40
|
{
|
|
33
41
|
provide: _spacesmanagerservice.SpacesManager,
|
|
@@ -42,6 +50,92 @@ describe(_filesonlyofficecontroller.FilesOnlyOfficeController.name, ()=>{
|
|
|
42
50
|
it('should be defined', ()=>{
|
|
43
51
|
expect(controller).toBeDefined();
|
|
44
52
|
});
|
|
53
|
+
describe('onlyOfficeSettings', ()=>{
|
|
54
|
+
it('should call manager with default mode "view" when mode is undefined', async ()=>{
|
|
55
|
+
const user = {
|
|
56
|
+
id: 1
|
|
57
|
+
};
|
|
58
|
+
const space = {
|
|
59
|
+
id: 'space-1'
|
|
60
|
+
};
|
|
61
|
+
const req = {
|
|
62
|
+
headers: {},
|
|
63
|
+
params: {},
|
|
64
|
+
query: {}
|
|
65
|
+
};
|
|
66
|
+
const expected = {
|
|
67
|
+
config: 'ok',
|
|
68
|
+
mode: 'view'
|
|
69
|
+
};
|
|
70
|
+
filesOnlyOfficeManagerMock.getSettings.mockResolvedValue(expected);
|
|
71
|
+
const result = await controller.onlyOfficeSettings(user, space, undefined, req);
|
|
72
|
+
expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledTimes(1);
|
|
73
|
+
expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledWith(user, space, 'view', req);
|
|
74
|
+
expect(result).toBe(expected);
|
|
75
|
+
});
|
|
76
|
+
it('should pass provided mode to manager', async ()=>{
|
|
77
|
+
const user = {
|
|
78
|
+
id: 2
|
|
79
|
+
};
|
|
80
|
+
const space = {
|
|
81
|
+
id: 'space-2'
|
|
82
|
+
};
|
|
83
|
+
const req = {
|
|
84
|
+
headers: {
|
|
85
|
+
'x-test': '1'
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
const expected = {
|
|
89
|
+
config: 'ok',
|
|
90
|
+
mode: 'edit'
|
|
91
|
+
};
|
|
92
|
+
filesOnlyOfficeManagerMock.getSettings.mockResolvedValue(expected);
|
|
93
|
+
const result = await controller.onlyOfficeSettings(user, space, 'edit', req);
|
|
94
|
+
expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledWith(user, space, 'edit', req);
|
|
95
|
+
expect(result).toBe(expected);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
describe('onlyOfficeDocument', ()=>{
|
|
99
|
+
it('should delegate to filesMethods.headOrGet with req and res', async ()=>{
|
|
100
|
+
const req = {
|
|
101
|
+
params: {
|
|
102
|
+
'*': 'path/to/file'
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
const res = {
|
|
106
|
+
header: jest.fn(),
|
|
107
|
+
status: jest.fn().mockReturnThis()
|
|
108
|
+
};
|
|
109
|
+
const stream = {
|
|
110
|
+
readable: true
|
|
111
|
+
};
|
|
112
|
+
filesMethodsMock.headOrGet.mockResolvedValue(stream);
|
|
113
|
+
const result = await controller.onlyOfficeDocument(req, res);
|
|
114
|
+
expect(filesMethodsMock.headOrGet).toHaveBeenCalledTimes(1);
|
|
115
|
+
expect(filesMethodsMock.headOrGet).toHaveBeenCalledWith(req, res);
|
|
116
|
+
expect(result).toBe(stream);
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
describe('onlyOfficeCallBack', ()=>{
|
|
120
|
+
it('should call manager.callBack with user, space, token and fileId (fid)', async ()=>{
|
|
121
|
+
const user = {
|
|
122
|
+
id: 3
|
|
123
|
+
};
|
|
124
|
+
const space = {
|
|
125
|
+
id: 'space-3'
|
|
126
|
+
};
|
|
127
|
+
const token = 'jwt-token';
|
|
128
|
+
const fileId = 'file-123';
|
|
129
|
+
const expected = {
|
|
130
|
+
ok: true
|
|
131
|
+
};
|
|
132
|
+
filesOnlyOfficeManagerMock.callBack.mockResolvedValue(expected);
|
|
133
|
+
const result = await controller.onlyOfficeCallBack(user, space, token, fileId);
|
|
134
|
+
expect(filesOnlyOfficeManagerMock.callBack).toHaveBeenCalledTimes(1);
|
|
135
|
+
expect(filesOnlyOfficeManagerMock.callBack).toHaveBeenCalledWith(user, space, token, fileId);
|
|
136
|
+
expect(result).toBe(expected);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
45
139
|
});
|
|
46
140
|
|
|
47
141
|
//# sourceMappingURL=files-only-office.controller.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../backend/src/applications/files/files-only-office.controller.spec.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { ContextInterceptor } from '../../infrastructure/context/interceptors/context.interceptor'\nimport { ContextManager } from '../../infrastructure/context/services/context-manager.service'\nimport { SpacesManager } from '../spaces/services/spaces-manager.service'\nimport { FilesOnlyOfficeController } from './files-only-office.controller'\nimport { FilesMethods } from './services/files-methods.service'\nimport { FilesOnlyOfficeManager } from './services/files-only-office-manager.service'\n\ndescribe(FilesOnlyOfficeController.name, () => {\n let controller: FilesOnlyOfficeController\n\n
|
|
1
|
+
{"version":3,"sources":["../../../../backend/src/applications/files/files-only-office.controller.spec.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { ContextInterceptor } from '../../infrastructure/context/interceptors/context.interceptor'\nimport { ContextManager } from '../../infrastructure/context/services/context-manager.service'\nimport { SpacesManager } from '../spaces/services/spaces-manager.service'\nimport { FilesOnlyOfficeController } from './files-only-office.controller'\nimport { FilesMethods } from './services/files-methods.service'\nimport { FilesOnlyOfficeManager } from './services/files-only-office-manager.service'\n\ndescribe(FilesOnlyOfficeController.name, () => {\n let controller: FilesOnlyOfficeController\n\n const filesOnlyOfficeManagerMock = {\n getSettings: jest.fn(),\n callBack: jest.fn()\n }\n\n const filesMethodsMock = {\n headOrGet: jest.fn()\n }\n\n beforeEach(async () => {\n jest.clearAllMocks()\n const module: TestingModule = await Test.createTestingModule({\n controllers: [FilesOnlyOfficeController],\n providers: [\n { provide: FilesOnlyOfficeManager, useValue: filesOnlyOfficeManagerMock },\n { provide: FilesMethods, useValue: filesMethodsMock },\n { provide: SpacesManager, useValue: {} },\n ContextManager,\n ContextInterceptor\n ]\n }).compile()\n\n controller = module.get<FilesOnlyOfficeController>(FilesOnlyOfficeController)\n })\n\n it('should be defined', () => {\n expect(controller).toBeDefined()\n })\n\n describe('onlyOfficeSettings', () => {\n it('should call manager with default mode \"view\" when mode is undefined', async () => {\n const user: any = { id: 1 }\n const space: any = { id: 'space-1' }\n const req: any = { headers: {}, params: {}, query: {} }\n const expected = { config: 'ok', mode: 'view' }\n filesOnlyOfficeManagerMock.getSettings.mockResolvedValue(expected)\n\n const result = await controller.onlyOfficeSettings(user, space, undefined as any, req)\n\n expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledTimes(1)\n expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledWith(user, space, 'view', req)\n expect(result).toBe(expected)\n })\n\n it('should pass provided mode to manager', async () => {\n const user: any = { id: 2 }\n const space: any = { id: 'space-2' }\n const req: any = { headers: { 'x-test': '1' } }\n const expected = { config: 'ok', mode: 'edit' }\n filesOnlyOfficeManagerMock.getSettings.mockResolvedValue(expected)\n\n const result = await controller.onlyOfficeSettings(user, space, 'edit', req)\n\n expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledWith(user, space, 'edit', req)\n expect(result).toBe(expected)\n })\n })\n\n describe('onlyOfficeDocument', () => {\n it('should delegate to filesMethods.headOrGet with req and res', async () => {\n const req: any = { params: { '*': 'path/to/file' } }\n const res: any = { header: jest.fn(), status: jest.fn().mockReturnThis() }\n const stream: any = { readable: true }\n filesMethodsMock.headOrGet.mockResolvedValue(stream)\n\n const result = await controller.onlyOfficeDocument(req, res)\n\n expect(filesMethodsMock.headOrGet).toHaveBeenCalledTimes(1)\n expect(filesMethodsMock.headOrGet).toHaveBeenCalledWith(req, res)\n expect(result).toBe(stream)\n })\n })\n\n describe('onlyOfficeCallBack', () => {\n it('should call manager.callBack with user, space, token and fileId (fid)', async () => {\n const user: any = { id: 3 }\n const space: any = { id: 'space-3' }\n const token = 'jwt-token'\n const fileId = 'file-123'\n const expected = { ok: true }\n filesOnlyOfficeManagerMock.callBack.mockResolvedValue(expected)\n\n const result = await controller.onlyOfficeCallBack(user, space, token, fileId)\n\n expect(filesOnlyOfficeManagerMock.callBack).toHaveBeenCalledTimes(1)\n expect(filesOnlyOfficeManagerMock.callBack).toHaveBeenCalledWith(user, space, token, fileId)\n expect(result).toBe(expected)\n })\n })\n})\n"],"names":["describe","FilesOnlyOfficeController","name","controller","filesOnlyOfficeManagerMock","getSettings","jest","fn","callBack","filesMethodsMock","headOrGet","beforeEach","clearAllMocks","module","Test","createTestingModule","controllers","providers","provide","FilesOnlyOfficeManager","useValue","FilesMethods","SpacesManager","ContextManager","ContextInterceptor","compile","get","it","expect","toBeDefined","user","id","space","req","headers","params","query","expected","config","mode","mockResolvedValue","result","onlyOfficeSettings","undefined","toHaveBeenCalledTimes","toHaveBeenCalledWith","toBe","res","header","status","mockReturnThis","stream","readable","onlyOfficeDocument","token","fileId","ok","onlyOfficeCallBack"],"mappings":"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"}
|
|
@@ -13,7 +13,13 @@ const _filesmethodsservice = require("./services/files-methods.service");
|
|
|
13
13
|
const _filestasksmanagerservice = require("./services/files-tasks-manager.service");
|
|
14
14
|
describe(_filestaskscontroller.FilesTasksController.name, ()=>{
|
|
15
15
|
let controller;
|
|
16
|
+
let filesTasksManager;
|
|
16
17
|
beforeAll(async ()=>{
|
|
18
|
+
filesTasksManager = {
|
|
19
|
+
getTasks: jest.fn(),
|
|
20
|
+
deleteTasks: jest.fn(),
|
|
21
|
+
downloadArchive: jest.fn()
|
|
22
|
+
};
|
|
17
23
|
const module = await _testing.Test.createTestingModule({
|
|
18
24
|
controllers: [
|
|
19
25
|
_filestaskscontroller.FilesTasksController
|
|
@@ -27,14 +33,98 @@ describe(_filestaskscontroller.FilesTasksController.name, ()=>{
|
|
|
27
33
|
provide: _filesmethodsservice.FilesMethods,
|
|
28
34
|
useValue: {}
|
|
29
35
|
},
|
|
30
|
-
|
|
36
|
+
{
|
|
37
|
+
provide: _filestasksmanagerservice.FilesTasksManager,
|
|
38
|
+
useValue: filesTasksManager
|
|
39
|
+
}
|
|
31
40
|
]
|
|
32
41
|
}).compile();
|
|
33
42
|
controller = module.get(_filestaskscontroller.FilesTasksController);
|
|
34
43
|
});
|
|
44
|
+
beforeEach(()=>{
|
|
45
|
+
jest.clearAllMocks();
|
|
46
|
+
});
|
|
35
47
|
it('should be defined', ()=>{
|
|
36
48
|
expect(controller).toBeDefined();
|
|
37
49
|
});
|
|
50
|
+
it('getTasks should call FilesTasksManager.getTasks with user.id and taskId and return the value', ()=>{
|
|
51
|
+
const user = {
|
|
52
|
+
id: 'user-1'
|
|
53
|
+
};
|
|
54
|
+
const taskId = 'task-123';
|
|
55
|
+
const expected = [
|
|
56
|
+
{
|
|
57
|
+
id: 'task-123'
|
|
58
|
+
}
|
|
59
|
+
];
|
|
60
|
+
filesTasksManager.getTasks.mockReturnValueOnce(expected);
|
|
61
|
+
const result = controller.getTasks(user, taskId);
|
|
62
|
+
expect(filesTasksManager.getTasks).toHaveBeenCalledTimes(1);
|
|
63
|
+
expect(filesTasksManager.getTasks).toHaveBeenCalledWith('user-1', 'task-123');
|
|
64
|
+
expect(result).toBe(expected);
|
|
65
|
+
});
|
|
66
|
+
it('getTasks without taskId should pass undefined', ()=>{
|
|
67
|
+
const user = {
|
|
68
|
+
id: 'user-2'
|
|
69
|
+
};
|
|
70
|
+
const expected = [
|
|
71
|
+
{
|
|
72
|
+
id: 'task-a'
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: 'task-b'
|
|
76
|
+
}
|
|
77
|
+
];
|
|
78
|
+
filesTasksManager.getTasks.mockReturnValueOnce(expected);
|
|
79
|
+
const result = controller.getTasks(user);
|
|
80
|
+
expect(filesTasksManager.getTasks).toHaveBeenCalledTimes(1);
|
|
81
|
+
expect(filesTasksManager.getTasks).toHaveBeenCalledWith('user-2', undefined);
|
|
82
|
+
expect(result).toBe(expected);
|
|
83
|
+
});
|
|
84
|
+
it('deleteTasks should call FilesTasksManager.deleteTasks with user and taskId and return the value', ()=>{
|
|
85
|
+
const user = {
|
|
86
|
+
id: 'user-3',
|
|
87
|
+
name: 'Alice'
|
|
88
|
+
};
|
|
89
|
+
const taskId = 'task-del-1';
|
|
90
|
+
const expected = {
|
|
91
|
+
deleted: true
|
|
92
|
+
};
|
|
93
|
+
filesTasksManager.deleteTasks.mockReturnValueOnce(expected);
|
|
94
|
+
const result = controller.deleteTasks(user, taskId);
|
|
95
|
+
expect(filesTasksManager.deleteTasks).toHaveBeenCalledTimes(1);
|
|
96
|
+
expect(filesTasksManager.deleteTasks).toHaveBeenCalledWith(user, 'task-del-1');
|
|
97
|
+
expect(result).toBe(expected);
|
|
98
|
+
});
|
|
99
|
+
it('deleteTasks without taskId must pass undefined', ()=>{
|
|
100
|
+
const user = {
|
|
101
|
+
id: 'user-4'
|
|
102
|
+
};
|
|
103
|
+
const expected = {
|
|
104
|
+
deletedAll: true
|
|
105
|
+
};
|
|
106
|
+
filesTasksManager.deleteTasks.mockReturnValueOnce(expected);
|
|
107
|
+
const result = controller.deleteTasks(user);
|
|
108
|
+
expect(filesTasksManager.deleteTasks).toHaveBeenCalledTimes(1);
|
|
109
|
+
expect(filesTasksManager.deleteTasks).toHaveBeenCalledWith(user, undefined);
|
|
110
|
+
expect(result).toBe(expected);
|
|
111
|
+
});
|
|
112
|
+
it('downloadTaskFile should delegate to FilesTasksManager.downloadArchive and return the StreamableFile', async ()=>{
|
|
113
|
+
const user = {
|
|
114
|
+
id: 'user-5'
|
|
115
|
+
};
|
|
116
|
+
const taskId = 'task-dl-42';
|
|
117
|
+
const req = {};
|
|
118
|
+
const res = {};
|
|
119
|
+
const streamable = {
|
|
120
|
+
some: 'stream'
|
|
121
|
+
};
|
|
122
|
+
filesTasksManager.downloadArchive.mockResolvedValueOnce(streamable);
|
|
123
|
+
const result = await controller.downloadTaskFile(user, taskId, req, res);
|
|
124
|
+
expect(filesTasksManager.downloadArchive).toHaveBeenCalledTimes(1);
|
|
125
|
+
expect(filesTasksManager.downloadArchive).toHaveBeenCalledWith(user, 'task-dl-42', req, res);
|
|
126
|
+
expect(result).toBe(streamable);
|
|
127
|
+
});
|
|
38
128
|
});
|
|
39
129
|
|
|
40
130
|
//# sourceMappingURL=files-tasks.controller.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../backend/src/applications/files/files-tasks.controller.spec.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { Cache } from '../../infrastructure/cache/services/cache.service'\nimport { FilesTasksController } from './files-tasks.controller'\nimport { FilesMethods } from './services/files-methods.service'\nimport { FilesTasksManager } from './services/files-tasks-manager.service'\n\ndescribe(FilesTasksController.name, () => {\n let controller: FilesTasksController\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n controllers: [FilesTasksController],\n providers: [\n {\n provide: Cache,\n useValue: {}\n },\n { provide: FilesMethods, useValue: {} },\n FilesTasksManager\n ]\n }).compile()\n\n controller = module.get<FilesTasksController>(FilesTasksController)\n })\n\n it('should be defined', () => {\n expect(controller).toBeDefined()\n })\n})\n"],"names":["describe","FilesTasksController","name","controller","beforeAll","module","Test","createTestingModule","controllers","providers","provide","Cache","useValue","FilesMethods","FilesTasksManager","compile","get","it","expect","toBeDefined"],"mappings":"AAAA;;;;CAIC;;;;yBAEmC;8BACd;sCACe;qCACR;0CACK;AAElCA,SAASC,0CAAoB,CAACC,IAAI,EAAE;IAClC,IAAIC;IAEJC,UAAU;
|
|
1
|
+
{"version":3,"sources":["../../../../backend/src/applications/files/files-tasks.controller.spec.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { Cache } from '../../infrastructure/cache/services/cache.service'\nimport { FilesTasksController } from './files-tasks.controller'\nimport { FilesMethods } from './services/files-methods.service'\nimport { FilesTasksManager } from './services/files-tasks-manager.service'\n\ndescribe(FilesTasksController.name, () => {\n let controller: FilesTasksController\n let filesTasksManager: { getTasks: jest.Mock; deleteTasks: jest.Mock; downloadArchive: jest.Mock }\n\n beforeAll(async () => {\n filesTasksManager = {\n getTasks: jest.fn(),\n deleteTasks: jest.fn(),\n downloadArchive: jest.fn()\n }\n\n const module: TestingModule = await Test.createTestingModule({\n controllers: [FilesTasksController],\n providers: [\n {\n provide: Cache,\n useValue: {}\n },\n { provide: FilesMethods, useValue: {} },\n { provide: FilesTasksManager, useValue: filesTasksManager }\n ]\n }).compile()\n\n controller = module.get<FilesTasksController>(FilesTasksController)\n })\n\n beforeEach(() => {\n jest.clearAllMocks()\n })\n\n it('should be defined', () => {\n expect(controller).toBeDefined()\n })\n\n it('getTasks should call FilesTasksManager.getTasks with user.id and taskId and return the value', () => {\n const user = { id: 'user-1' } as any\n const taskId = 'task-123'\n const expected = [{ id: 'task-123' }]\n\n filesTasksManager.getTasks.mockReturnValueOnce(expected)\n\n const result = controller.getTasks(user, taskId)\n\n expect(filesTasksManager.getTasks).toHaveBeenCalledTimes(1)\n expect(filesTasksManager.getTasks).toHaveBeenCalledWith('user-1', 'task-123')\n expect(result).toBe(expected)\n })\n\n it('getTasks without taskId should pass undefined', () => {\n const user = { id: 'user-2' } as any\n const expected = [{ id: 'task-a' }, { id: 'task-b' }]\n\n filesTasksManager.getTasks.mockReturnValueOnce(expected)\n\n const result = controller.getTasks(user)\n\n expect(filesTasksManager.getTasks).toHaveBeenCalledTimes(1)\n expect(filesTasksManager.getTasks).toHaveBeenCalledWith('user-2', undefined)\n expect(result).toBe(expected)\n })\n\n it('deleteTasks should call FilesTasksManager.deleteTasks with user and taskId and return the value', () => {\n const user = { id: 'user-3', name: 'Alice' } as any\n const taskId = 'task-del-1'\n const expected = { deleted: true }\n\n filesTasksManager.deleteTasks.mockReturnValueOnce(expected)\n\n const result = controller.deleteTasks(user, taskId)\n\n expect(filesTasksManager.deleteTasks).toHaveBeenCalledTimes(1)\n expect(filesTasksManager.deleteTasks).toHaveBeenCalledWith(user, 'task-del-1')\n expect(result).toBe(expected)\n })\n\n it('deleteTasks without taskId must pass undefined', () => {\n const user = { id: 'user-4' } as any\n const expected = { deletedAll: true }\n\n filesTasksManager.deleteTasks.mockReturnValueOnce(expected)\n\n const result = controller.deleteTasks(user)\n\n expect(filesTasksManager.deleteTasks).toHaveBeenCalledTimes(1)\n expect(filesTasksManager.deleteTasks).toHaveBeenCalledWith(user, undefined)\n expect(result).toBe(expected)\n })\n\n it('downloadTaskFile should delegate to FilesTasksManager.downloadArchive and return the StreamableFile', async () => {\n const user = { id: 'user-5' } as any\n const taskId = 'task-dl-42'\n const req = {} as any\n const res = {} as any\n const streamable = { some: 'stream' } as any\n\n filesTasksManager.downloadArchive.mockResolvedValueOnce(streamable)\n\n const result = await controller.downloadTaskFile(user, taskId, req, res)\n\n expect(filesTasksManager.downloadArchive).toHaveBeenCalledTimes(1)\n expect(filesTasksManager.downloadArchive).toHaveBeenCalledWith(user, 'task-dl-42', req, res)\n expect(result).toBe(streamable)\n })\n})\n"],"names":["describe","FilesTasksController","name","controller","filesTasksManager","beforeAll","getTasks","jest","fn","deleteTasks","downloadArchive","module","Test","createTestingModule","controllers","providers","provide","Cache","useValue","FilesMethods","FilesTasksManager","compile","get","beforeEach","clearAllMocks","it","expect","toBeDefined","user","id","taskId","expected","mockReturnValueOnce","result","toHaveBeenCalledTimes","toHaveBeenCalledWith","toBe","undefined","deleted","deletedAll","req","res","streamable","some","mockResolvedValueOnce","downloadTaskFile"],"mappings":"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"}
|
|
@@ -59,6 +59,7 @@ _ts_decorate([
|
|
|
59
59
|
let FilesConfig = class FilesConfig {
|
|
60
60
|
constructor(){
|
|
61
61
|
this.maxUploadSize = 5368709120; // 5 GB
|
|
62
|
+
this.showHiddenFiles = false;
|
|
62
63
|
this.onlyoffice = new FilesOnlyOfficeConfig();
|
|
63
64
|
}
|
|
64
65
|
};
|
|
@@ -86,6 +87,10 @@ _ts_decorate([
|
|
|
86
87
|
(0, _classvalidator.IsInt)(),
|
|
87
88
|
_ts_metadata("design:type", Number)
|
|
88
89
|
], FilesConfig.prototype, "maxUploadSize", void 0);
|
|
90
|
+
_ts_decorate([
|
|
91
|
+
(0, _classvalidator.IsBoolean)(),
|
|
92
|
+
_ts_metadata("design:type", Boolean)
|
|
93
|
+
], FilesConfig.prototype, "showHiddenFiles", void 0);
|
|
89
94
|
_ts_decorate([
|
|
90
95
|
(0, _classvalidator.IsNotEmptyObject)(),
|
|
91
96
|
(0, _classvalidator.ValidateNested)(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../backend/src/applications/files/files.config.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Type } from 'class-transformer'\nimport { IsBoolean, IsInt, IsNotEmpty, IsNotEmptyObject, IsOptional, IsString, ValidateIf, ValidateNested } from 'class-validator'\n\nexport class FilesOnlyOfficeConfig {\n @IsBoolean()\n enabled = false\n\n @IsOptional()\n @IsString()\n externalServer: string = null\n\n @ValidateIf((o: FilesOnlyOfficeConfig) => o.enabled)\n @IsString()\n @IsNotEmpty()\n secret: string\n\n @IsBoolean()\n verifySSL: boolean = false\n}\n\nexport class FilesConfig {\n @IsNotEmpty()\n @IsString()\n dataPath: string\n\n @IsNotEmpty()\n @IsString()\n usersPath: string\n\n @IsNotEmpty()\n @IsString()\n spacesPath: string\n\n @IsNotEmpty()\n @IsString()\n tmpPath: string\n\n @IsInt()\n maxUploadSize: number = 5368709120 // 5 GB\n\n @IsNotEmptyObject()\n @ValidateNested()\n @Type(() => FilesOnlyOfficeConfig)\n onlyoffice: FilesOnlyOfficeConfig = new FilesOnlyOfficeConfig()\n}\n"],"names":["FilesConfig","FilesOnlyOfficeConfig","enabled","externalServer","verifySSL","o","maxUploadSize","onlyoffice"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAsBYA;eAAAA;;QAjBAC;eAAAA;;;kCAHQ;gCAC4F;;;;;;;;;;AAE1G,IAAA,AAAMA,wBAAN,MAAMA;;aAEXC,UAAU;aAIVC,iBAAyB;aAQzBC,YAAqB;;AACvB;;;;;;;;;;qCAPeC,IAA6BA,EAAEH,OAAO;;;;;;;;;AAS9C,IAAA,AAAMF,cAAN,MAAMA;;aAkBXM,gBAAwB,YAAW,OAAO;
|
|
1
|
+
{"version":3,"sources":["../../../../backend/src/applications/files/files.config.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Type } from 'class-transformer'\nimport { IsBoolean, IsInt, IsNotEmpty, IsNotEmptyObject, IsOptional, IsString, ValidateIf, ValidateNested } from 'class-validator'\n\nexport class FilesOnlyOfficeConfig {\n @IsBoolean()\n enabled = false\n\n @IsOptional()\n @IsString()\n externalServer: string = null\n\n @ValidateIf((o: FilesOnlyOfficeConfig) => o.enabled)\n @IsString()\n @IsNotEmpty()\n secret: string\n\n @IsBoolean()\n verifySSL: boolean = false\n}\n\nexport class FilesConfig {\n @IsNotEmpty()\n @IsString()\n dataPath: string\n\n @IsNotEmpty()\n @IsString()\n usersPath: string\n\n @IsNotEmpty()\n @IsString()\n spacesPath: string\n\n @IsNotEmpty()\n @IsString()\n tmpPath: string\n\n @IsInt()\n maxUploadSize: number = 5368709120 // 5 GB\n\n @IsBoolean()\n showHiddenFiles: boolean = false\n\n @IsNotEmptyObject()\n @ValidateNested()\n @Type(() => FilesOnlyOfficeConfig)\n onlyoffice: FilesOnlyOfficeConfig = new FilesOnlyOfficeConfig()\n}\n"],"names":["FilesConfig","FilesOnlyOfficeConfig","enabled","externalServer","verifySSL","o","maxUploadSize","showHiddenFiles","onlyoffice"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAsBYA;eAAAA;;QAjBAC;eAAAA;;;kCAHQ;gCAC4F;;;;;;;;;;AAE1G,IAAA,AAAMA,wBAAN,MAAMA;;aAEXC,UAAU;aAIVC,iBAAyB;aAQzBC,YAAqB;;AACvB;;;;;;;;;;qCAPeC,IAA6BA,EAAEH,OAAO;;;;;;;;;AAS9C,IAAA,AAAMF,cAAN,MAAMA;;aAkBXM,gBAAwB,YAAW,OAAO;aAG1CC,kBAA2B;aAK3BC,aAAoC,IAAIP;;AAC1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAFcA"}
|