|
|
|
|
@@ -7,6 +7,9 @@ const findStorage = require('browser/lib/findStorage')
|
|
|
|
|
jest.mock('unique-slug')
|
|
|
|
|
const uniqueSlug = require('unique-slug')
|
|
|
|
|
const mdurl = require('mdurl')
|
|
|
|
|
const fse = require('fs-extra')
|
|
|
|
|
jest.mock('sander')
|
|
|
|
|
const sander = require('sander')
|
|
|
|
|
|
|
|
|
|
const systemUnderTest = require('browser/main/lib/dataApi/attachmentManagement')
|
|
|
|
|
|
|
|
|
|
@@ -48,11 +51,13 @@ it('should test that copyAttachment works correctly assuming correct working of
|
|
|
|
|
const noteKey = 'noteKey'
|
|
|
|
|
const dummyUniquePath = 'dummyPath'
|
|
|
|
|
const dummyStorage = {path: 'dummyStoragePath'}
|
|
|
|
|
const dummyReadStream = {}
|
|
|
|
|
|
|
|
|
|
dummyReadStream.pipe = jest.fn()
|
|
|
|
|
dummyReadStream.on = jest.fn((event, callback) => { callback() })
|
|
|
|
|
fs.existsSync = jest.fn()
|
|
|
|
|
fs.existsSync.mockReturnValue(true)
|
|
|
|
|
fs.createReadStream = jest.fn()
|
|
|
|
|
fs.createReadStream.mockReturnValue({pipe: jest.fn()})
|
|
|
|
|
fs.createReadStream = jest.fn(() => dummyReadStream)
|
|
|
|
|
fs.createWriteStream = jest.fn()
|
|
|
|
|
|
|
|
|
|
findStorage.findStorage = jest.fn()
|
|
|
|
|
@@ -75,7 +80,11 @@ it('should test that copyAttachment creates a new folder if the attachment folde
|
|
|
|
|
const noteKey = 'noteKey'
|
|
|
|
|
const attachmentFolderPath = path.join(dummyStorage.path, systemUnderTest.DESTINATION_FOLDER)
|
|
|
|
|
const attachmentFolderNoteKyPath = path.join(dummyStorage.path, systemUnderTest.DESTINATION_FOLDER, noteKey)
|
|
|
|
|
const dummyReadStream = {}
|
|
|
|
|
|
|
|
|
|
dummyReadStream.pipe = jest.fn()
|
|
|
|
|
dummyReadStream.on = jest.fn()
|
|
|
|
|
fs.createReadStream = jest.fn(() => dummyReadStream)
|
|
|
|
|
fs.existsSync = jest.fn()
|
|
|
|
|
fs.existsSync.mockReturnValueOnce(true)
|
|
|
|
|
fs.existsSync.mockReturnValueOnce(false)
|
|
|
|
|
@@ -97,7 +106,11 @@ it('should test that copyAttachment creates a new folder if the attachment folde
|
|
|
|
|
|
|
|
|
|
it('should test that copyAttachment don\'t uses a random file name if not intended ', function () {
|
|
|
|
|
const dummyStorage = {path: 'dummyStoragePath'}
|
|
|
|
|
const dummyReadStream = {}
|
|
|
|
|
|
|
|
|
|
dummyReadStream.pipe = jest.fn()
|
|
|
|
|
dummyReadStream.on = jest.fn()
|
|
|
|
|
fs.createReadStream = jest.fn(() => dummyReadStream)
|
|
|
|
|
fs.existsSync = jest.fn()
|
|
|
|
|
fs.existsSync.mockReturnValueOnce(true)
|
|
|
|
|
fs.existsSync.mockReturnValueOnce(false)
|
|
|
|
|
@@ -142,13 +155,13 @@ it('should replace the all ":storage" path with the actual storage path', functi
|
|
|
|
|
' <body data-theme="default">\n' +
|
|
|
|
|
' <h2 data-line="0" id="Headline">Headline</h2>\n' +
|
|
|
|
|
' <p data-line="2">\n' +
|
|
|
|
|
' <img src="file:///' + storagePath + '\\' + storageFolder + '\\0.6r4zdgc22xp.png" alt="dummyImage.png" >\n' +
|
|
|
|
|
' <img src="file:///' + storagePath + path.sep + storageFolder + path.sep + '0.6r4zdgc22xp.png" alt="dummyImage.png" >\n' +
|
|
|
|
|
' </p>\n' +
|
|
|
|
|
' <p data-line="4">\n' +
|
|
|
|
|
' <a href="file:///' + storagePath + '\\' + storageFolder + '\\0.q2i4iw0fyx.pdf">dummyPDF.pdf</a>\n' +
|
|
|
|
|
' <a href="file:///' + storagePath + path.sep + storageFolder + path.sep + '0.q2i4iw0fyx.pdf">dummyPDF.pdf</a>\n' +
|
|
|
|
|
' </p>\n' +
|
|
|
|
|
' <p data-line="6">\n' +
|
|
|
|
|
' <img src="file:///' + storagePath + '\\' + storageFolder + '\\d6c5ee92.jpg" alt="dummyImage2.jpg">\n' +
|
|
|
|
|
' <img src="file:///' + storagePath + path.sep + storageFolder + path.sep + 'd6c5ee92.jpg" alt="dummyImage2.jpg">\n' +
|
|
|
|
|
' </p>\n' +
|
|
|
|
|
' </body>\n' +
|
|
|
|
|
'</html>'
|
|
|
|
|
@@ -166,3 +179,291 @@ it('should test that generateAttachmentMarkdown works correct both with previews
|
|
|
|
|
actual = systemUnderTest.generateAttachmentMarkdown(fileName, path, false)
|
|
|
|
|
expect(actual).toEqual(expected)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('should test that getAttachmentsInContent finds all attachments', function () {
|
|
|
|
|
const testInput =
|
|
|
|
|
'<html>\n' +
|
|
|
|
|
' <head>\n' +
|
|
|
|
|
' //header\n' +
|
|
|
|
|
' </head>\n' +
|
|
|
|
|
' <body data-theme="default">\n' +
|
|
|
|
|
' <h2 data-line="0" id="Headline">Headline</h2>\n' +
|
|
|
|
|
' <p data-line="2">\n' +
|
|
|
|
|
' <img src=":storage' + mdurl.encode(path.sep) + '9c9c4ba3-bc1e-441f-9866-c1e9a806e31c' + mdurl.encode(path.sep) + '0.6r4zdgc22xp.png" alt="dummyImage.png" >\n' +
|
|
|
|
|
' </p>\n' +
|
|
|
|
|
' <p data-line="4">\n' +
|
|
|
|
|
' <a href=":storage' + mdurl.encode(path.sep) + '9c9c4ba3-bc1e-441f-9866-c1e9a806e31c' + mdurl.encode(path.sep) + '0.q2i4iw0fyx.pdf">dummyPDF.pdf</a>\n' +
|
|
|
|
|
' </p>\n' +
|
|
|
|
|
' <p data-line="6">\n' +
|
|
|
|
|
' <img src=":storage' + mdurl.encode(path.sep) + '9c9c4ba3-bc1e-441f-9866-c1e9a806e31c' + mdurl.encode(path.sep) + 'd6c5ee92.jpg" alt="dummyImage2.jpg">\n' +
|
|
|
|
|
' </p>\n' +
|
|
|
|
|
' </body>\n' +
|
|
|
|
|
'</html>'
|
|
|
|
|
const actual = systemUnderTest.getAttachmentsInContent(testInput)
|
|
|
|
|
const expected = [':storage' + path.sep + '9c9c4ba3-bc1e-441f-9866-c1e9a806e31c' + path.sep + '0.6r4zdgc22xp', ':storage' + path.sep + '9c9c4ba3-bc1e-441f-9866-c1e9a806e31c' + path.sep + '0.q2i4iw0fyx', ':storage' + path.sep + '9c9c4ba3-bc1e-441f-9866-c1e9a806e31c' + path.sep + 'd6c5ee92.jpg']
|
|
|
|
|
expect(actual).toEqual(expect.arrayContaining(expected))
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('should test that getAbsolutePathsOfAttachmentsInContent returns all absolute paths', function () {
|
|
|
|
|
const dummyStoragePath = 'dummyStoragePath'
|
|
|
|
|
const testInput =
|
|
|
|
|
'<html>\n' +
|
|
|
|
|
' <head>\n' +
|
|
|
|
|
' //header\n' +
|
|
|
|
|
' </head>\n' +
|
|
|
|
|
' <body data-theme="default">\n' +
|
|
|
|
|
' <h2 data-line="0" id="Headline">Headline</h2>\n' +
|
|
|
|
|
' <p data-line="2">\n' +
|
|
|
|
|
' <img src=":storage' + mdurl.encode(path.sep) + '9c9c4ba3-bc1e-441f-9866-c1e9a806e31c' + mdurl.encode(path.sep) + '0.6r4zdgc22xp.png" alt="dummyImage.png" >\n' +
|
|
|
|
|
' </p>\n' +
|
|
|
|
|
' <p data-line="4">\n' +
|
|
|
|
|
' <a href=":storage' + mdurl.encode(path.sep) + '9c9c4ba3-bc1e-441f-9866-c1e9a806e31c' + mdurl.encode(path.sep) + '0.q2i4iw0fyx.pdf">dummyPDF.pdf</a>\n' +
|
|
|
|
|
' </p>\n' +
|
|
|
|
|
' <p data-line="6">\n' +
|
|
|
|
|
' <img src=":storage' + mdurl.encode(path.sep) + '9c9c4ba3-bc1e-441f-9866-c1e9a806e31c' + mdurl.encode(path.sep) + 'd6c5ee92.jpg" alt="dummyImage2.jpg">\n' +
|
|
|
|
|
' </p>\n' +
|
|
|
|
|
' </body>\n' +
|
|
|
|
|
'</html>'
|
|
|
|
|
const actual = systemUnderTest.getAbsolutePathsOfAttachmentsInContent(testInput, dummyStoragePath)
|
|
|
|
|
const expected = [dummyStoragePath + path.sep + systemUnderTest.DESTINATION_FOLDER + path.sep + '9c9c4ba3-bc1e-441f-9866-c1e9a806e31c' + path.sep + '0.6r4zdgc22xp',
|
|
|
|
|
dummyStoragePath + path.sep + systemUnderTest.DESTINATION_FOLDER + path.sep + '9c9c4ba3-bc1e-441f-9866-c1e9a806e31c' + path.sep + '0.q2i4iw0fyx',
|
|
|
|
|
dummyStoragePath + path.sep + systemUnderTest.DESTINATION_FOLDER + path.sep + '9c9c4ba3-bc1e-441f-9866-c1e9a806e31c' + path.sep + 'd6c5ee92.jpg']
|
|
|
|
|
expect(actual).toEqual(expect.arrayContaining(expected))
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('should remove the all ":storage" and noteKey references', function () {
|
|
|
|
|
const storageFolder = systemUnderTest.DESTINATION_FOLDER
|
|
|
|
|
const noteKey = 'noteKey'
|
|
|
|
|
const testInput =
|
|
|
|
|
'<html>\n' +
|
|
|
|
|
' <head>\n' +
|
|
|
|
|
' //header\n' +
|
|
|
|
|
' </head>\n' +
|
|
|
|
|
' <body data-theme="default">\n' +
|
|
|
|
|
' <h2 data-line="0" id="Headline">Headline</h2>\n' +
|
|
|
|
|
' <p data-line="2">\n' +
|
|
|
|
|
' <img src=":storage' + mdurl.encode(path.sep) + noteKey + mdurl.encode(path.sep) + '0.6r4zdgc22xp.png" alt="dummyImage.png" >\n' +
|
|
|
|
|
' </p>\n' +
|
|
|
|
|
' <p data-line="4">\n' +
|
|
|
|
|
' <a href=":storage' + mdurl.encode(path.sep) + noteKey + mdurl.encode(path.sep) + '0.q2i4iw0fyx.pdf">dummyPDF.pdf</a>\n' +
|
|
|
|
|
' </p>\n' +
|
|
|
|
|
' <p data-line="6">\n' +
|
|
|
|
|
' <img src=":storage' + mdurl.encode(path.sep) + noteKey + mdurl.encode(path.sep) + 'd6c5ee92.jpg" alt="dummyImage2.jpg">\n' +
|
|
|
|
|
' </p>\n' +
|
|
|
|
|
' </body>\n' +
|
|
|
|
|
'</html>'
|
|
|
|
|
const expectedOutput =
|
|
|
|
|
'<html>\n' +
|
|
|
|
|
' <head>\n' +
|
|
|
|
|
' //header\n' +
|
|
|
|
|
' </head>\n' +
|
|
|
|
|
' <body data-theme="default">\n' +
|
|
|
|
|
' <h2 data-line="0" id="Headline">Headline</h2>\n' +
|
|
|
|
|
' <p data-line="2">\n' +
|
|
|
|
|
' <img src="' + storageFolder + path.sep + '0.6r4zdgc22xp.png" alt="dummyImage.png" >\n' +
|
|
|
|
|
' </p>\n' +
|
|
|
|
|
' <p data-line="4">\n' +
|
|
|
|
|
' <a href="' + storageFolder + path.sep + '0.q2i4iw0fyx.pdf">dummyPDF.pdf</a>\n' +
|
|
|
|
|
' </p>\n' +
|
|
|
|
|
' <p data-line="6">\n' +
|
|
|
|
|
' <img src="' + storageFolder + path.sep + 'd6c5ee92.jpg" alt="dummyImage2.jpg">\n' +
|
|
|
|
|
' </p>\n' +
|
|
|
|
|
' </body>\n' +
|
|
|
|
|
'</html>'
|
|
|
|
|
const actual = systemUnderTest.removeStorageAndNoteReferences(testInput, noteKey)
|
|
|
|
|
expect(actual).toEqual(expectedOutput)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('should delete the correct attachment folder if a note is deleted', function () {
|
|
|
|
|
const dummyStorage = {path: 'dummyStoragePath'}
|
|
|
|
|
const storageKey = 'storageKey'
|
|
|
|
|
const noteKey = 'noteKey'
|
|
|
|
|
findStorage.findStorage = jest.fn(() => dummyStorage)
|
|
|
|
|
sander.rimrafSync = jest.fn()
|
|
|
|
|
|
|
|
|
|
const expectedPathToBeDeleted = path.join(dummyStorage.path, systemUnderTest.DESTINATION_FOLDER, noteKey)
|
|
|
|
|
systemUnderTest.deleteAttachmentFolder(storageKey, noteKey)
|
|
|
|
|
expect(findStorage.findStorage).toHaveBeenCalledWith(storageKey)
|
|
|
|
|
expect(sander.rimrafSync).toHaveBeenCalledWith(expectedPathToBeDeleted)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('should test that deleteAttachmentsNotPresentInNote deletes all unreferenced attachments ', function () {
|
|
|
|
|
const dummyStorage = {path: 'dummyStoragePath'}
|
|
|
|
|
const noteKey = 'noteKey'
|
|
|
|
|
const storageKey = 'storageKey'
|
|
|
|
|
const markdownContent = ''
|
|
|
|
|
const dummyFilesInFolder = ['file1.txt', 'file2.pdf', 'file3.jpg']
|
|
|
|
|
const attachmentFolderPath = path.join(dummyStorage.path, systemUnderTest.DESTINATION_FOLDER, noteKey)
|
|
|
|
|
|
|
|
|
|
findStorage.findStorage = jest.fn(() => dummyStorage)
|
|
|
|
|
fs.existsSync = jest.fn(() => true)
|
|
|
|
|
fs.readdir = jest.fn((paht, callback) => callback(undefined, dummyFilesInFolder))
|
|
|
|
|
fs.unlink = jest.fn()
|
|
|
|
|
|
|
|
|
|
systemUnderTest.deleteAttachmentsNotPresentInNote(markdownContent, storageKey, noteKey)
|
|
|
|
|
expect(fs.existsSync).toHaveBeenLastCalledWith(attachmentFolderPath)
|
|
|
|
|
expect(fs.readdir).toHaveBeenCalledTimes(1)
|
|
|
|
|
expect(fs.readdir.mock.calls[0][0]).toBe(attachmentFolderPath)
|
|
|
|
|
|
|
|
|
|
expect(fs.unlink).toHaveBeenCalledTimes(dummyFilesInFolder.length)
|
|
|
|
|
const fsUnlinkCallArguments = []
|
|
|
|
|
for (let i = 0; i < dummyFilesInFolder.length; i++) {
|
|
|
|
|
fsUnlinkCallArguments.push(fs.unlink.mock.calls[i][0])
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dummyFilesInFolder.forEach(function (file) {
|
|
|
|
|
expect(fsUnlinkCallArguments.includes(path.join(attachmentFolderPath, file))).toBe(true)
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('should test that deleteAttachmentsNotPresentInNote does not delete referenced attachments', function () {
|
|
|
|
|
const dummyStorage = {path: 'dummyStoragePath'}
|
|
|
|
|
const noteKey = 'noteKey'
|
|
|
|
|
const storageKey = 'storageKey'
|
|
|
|
|
const dummyFilesInFolder = ['file1.txt', 'file2.pdf', 'file3.jpg']
|
|
|
|
|
const markdownContent = systemUnderTest.generateAttachmentMarkdown('fileLabel', path.join(systemUnderTest.STORAGE_FOLDER_PLACEHOLDER, noteKey, dummyFilesInFolder[0]), false)
|
|
|
|
|
const attachmentFolderPath = path.join(dummyStorage.path, systemUnderTest.DESTINATION_FOLDER, noteKey)
|
|
|
|
|
|
|
|
|
|
findStorage.findStorage = jest.fn(() => dummyStorage)
|
|
|
|
|
fs.existsSync = jest.fn(() => true)
|
|
|
|
|
fs.readdir = jest.fn((paht, callback) => callback(undefined, dummyFilesInFolder))
|
|
|
|
|
fs.unlink = jest.fn()
|
|
|
|
|
|
|
|
|
|
systemUnderTest.deleteAttachmentsNotPresentInNote(markdownContent, storageKey, noteKey)
|
|
|
|
|
|
|
|
|
|
expect(fs.unlink).toHaveBeenCalledTimes(dummyFilesInFolder.length - 1)
|
|
|
|
|
const fsUnlinkCallArguments = []
|
|
|
|
|
for (let i = 0; i < dummyFilesInFolder.length - 1; i++) {
|
|
|
|
|
fsUnlinkCallArguments.push(fs.unlink.mock.calls[i][0])
|
|
|
|
|
}
|
|
|
|
|
expect(fsUnlinkCallArguments.includes(path.join(attachmentFolderPath, dummyFilesInFolder[0]))).toBe(false)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('should test that moveAttachments moves attachments only if the source folder existed', function () {
|
|
|
|
|
fse.existsSync = jest.fn(() => false)
|
|
|
|
|
fse.moveSync = jest.fn()
|
|
|
|
|
|
|
|
|
|
const oldPath = 'oldPath'
|
|
|
|
|
const newPath = 'newPath'
|
|
|
|
|
const oldNoteKey = 'oldNoteKey'
|
|
|
|
|
const newNoteKey = 'newNoteKey'
|
|
|
|
|
const content = ''
|
|
|
|
|
|
|
|
|
|
const expectedSource = path.join(oldPath, systemUnderTest.DESTINATION_FOLDER, oldNoteKey)
|
|
|
|
|
|
|
|
|
|
systemUnderTest.moveAttachments(oldPath, newPath, oldNoteKey, newNoteKey, content)
|
|
|
|
|
expect(fse.existsSync).toHaveBeenCalledWith(expectedSource)
|
|
|
|
|
expect(fse.moveSync).not.toHaveBeenCalled()
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('should test that moveAttachments moves attachments to the right destination', function () {
|
|
|
|
|
fse.existsSync = jest.fn(() => true)
|
|
|
|
|
fse.moveSync = jest.fn()
|
|
|
|
|
|
|
|
|
|
const oldPath = 'oldPath'
|
|
|
|
|
const newPath = 'newPath'
|
|
|
|
|
const oldNoteKey = 'oldNoteKey'
|
|
|
|
|
const newNoteKey = 'newNoteKey'
|
|
|
|
|
const content = ''
|
|
|
|
|
|
|
|
|
|
const expectedSource = path.join(oldPath, systemUnderTest.DESTINATION_FOLDER, oldNoteKey)
|
|
|
|
|
const expectedDestination = path.join(newPath, systemUnderTest.DESTINATION_FOLDER, newNoteKey)
|
|
|
|
|
|
|
|
|
|
systemUnderTest.moveAttachments(oldPath, newPath, oldNoteKey, newNoteKey, content)
|
|
|
|
|
expect(fse.existsSync).toHaveBeenCalledWith(expectedSource)
|
|
|
|
|
expect(fse.moveSync).toHaveBeenCalledWith(expectedSource, expectedDestination)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('should test that moveAttachments returns a correct modified content version', function () {
|
|
|
|
|
fse.existsSync = jest.fn()
|
|
|
|
|
fse.moveSync = jest.fn()
|
|
|
|
|
|
|
|
|
|
const oldPath = 'oldPath'
|
|
|
|
|
const newPath = 'newPath'
|
|
|
|
|
const oldNoteKey = 'oldNoteKey'
|
|
|
|
|
const newNoteKey = 'newNoteKey'
|
|
|
|
|
const testInput =
|
|
|
|
|
'Test input' +
|
|
|
|
|
' \n' +
|
|
|
|
|
'[' + systemUnderTest.STORAGE_FOLDER_PLACEHOLDER + path.sep + oldNoteKey + path.sep + 'pdf.pdf](pdf})'
|
|
|
|
|
const expectedOutput =
|
|
|
|
|
'Test input' +
|
|
|
|
|
' \n' +
|
|
|
|
|
'[' + systemUnderTest.STORAGE_FOLDER_PLACEHOLDER + path.sep + newNoteKey + path.sep + 'pdf.pdf](pdf})'
|
|
|
|
|
|
|
|
|
|
const actualContent = systemUnderTest.moveAttachments(oldPath, newPath, oldNoteKey, newNoteKey, testInput)
|
|
|
|
|
expect(actualContent).toBe(expectedOutput)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('should test that cloneAttachments modifies the content of the new note correctly', function () {
|
|
|
|
|
const oldNote = {key: 'oldNoteKey', content: 'oldNoteContent', storage: 'storageKey', type: 'MARKDOWN_NOTE'}
|
|
|
|
|
const newNote = {key: 'newNoteKey', content: 'oldNoteContent', storage: 'storageKey', type: 'MARKDOWN_NOTE'}
|
|
|
|
|
const testInput =
|
|
|
|
|
'Test input' +
|
|
|
|
|
' \n' +
|
|
|
|
|
'[' + systemUnderTest.STORAGE_FOLDER_PLACEHOLDER + path.sep + oldNote.key + path.sep + 'pdf.pdf](pdf})'
|
|
|
|
|
newNote.content = testInput
|
|
|
|
|
|
|
|
|
|
const expectedOutput =
|
|
|
|
|
'Test input' +
|
|
|
|
|
' \n' +
|
|
|
|
|
'[' + systemUnderTest.STORAGE_FOLDER_PLACEHOLDER + path.sep + newNote.key + path.sep + 'pdf.pdf](pdf})'
|
|
|
|
|
systemUnderTest.cloneAttachments(oldNote, newNote)
|
|
|
|
|
|
|
|
|
|
expect(newNote.content).toBe(expectedOutput)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('should test that cloneAttachments finds all attachments and copies them to the new location', function () {
|
|
|
|
|
const storagePathOld = 'storagePathOld'
|
|
|
|
|
const storagePathNew = 'storagePathNew'
|
|
|
|
|
const dummyStorageOld = {path: storagePathOld}
|
|
|
|
|
const dummyStorageNew = {path: storagePathNew}
|
|
|
|
|
const oldNote = {key: 'oldNoteKey', content: 'oldNoteContent', storage: 'storageKeyOldNote', type: 'MARKDOWN_NOTE'}
|
|
|
|
|
const newNote = {key: 'newNoteKey', content: 'oldNoteContent', storage: 'storageKeyNewNote', type: 'MARKDOWN_NOTE'}
|
|
|
|
|
const testInput =
|
|
|
|
|
'Test input' +
|
|
|
|
|
' \n' +
|
|
|
|
|
'[' + systemUnderTest.STORAGE_FOLDER_PLACEHOLDER + path.sep + oldNote.key + path.sep + 'pdf.pdf](pdf})'
|
|
|
|
|
oldNote.content = testInput
|
|
|
|
|
newNote.content = testInput
|
|
|
|
|
|
|
|
|
|
const copyFileSyncResp = {to: jest.fn()}
|
|
|
|
|
sander.copyFileSync = jest.fn()
|
|
|
|
|
sander.copyFileSync.mockReturnValue(copyFileSyncResp)
|
|
|
|
|
findStorage.findStorage = jest.fn()
|
|
|
|
|
findStorage.findStorage.mockReturnValueOnce(dummyStorageOld)
|
|
|
|
|
findStorage.findStorage.mockReturnValue(dummyStorageNew)
|
|
|
|
|
|
|
|
|
|
const pathAttachmentOneFrom = path.join(storagePathOld, systemUnderTest.DESTINATION_FOLDER, oldNote.key, 'image.jpg')
|
|
|
|
|
const pathAttachmentOneTo = path.join(storagePathNew, systemUnderTest.DESTINATION_FOLDER, newNote.key, 'image.jpg')
|
|
|
|
|
|
|
|
|
|
const pathAttachmentTwoFrom = path.join(storagePathOld, systemUnderTest.DESTINATION_FOLDER, oldNote.key, 'pdf.pdf')
|
|
|
|
|
const pathAttachmentTwoTo = path.join(storagePathNew, systemUnderTest.DESTINATION_FOLDER, newNote.key, 'pdf.pdf')
|
|
|
|
|
|
|
|
|
|
systemUnderTest.cloneAttachments(oldNote, newNote)
|
|
|
|
|
|
|
|
|
|
expect(findStorage.findStorage).toHaveBeenCalledWith(oldNote.storage)
|
|
|
|
|
expect(findStorage.findStorage).toHaveBeenCalledWith(newNote.storage)
|
|
|
|
|
expect(sander.copyFileSync).toHaveBeenCalledTimes(2)
|
|
|
|
|
expect(copyFileSyncResp.to).toHaveBeenCalledTimes(2)
|
|
|
|
|
expect(sander.copyFileSync.mock.calls[0][0]).toBe(pathAttachmentOneFrom)
|
|
|
|
|
expect(copyFileSyncResp.to.mock.calls[0][0]).toBe(pathAttachmentOneTo)
|
|
|
|
|
expect(sander.copyFileSync.mock.calls[1][0]).toBe(pathAttachmentTwoFrom)
|
|
|
|
|
expect(copyFileSyncResp.to.mock.calls[1][0]).toBe(pathAttachmentTwoTo)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('should test that cloneAttachments finds all attachments and copies them to the new location', function () {
|
|
|
|
|
const oldNote = {key: 'oldNoteKey', content: 'oldNoteContent', storage: 'storageKeyOldNote', type: 'SOMETHING_ELSE'}
|
|
|
|
|
const newNote = {key: 'newNoteKey', content: 'oldNoteContent', storage: 'storageKeyNewNote', type: 'SOMETHING_ELSE'}
|
|
|
|
|
const testInput = 'Test input'
|
|
|
|
|
oldNote.content = testInput
|
|
|
|
|
newNote.content = testInput
|
|
|
|
|
|
|
|
|
|
sander.copyFileSync = jest.fn()
|
|
|
|
|
findStorage.findStorage = jest.fn()
|
|
|
|
|
|
|
|
|
|
systemUnderTest.cloneAttachments(oldNote, newNote)
|
|
|
|
|
|
|
|
|
|
expect(findStorage.findStorage).not.toHaveBeenCalled()
|
|
|
|
|
expect(sander.copyFileSync).not.toHaveBeenCalled()
|
|
|
|
|
})
|
|
|
|
|
|