abdallah at buddy in ~/Documents/joplin/packages/lib (dropbox-max-upload●●) $ yarn test --runInBand 14:10:57: Found a resource that was most likely already decrypted but was marked as encrypted. Marked it as decrypted: d6d21278ea07492db0329e1fecbb827a FAIL services/synchronizer/Synchronizer.resources.test.js (1771.286 s) ● Synchronizer.resources › should sync resources expect(received).toBe(expected) // Object.is equality Expected: true Received: false 58 | 59 | const resourcePath1_2 = Resource.fullPath(resource1_2); > 60 | expect(fileContentEqual(resourcePath1, resourcePath1_2)).toBe(true); | ^ 61 | }); 62 | 63 | it('should handle resource download errors', async () => { at toBe (services/synchronizer/Synchronizer.resources.test.ts:60:60) at fulfilled (services/synchronizer/Synchronizer.resources.test.js:12:24) ● Synchronizer.resources › should set the resource file size if it is missing expect(received).toBe(expected) // Object.is equality Expected: 2720 Received: 3628 110 | await fetcher.waitForAllFinished(); 111 | r1 = await Resource.load(r1.id); > 112 | expect(r1.size).toBe(2720); | ^ 113 | }); 114 | 115 | it('should delete resources', async () => { at toBe (services/synchronizer/Synchronizer.resources.test.ts:112:19) at fulfilled (services/synchronizer/Synchronizer.resources.test.js:12:24) ● Synchronizer.resources › should encrypt resources expect(received).toBe(expected) // Object.is equality Expected: true Received: false 170 | const resourcePath1_2 = Resource.fullPath(resource1_2); 171 | > 172 | expect(fileContentEqual(resourcePath1, resourcePath1_2)).toBe(true); | ^ 173 | }); 174 | 175 | it('should sync resource blob changes', async () => { at toBe (services/synchronizer/Synchronizer.resources.test.ts:172:60) at fulfilled (services/synchronizer/Synchronizer.resources.test.js:12:24) ● Synchronizer.resources › should sync resource blob changes expect(received).toBe(expected) // Object.is equality Expected: "1234 MOD" Received: "MTIzNCBNT0Q=" 204 | const resource1_1 = (await Resource.all())[0]; 205 | expect(resource1_1.size).toBe(newSize); > 206 | expect(await Resource.resourceBlobContent(resource1_1.id, 'utf8')).toBe('1234 MOD'); | ^ 207 | }); 208 | 209 | it('should handle resource conflicts', async () => { at toBe (services/synchronizer/Synchronizer.resources.test.ts:206:70) at fulfilled (services/synchronizer/Synchronizer.resources.test.js:12:24) ● Synchronizer.resources › should handle resource conflicts expect(received).toBe(expected) // Object.is equality Expected: "1234 MOD 2" Received: "MTIzNCBNT0QgMg==" 250 | await resourceFetcher().waitForAllFinished(); 251 | const localContent = await Resource.resourceBlobContent(resource.id, 'utf8'); > 252 | expect(localContent).toBe('1234 MOD 2'); | ^ 253 | 254 | // Check that the Conflict note has been generated, with the conflict resource 255 | // attached to it, and check that it has the original content. at toBe (services/synchronizer/Synchronizer.resources.test.ts:252:25) at fulfilled (services/synchronizer/Synchronizer.resources.test.js:12:24) ● Synchronizer.resources › should not upload blob if it has not changed expect(received).toBe(expected) // Object.is equality Expected: "just testing" Received: "anVzdCB0ZXN0aW5n" 379 | expect(await synchronizer().api().get(resourcePath)).toBe('before upload'); 380 | await synchronizerStart(); > 381 | expect(await synchronizer().api().get(resourcePath)).toBe('just testing'); | ^ 382 | 383 | // ---------------------------------------------------------------------- 384 | // Change metadata only and check that blob is not uploaded. To do this, at toBe (services/synchronizer/Synchronizer.resources.test.ts:381:56) at fulfilled (services/synchronizer/Synchronizer.resources.test.js:12:24) PASS services/synchronizer/Synchronizer.basics.test.js (3089.128 s) 15:41:45: Found a resource that was most likely already decrypted but was marked as encrypted. Marked it as decrypted: 35a9df58b59c4b37b377bcef160a5934 FAIL services/synchronizer/Synchronizer.e2ee.test.js (1879.996 s) ● Synchronizer.e2ee › should set the resource file size after decryption expect(received).toBe(expected) // Object.is equality Expected: 2720 Received: 6720 280 | 281 | const resource1_2 = await Resource.load(resource1.id); > 282 | expect(resource1_2.size).toBe(2720); | ^ 283 | })); 284 | 285 | it('should encrypt remote resources after encryption has been enabled', (async () => { at toBe (services/synchronizer/Synchronizer.e2ee.test.ts:282:28) at fulfilled (services/synchronizer/Synchronizer.e2ee.test.js:12:24) ● Synchronizer.e2ee › should encrypt remote resources after encryption has been enabled expect(received).toBe(expected) // Object.is equality Expected: true Received: false 299 | await synchronizerStart(); 300 | > 301 | expect(await allSyncTargetItemsEncrypted()).toBe(true); | ^ 302 | })); 303 | 304 | it('should upload encrypted resource, but it should not mark the blob as encrypted locally', (async () => { at toBe (services/synchronizer/Synchronizer.e2ee.test.ts:301:47) at fulfilled (services/synchronizer/Synchronizer.e2ee.test.js:12:24) ● Synchronizer.e2ee › should decrypt the resource metadata, but not try to decrypt the file, if it is not present expect(received).toBe(expected) // Object.is equality Expected: true Received: false 324 | await loadMasterKeysFromSettings(encryptionService()); 325 | await synchronizerStart(); > 326 | expect(await allSyncTargetItemsEncrypted()).toBe(true); | ^ 327 | 328 | await switchClient(2); 329 | at toBe (services/synchronizer/Synchronizer.e2ee.test.ts:326:47) at fulfilled (services/synchronizer/Synchronizer.e2ee.test.js:12:24) PASS services/synchronizer/Synchronizer.conflicts.test.js (2023.753 s) FAIL services/synchronizer/synchronizer_LockHandler.test.js (463.64 s) ● synchronizer_LockHandler › should not use files that are not locks POST files/upload: Error (409): {"error_summary": "path/disallowed_name/..", "error": {".tag": "path", "reason": {".tag": "disallowed_name"}, "upload_session_id": "pid_upload_session:ABIHpbmKOAvaVPfl1XOH0dmX-Bf-u8Z7lzgR2hsYFVtQGrJMpg"}} 184 | // JSON. That way the error message will still show there's a problem but without filling up the log or screen. 185 | const shortResponseText = (`${responseText}`).substr(0, 1024); > 186 | const error = new JoplinError(`${method} ${path}: ${message} (${response.status}): ${shortResponseText}`, code); | ^ 187 | error.httpStatus = response.status; 188 | return error; 189 | }; at newError (DropboxApi.js:186:20) at DropboxApi.newError [as exec] (DropboxApi.js:199:12) at FileApiDriverDropbox.put (file-api-driver-dropbox.js:230:5) PASS services/synchronizer/Synchronizer.revisions.test.js (1121.504 s) PASS services/synchronizer/Synchronizer.tags.test.js (451.005 s) 17:00:34: OcrService: Could not process resource f6357a5429ea4dc1910e7b4569ce1fb9 (type application/pdf) InvalidPDFException { message: 'Invalid PDF structure.', name: 'InvalidPDFException' } Warning: Name token is longer than allowed by the spec: 286 Warning: Indexing all PDF objects 17:03:51: OcrService: Could not process resource 906be6a1e0484815beff0b07594a0c01 (type application/pdf) InvalidPDFException { message: 'Invalid PDF structure.', name: 'InvalidPDFException' } Warning: Name token is longer than allowed by the spec: 286 Warning: Indexing all PDF objects 17:07:03: OcrService: Could not process resource 055f48fcda8542adbf79981619b36c53 (type application/pdf) InvalidPDFException { message: 'Invalid PDF structure.', name: 'InvalidPDFException' } Warning: Name token is longer than allowed by the spec: 286 Warning: Indexing all PDF objects FAIL services/ocr/OcrService.test.js (629.907 s) ● OcrService › should handle case where resource blob has not yet been downloaded expect(received).toBe(expected) // Object.is equality Expected: "Dummy PDF file" Received: "" 131 | { 132 | const resource: ResourceEntity = (await Resource.all())[0]; > 133 | expect(resource.ocr_text).toBe('Dummy PDF file'); | ^ 134 | expect(resource.ocr_error).toBe(''); 135 | expect(resource.ocr_status).toBe(ResourceOcrStatus.Done); 136 | } at toBe (services/ocr/OcrService.test.ts:133:30) at fulfilled (services/ocr/OcrService.test.js:12:24) ● OcrService › should handle case where resource blob cannot be downloaded expect(received).toBe(expected) // Object.is equality Expected: "Dummy PDF file" Received: "" 188 | { 189 | const resource: ResourceEntity = (await Resource.all())[0]; > 190 | expect(resource.ocr_text).toBe('Dummy PDF file'); | ^ 191 | expect(resource.ocr_error).toBe(''); 192 | expect(resource.ocr_status).toBe(ResourceOcrStatus.Done); 193 | } at toBe (services/ocr/OcrService.test.ts:190:30) at fulfilled (services/ocr/OcrService.test.js:12:24) ● OcrService › should handle conflicts if two clients process the same resource then sync expect(received).toBe(expected) // Object.is equality Expected: "Dummy PDF file" Received: "" 224 | { 225 | const resource: ResourceEntity = (await Resource.all())[0]; > 226 | expect(resource.ocr_text).toBe('Dummy PDF file'); | ^ 227 | expect(resource.ocr_error).toBe(''); 228 | expect(resource.ocr_status).toBe(ResourceOcrStatus.Done); 229 | expect(resource.updated_time).toBe(expectedResourceUpdatedTime); at toBe (services/ocr/OcrService.test.ts:226:30) at fulfilled (services/ocr/OcrService.test.js:12:24) FAIL services/ResourceService.test.js (354.826 s) ● services/ResourceService › should not delete resources that are associated with an encrypted note expect(received).toBe(expected) // Object.is equality Expected: true Received: false 148 | await resourceService().indexNoteResources(); 149 | await synchronizer().start(); > 150 | expect(await allSyncTargetItemsEncrypted()).toBe(true); | ^ 151 | 152 | await switchClient(2); 153 | at toBe (services/ResourceService.test.ts:150:47) at fulfilled (services/ResourceService.test.js:12:24) PASS services/synchronizer/Synchronizer.ppk.test.js (317.115 s) PASS services/share/ShareService.test.js (275.545 s) PASS ./file-api-driver.test.js (41.882 s) PASS services/synchronizer/Synchronizer.tools.test.js (420.7 s) PASS services/search/SearchFilter.test.js (159.352 s) PASS services/rest/Api.test.js (84.404 s) PASS models/Note.test.js (60.742 s) PASS services/RevisionService.test.js (42.615 s) PASS ./reducer.test.js (58.114 s) PASS models/Setting.test.js (46.681 s) PASS services/search/SearchEngine.test.js (42.694 s) PASS services/interop/InteropService.test.js PASS services/interop/InteropService_Importer_Md.test.js PASS services/interop/InteropService_Importer_Md_frontmatter.test.js PASS ./import-enex-md-gen.test.js (40.162 s) PASS models/Folder.test.js (44.679 s) PASS models/Resource.test.js PASS services/e2ee/utils.test.js PASS models/BaseItem.test.js (132.603 s) PASS services/interop/InteropService_Exporter_Md.test.js PASS services/e2ee/ppk.test.js (43.664 s) PASS services/e2ee/EncryptionService.test.js PASS ./import-enex-html-gen.test.js PASS services/interop/InteropService_Exporter_Md_frontmatter.test.js PASS services/CommandService.test.js PASS services/synchronizer/ItemUploader.test.js PASS models/Folder.sharing.test.js PASS services/KvStore.test.js PASS models/Note_CustomSortOrder.test.js PASS models/Tag.test.js PASS services/search/SearchEngine.resources.test.js PASS models/Revision.test.js PASS services/synchronizer/syncInfoUtils.test.js PASS services/trash/restoreItems.test.js PASS services/synchronizer/synchronizer_MigrationHandler.test.js PASS models/utils/onFolderDrop.test.js PASS services/interop/InteropService_Exporter_Html.test.js PASS services/trash/permanentlyDeleteOldItems.test.js PASS services/rest/routes/events.test.js PASS services/search/SearchEngineUtils.test.js PASS models/utils/readOnly.test.js PASS ./TaskQueue.test.js PASS models/utils/userData.test.js PASS services/interop/InteropService_Importer_Raw.test.js PASS utils/ActionLogger.test.js PASS services/rest/routes/notes.test.js PASS models/ItemChange.test.js PASS services/trash/emptyTrash.test.js PASS ./database.test.js PASS models/MasterKey.test.js PASS ./string-utils.test.js PASS ./markdownUtils.test.js PASS services/search/filterParser.test.js PASS services/rest/routes/folders.test.js PASS ./locale.test.js PASS services/KeymapService.test.js PASS services/plugins/utils/isCompatible/index.test.js PASS components/shared/config/plugins/useOnInstallHandler.test.js PASS ./callbackUrlUtils.test.js PASS ./InMemoryCache.test.js PASS utils/ipc/RemoteMessenger.test.js PASS ./markdownUtils2.test.js PASS ./EventDispatcher.test.js PASS services/profileConfig/index.test.js PASS services/trash/index.test.js PASS utils/webDAVUtils.test.js PASS components/shared/side-menu-shared.test.js PASS ./file-api.test.js PASS ./versionInfo.test.js PASS ./registry.test.js PASS ./ArrayUtils.test.js PASS ./urlUtils.test.js PASS ./htmlUtils2.test.js PASS ./eventManager.test.js PASS ./onedrive-api.test.js PASS ./RotatingLogs.test.js PASS models/dateTimeFormats.test.js PASS services/plugins/utils/validatePluginPlatforms.test.js PASS services/interop/Module.test.js PASS services/WhenClause.test.js PASS utils/ipc/utils/separateCallbacksFromSerializable.test.js Deprecation warning: value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info. Arguments: [0] _isAMomentObject: true, _isUTC: false, _useUTC: false, _l: undefined, _i: not a number, _f: undefined, _strict: undefined, _locale: [object Object] Error: at Function.createFromInputFallback (/home/abdallah/Documents/joplin/packages/lib/node_modules/moment/moment.js:324:25) at configFromString (/home/abdallah/Documents/joplin/packages/lib/node_modules/moment/moment.js:2613:19) at configFromInput (/home/abdallah/Documents/joplin/packages/lib/node_modules/moment/moment.js:3056:13) at prepareConfig (/home/abdallah/Documents/joplin/packages/lib/node_modules/moment/moment.js:3039:13) at createFromConfig (/home/abdallah/Documents/joplin/packages/lib/node_modules/moment/moment.js:3006:44) at createLocalOrUTC (/home/abdallah/Documents/joplin/packages/lib/node_modules/moment/moment.js:3100:16) at createLocal (/home/abdallah/Documents/joplin/packages/lib/node_modules/moment/moment.js:3104:16) at hooks (/home/abdallah/Documents/joplin/packages/lib/node_modules/moment/moment.js:16:29) at Time.moment [as formatMsToLocal] (/home/abdallah/Documents/joplin/packages/lib/time.ts:102:10) at formatMsToLocal (/home/abdallah/Documents/joplin/packages/lib/services/noteList/renderViewProps.ts:18:40) at renderer (/home/abdallah/Documents/joplin/packages/lib/services/noteList/renderViewProps.ts:30:24) at renderViewProp (/home/abdallah/Documents/joplin/packages/lib/services/noteList/renderViewProps.ts:47:17) at Generator.next () at /home/abdallah/Documents/joplin/packages/lib/services/noteList/renderViewProps.js:27:67 at new Promise () at Object..__awaiter (/home/abdallah/Documents/joplin/packages/lib/services/noteList/renderViewProps.js:9:10) at __awaiter (/home/abdallah/Documents/joplin/packages/lib/services/noteList/renderViewProps.ts:41:111) at renderViewProps (/home/abdallah/Documents/joplin/packages/lib/services/noteList/renderViewProps.ts:45:10) at Generator.next () at /home/abdallah/Documents/joplin/packages/lib/services/noteList/renderViewProps.js:27:67 at new Promise () at Object..__awaiter (/home/abdallah/Documents/joplin/packages/lib/services/noteList/renderViewProps.js:9:10) at __awaiter (/home/abdallah/Documents/joplin/packages/lib/services/noteList/renderViewProps.ts:41:111) at /home/abdallah/Documents/joplin/packages/lib/services/noteList/renderViewProps.test.ts:47:24 at Generator.next () at /home/abdallah/Documents/joplin/packages/lib/services/noteList/renderViewProps.test.js:27:67 at new Promise () at Object..__awaiter (/home/abdallah/Documents/joplin/packages/lib/services/noteList/renderViewProps.test.js:9:10) at Object.__awaiter (/home/abdallah/Documents/joplin/packages/lib/services/noteList/renderViewProps.test.ts:38:52) at Promise.then.completed (/home/abdallah/Documents/joplin/packages/lib/node_modules/jest-circus/build/utils.js:298:28) at new Promise () at callAsyncCircusFn (/home/abdallah/Documents/joplin/packages/lib/node_modules/jest-circus/build/utils.js:231:10) at _callCircusTest (/home/abdallah/Documents/joplin/packages/lib/node_modules/jest-circus/build/run.js:316:40) at _runTest (/home/abdallah/Documents/joplin/packages/lib/node_modules/jest-circus/build/run.js:252:3) at _runTestsForDescribeBlock (/home/abdallah/Documents/joplin/packages/lib/node_modules/jest-circus/build/run.js:126:9) at _runTestsForDescribeBlock (/home/abdallah/Documents/joplin/packages/lib/node_modules/jest-circus/build/run.js:121:9) at run (/home/abdallah/Documents/joplin/packages/lib/node_modules/jest-circus/build/run.js:71:3) at runAndTransformResultsToJestFormat (/home/abdallah/Documents/joplin/packages/lib/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21) at jestAdapter (/home/abdallah/Documents/joplin/packages/lib/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19) at runTestInternal (/home/abdallah/Documents/joplin/packages/lib/node_modules/jest-runner/build/runTest.js:367:16) at runTest (/home/abdallah/Documents/joplin/packages/lib/node_modules/jest-runner/build/runTest.js:444:34) PASS services/noteList/renderViewProps.test.js PASS services/ocr/utils/filterOcrText.test.js PASS utils/tests/chunkGenerator.test.js PASS ./timeUtils.test.js PASS services/plugins/utils/validatePluginId.test.js PASS components/shared/config/shouldShowMissingPasswordWarning.test.js PASS ./mimeUtils.test.js PASS ./pathUtils.test.js PASS ./fsDriver.test.js PASS services/plugins/utils/validatePluginVersion.test.js PASS services/synchronizer/Synchronizer.sharing.test.js PASS services/style/themeToCss.test.js PASS services/search/gotoAnythingStyleQuery.test.js PASS ./makeDiscourseDebugUrl.test.js PASS ./htmlUtils.test.js PASS services/noteList/renderTemplate.test.js PASS services/style/cssToTheme.test.js PASS utils/replaceUnsupportedCharacters.test.js PASS utils/ipc/utils/mergeCallbacksAndSerializable.test.js Summary of all failing tests FAIL services/synchronizer/Synchronizer.resources.test.js (1771.286 s) ● Synchronizer.resources › should sync resources expect(received).toBe(expected) // Object.is equality Expected: true Received: false 58 | 59 | const resourcePath1_2 = Resource.fullPath(resource1_2); > 60 | expect(fileContentEqual(resourcePath1, resourcePath1_2)).toBe(true); | ^ 61 | }); 62 | 63 | it('should handle resource download errors', async () => { at toBe (services/synchronizer/Synchronizer.resources.test.ts:60:60) at fulfilled (services/synchronizer/Synchronizer.resources.test.js:12:24) ● Synchronizer.resources › should set the resource file size if it is missing expect(received).toBe(expected) // Object.is equality Expected: 2720 Received: 3628 110 | await fetcher.waitForAllFinished(); 111 | r1 = await Resource.load(r1.id); > 112 | expect(r1.size).toBe(2720); | ^ 113 | }); 114 | 115 | it('should delete resources', async () => { at toBe (services/synchronizer/Synchronizer.resources.test.ts:112:19) at fulfilled (services/synchronizer/Synchronizer.resources.test.js:12:24) ● Synchronizer.resources › should encrypt resources expect(received).toBe(expected) // Object.is equality Expected: true Received: false 170 | const resourcePath1_2 = Resource.fullPath(resource1_2); 171 | > 172 | expect(fileContentEqual(resourcePath1, resourcePath1_2)).toBe(true); | ^ 173 | }); 174 | 175 | it('should sync resource blob changes', async () => { at toBe (services/synchronizer/Synchronizer.resources.test.ts:172:60) at fulfilled (services/synchronizer/Synchronizer.resources.test.js:12:24) ● Synchronizer.resources › should sync resource blob changes expect(received).toBe(expected) // Object.is equality Expected: "1234 MOD" Received: "MTIzNCBNT0Q=" 204 | const resource1_1 = (await Resource.all())[0]; 205 | expect(resource1_1.size).toBe(newSize); > 206 | expect(await Resource.resourceBlobContent(resource1_1.id, 'utf8')).toBe('1234 MOD'); | ^ 207 | }); 208 | 209 | it('should handle resource conflicts', async () => { at toBe (services/synchronizer/Synchronizer.resources.test.ts:206:70) at fulfilled (services/synchronizer/Synchronizer.resources.test.js:12:24) ● Synchronizer.resources › should handle resource conflicts expect(received).toBe(expected) // Object.is equality Expected: "1234 MOD 2" Received: "MTIzNCBNT0QgMg==" 250 | await resourceFetcher().waitForAllFinished(); 251 | const localContent = await Resource.resourceBlobContent(resource.id, 'utf8'); > 252 | expect(localContent).toBe('1234 MOD 2'); | ^ 253 | 254 | // Check that the Conflict note has been generated, with the conflict resource 255 | // attached to it, and check that it has the original content. at toBe (services/synchronizer/Synchronizer.resources.test.ts:252:25) at fulfilled (services/synchronizer/Synchronizer.resources.test.js:12:24) ● Synchronizer.resources › should not upload blob if it has not changed expect(received).toBe(expected) // Object.is equality Expected: "just testing" Received: "anVzdCB0ZXN0aW5n" 379 | expect(await synchronizer().api().get(resourcePath)).toBe('before upload'); 380 | await synchronizerStart(); > 381 | expect(await synchronizer().api().get(resourcePath)).toBe('just testing'); | ^ 382 | 383 | // ---------------------------------------------------------------------- 384 | // Change metadata only and check that blob is not uploaded. To do this, at toBe (services/synchronizer/Synchronizer.resources.test.ts:381:56) at fulfilled (services/synchronizer/Synchronizer.resources.test.js:12:24) FAIL services/synchronizer/Synchronizer.e2ee.test.js (1879.996 s) ● Synchronizer.e2ee › should set the resource file size after decryption expect(received).toBe(expected) // Object.is equality Expected: 2720 Received: 6720 280 | 281 | const resource1_2 = await Resource.load(resource1.id); > 282 | expect(resource1_2.size).toBe(2720); | ^ 283 | })); 284 | 285 | it('should encrypt remote resources after encryption has been enabled', (async () => { at toBe (services/synchronizer/Synchronizer.e2ee.test.ts:282:28) at fulfilled (services/synchronizer/Synchronizer.e2ee.test.js:12:24) ● Synchronizer.e2ee › should encrypt remote resources after encryption has been enabled expect(received).toBe(expected) // Object.is equality Expected: true Received: false 299 | await synchronizerStart(); 300 | > 301 | expect(await allSyncTargetItemsEncrypted()).toBe(true); | ^ 302 | })); 303 | 304 | it('should upload encrypted resource, but it should not mark the blob as encrypted locally', (async () => { at toBe (services/synchronizer/Synchronizer.e2ee.test.ts:301:47) at fulfilled (services/synchronizer/Synchronizer.e2ee.test.js:12:24) ● Synchronizer.e2ee › should decrypt the resource metadata, but not try to decrypt the file, if it is not present expect(received).toBe(expected) // Object.is equality Expected: true Received: false 324 | await loadMasterKeysFromSettings(encryptionService()); 325 | await synchronizerStart(); > 326 | expect(await allSyncTargetItemsEncrypted()).toBe(true); | ^ 327 | 328 | await switchClient(2); 329 | at toBe (services/synchronizer/Synchronizer.e2ee.test.ts:326:47) at fulfilled (services/synchronizer/Synchronizer.e2ee.test.js:12:24) FAIL services/synchronizer/synchronizer_LockHandler.test.js (463.64 s) ● synchronizer_LockHandler › should not use files that are not locks POST files/upload: Error (409): {"error_summary": "path/disallowed_name/..", "error": {".tag": "path", "reason": {".tag": "disallowed_name"}, "upload_session_id": "pid_upload_session:ABIHpbmKOAvaVPfl1XOH0dmX-Bf-u8Z7lzgR2hsYFVtQGrJMpg"}} 184 | // JSON. That way the error message will still show there's a problem but without filling up the log or screen. 185 | const shortResponseText = (`${responseText}`).substr(0, 1024); > 186 | const error = new JoplinError(`${method} ${path}: ${message} (${response.status}): ${shortResponseText}`, code); | ^ 187 | error.httpStatus = response.status; 188 | return error; 189 | }; at newError (DropboxApi.js:186:20) at DropboxApi.newError [as exec] (DropboxApi.js:199:12) at FileApiDriverDropbox.put (file-api-driver-dropbox.js:230:5) FAIL services/ocr/OcrService.test.js (629.907 s) ● OcrService › should handle case where resource blob has not yet been downloaded expect(received).toBe(expected) // Object.is equality Expected: "Dummy PDF file" Received: "" 131 | { 132 | const resource: ResourceEntity = (await Resource.all())[0]; > 133 | expect(resource.ocr_text).toBe('Dummy PDF file'); | ^ 134 | expect(resource.ocr_error).toBe(''); 135 | expect(resource.ocr_status).toBe(ResourceOcrStatus.Done); 136 | } at toBe (services/ocr/OcrService.test.ts:133:30) at fulfilled (services/ocr/OcrService.test.js:12:24) ● OcrService › should handle case where resource blob cannot be downloaded expect(received).toBe(expected) // Object.is equality Expected: "Dummy PDF file" Received: "" 188 | { 189 | const resource: ResourceEntity = (await Resource.all())[0]; > 190 | expect(resource.ocr_text).toBe('Dummy PDF file'); | ^ 191 | expect(resource.ocr_error).toBe(''); 192 | expect(resource.ocr_status).toBe(ResourceOcrStatus.Done); 193 | } at toBe (services/ocr/OcrService.test.ts:190:30) at fulfilled (services/ocr/OcrService.test.js:12:24) ● OcrService › should handle conflicts if two clients process the same resource then sync expect(received).toBe(expected) // Object.is equality Expected: "Dummy PDF file" Received: "" 224 | { 225 | const resource: ResourceEntity = (await Resource.all())[0]; > 226 | expect(resource.ocr_text).toBe('Dummy PDF file'); | ^ 227 | expect(resource.ocr_error).toBe(''); 228 | expect(resource.ocr_status).toBe(ResourceOcrStatus.Done); 229 | expect(resource.updated_time).toBe(expectedResourceUpdatedTime); at toBe (services/ocr/OcrService.test.ts:226:30) at fulfilled (services/ocr/OcrService.test.js:12:24) FAIL services/ResourceService.test.js (354.826 s) ● services/ResourceService › should not delete resources that are associated with an encrypted note expect(received).toBe(expected) // Object.is equality Expected: true Received: false 148 | await resourceService().indexNoteResources(); 149 | await synchronizer().start(); > 150 | expect(await allSyncTargetItemsEncrypted()).toBe(true); | ^ 151 | 152 | await switchClient(2); 153 | at toBe (services/ResourceService.test.ts:150:47) at fulfilled (services/ResourceService.test.js:12:24) Test Suites: 5 failed, 104 passed, 109 total Tests: 14 failed, 865 passed, 879 total Snapshots: 0 total Time: 14278.092 s Ran all test suites. Jest did not exit one second after the test run has completed. 'This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with `--detectOpenHandles` to troubleshoot this issue.