mirror of
https://github.com/BoostIo/Boostnote
synced 2025-12-13 01:36:22 +00:00
Merge branch 'master' into html-to-md
# Conflicts: # browser/main/modals/NewNoteModal.js # package-lock.json # package.json # yarn.lock
This commit is contained in:
@@ -38,7 +38,7 @@ it('should test that copyAttachment should throw an error if sourcePath dosen\'t
|
||||
fs.existsSync = jest.fn()
|
||||
fs.existsSync.mockReturnValue(false)
|
||||
|
||||
systemUnderTest.copyAttachment('path', 'storageKey', 'noteKey').then(() => {}, error => {
|
||||
return systemUnderTest.copyAttachment('path', 'storageKey', 'noteKey').then(() => {}, error => {
|
||||
expect(error).toBe('source file does not exist')
|
||||
expect(fs.existsSync).toHaveBeenCalledWith('path')
|
||||
})
|
||||
@@ -64,7 +64,7 @@ it('should test that copyAttachment works correctly assuming correct working of
|
||||
findStorage.findStorage.mockReturnValue(dummyStorage)
|
||||
uniqueSlug.mockReturnValue(dummyUniquePath)
|
||||
|
||||
systemUnderTest.copyAttachment(sourcePath, storageKey, noteKey).then(
|
||||
return systemUnderTest.copyAttachment(sourcePath, storageKey, noteKey).then(
|
||||
function (newFileName) {
|
||||
expect(findStorage.findStorage).toHaveBeenCalledWith(storageKey)
|
||||
expect(fs.createReadStream).toHaveBeenCalledWith(sourcePath)
|
||||
@@ -83,7 +83,7 @@ it('should test that copyAttachment creates a new folder if the attachment folde
|
||||
const dummyReadStream = {}
|
||||
|
||||
dummyReadStream.pipe = jest.fn()
|
||||
dummyReadStream.on = jest.fn()
|
||||
dummyReadStream.on = jest.fn((event, callback) => { callback() })
|
||||
fs.createReadStream = jest.fn(() => dummyReadStream)
|
||||
fs.existsSync = jest.fn()
|
||||
fs.existsSync.mockReturnValueOnce(true)
|
||||
@@ -95,7 +95,7 @@ it('should test that copyAttachment creates a new folder if the attachment folde
|
||||
findStorage.findStorage.mockReturnValue(dummyStorage)
|
||||
uniqueSlug.mockReturnValue('dummyPath')
|
||||
|
||||
systemUnderTest.copyAttachment('path', 'storageKey', 'noteKey').then(
|
||||
return systemUnderTest.copyAttachment('path', 'storageKey', 'noteKey').then(
|
||||
function () {
|
||||
expect(fs.existsSync).toHaveBeenCalledWith(attachmentFolderPath)
|
||||
expect(fs.mkdirSync).toHaveBeenCalledWith(attachmentFolderPath)
|
||||
@@ -109,7 +109,7 @@ it('should test that copyAttachment don\'t uses a random file name if not intend
|
||||
const dummyReadStream = {}
|
||||
|
||||
dummyReadStream.pipe = jest.fn()
|
||||
dummyReadStream.on = jest.fn()
|
||||
dummyReadStream.on = jest.fn((event, callback) => { callback() })
|
||||
fs.createReadStream = jest.fn(() => dummyReadStream)
|
||||
fs.existsSync = jest.fn()
|
||||
fs.existsSync.mockReturnValueOnce(true)
|
||||
@@ -120,14 +120,155 @@ it('should test that copyAttachment don\'t uses a random file name if not intend
|
||||
findStorage.findStorage.mockReturnValue(dummyStorage)
|
||||
uniqueSlug.mockReturnValue('dummyPath')
|
||||
|
||||
systemUnderTest.copyAttachment('path', 'storageKey', 'noteKey', false).then(
|
||||
return systemUnderTest.copyAttachment('path', 'storageKey', 'noteKey', false).then(
|
||||
function (newFileName) {
|
||||
expect(newFileName).toBe('path')
|
||||
})
|
||||
})
|
||||
|
||||
it('should test that copyAttachment with url (with extension, without query)', function () {
|
||||
const dummyStorage = {path: 'dummyStoragePath'}
|
||||
|
||||
const dummyReadStream = {
|
||||
pipe: jest.fn(),
|
||||
on: jest.fn((event, callback) => { callback() })
|
||||
}
|
||||
fs.createReadStream = jest.fn(() => dummyReadStream)
|
||||
|
||||
const dummyWriteStream = {
|
||||
write: jest.fn((data, callback) => { callback() })
|
||||
}
|
||||
fs.createWriteStream = jest.fn(() => dummyWriteStream)
|
||||
|
||||
fs.existsSync = jest.fn()
|
||||
fs.existsSync.mockReturnValueOnce(true)
|
||||
fs.existsSync.mockReturnValueOnce(false)
|
||||
fs.mkdirSync = jest.fn()
|
||||
|
||||
findStorage.findStorage = jest.fn()
|
||||
findStorage.findStorage.mockReturnValue(dummyStorage)
|
||||
uniqueSlug.mockReturnValue('dummyPath')
|
||||
|
||||
const sourcePath = {
|
||||
sourceFilePath: 'http://www.foo.bar/baz/qux.jpg',
|
||||
type: 'base64',
|
||||
data: 'data:image/jpeg;base64,Ym9vc3Rub3Rl'
|
||||
}
|
||||
|
||||
return systemUnderTest.copyAttachment(sourcePath, 'storageKey', 'noteKey').then(
|
||||
function (newFileName) {
|
||||
expect(newFileName).toBe('dummyPath.jpg')
|
||||
})
|
||||
})
|
||||
|
||||
it('should test that copyAttachment with url (with extension, with query)', function () {
|
||||
const dummyStorage = {path: 'dummyStoragePath'}
|
||||
|
||||
const dummyReadStream = {
|
||||
pipe: jest.fn(),
|
||||
on: jest.fn((event, callback) => { callback() })
|
||||
}
|
||||
fs.createReadStream = jest.fn(() => dummyReadStream)
|
||||
|
||||
const dummyWriteStream = {
|
||||
write: jest.fn((data, callback) => { callback() })
|
||||
}
|
||||
fs.createWriteStream = jest.fn(() => dummyWriteStream)
|
||||
|
||||
fs.existsSync = jest.fn()
|
||||
fs.existsSync.mockReturnValueOnce(true)
|
||||
fs.existsSync.mockReturnValueOnce(false)
|
||||
fs.mkdirSync = jest.fn()
|
||||
|
||||
findStorage.findStorage = jest.fn()
|
||||
findStorage.findStorage.mockReturnValue(dummyStorage)
|
||||
uniqueSlug.mockReturnValue('dummyPath')
|
||||
|
||||
const sourcePath = {
|
||||
sourceFilePath: 'http://www.foo.bar/baz/qux.jpg?h=1080',
|
||||
type: 'base64',
|
||||
data: 'data:image/jpeg;base64,Ym9vc3Rub3Rl'
|
||||
}
|
||||
|
||||
return systemUnderTest.copyAttachment(sourcePath, 'storageKey', 'noteKey').then(
|
||||
function (newFileName) {
|
||||
expect(newFileName).toBe('dummyPath.jpg')
|
||||
})
|
||||
})
|
||||
|
||||
it('should test that copyAttachment with url (without extension, without query)', function () {
|
||||
const dummyStorage = {path: 'dummyStoragePath'}
|
||||
|
||||
const dummyReadStream = {
|
||||
pipe: jest.fn(),
|
||||
on: jest.fn((event, callback) => { callback() })
|
||||
}
|
||||
fs.createReadStream = jest.fn(() => dummyReadStream)
|
||||
|
||||
const dummyWriteStream = {
|
||||
write: jest.fn((data, callback) => { callback() })
|
||||
}
|
||||
fs.createWriteStream = jest.fn(() => dummyWriteStream)
|
||||
|
||||
fs.existsSync = jest.fn()
|
||||
fs.existsSync.mockReturnValueOnce(true)
|
||||
fs.existsSync.mockReturnValueOnce(false)
|
||||
fs.mkdirSync = jest.fn()
|
||||
|
||||
findStorage.findStorage = jest.fn()
|
||||
findStorage.findStorage.mockReturnValue(dummyStorage)
|
||||
uniqueSlug.mockReturnValue('dummyPath')
|
||||
|
||||
const sourcePath = {
|
||||
sourceFilePath: 'http://www.foo.bar/baz/qux',
|
||||
type: 'base64',
|
||||
data: 'data:image/jpeg;base64,Ym9vc3Rub3Rl'
|
||||
}
|
||||
|
||||
return systemUnderTest.copyAttachment(sourcePath, 'storageKey', 'noteKey').then(
|
||||
function (newFileName) {
|
||||
expect(newFileName).toBe('dummyPath.png')
|
||||
})
|
||||
})
|
||||
|
||||
it('should test that copyAttachment with url (without extension, with query)', function () {
|
||||
const dummyStorage = {path: 'dummyStoragePath'}
|
||||
|
||||
const dummyReadStream = {
|
||||
pipe: jest.fn(),
|
||||
on: jest.fn((event, callback) => { callback() })
|
||||
}
|
||||
fs.createReadStream = jest.fn(() => dummyReadStream)
|
||||
|
||||
const dummyWriteStream = {
|
||||
write: jest.fn((data, callback) => { callback() })
|
||||
}
|
||||
fs.createWriteStream = jest.fn(() => dummyWriteStream)
|
||||
|
||||
fs.existsSync = jest.fn()
|
||||
fs.existsSync.mockReturnValueOnce(true)
|
||||
fs.existsSync.mockReturnValueOnce(false)
|
||||
fs.mkdirSync = jest.fn()
|
||||
|
||||
findStorage.findStorage = jest.fn()
|
||||
findStorage.findStorage.mockReturnValue(dummyStorage)
|
||||
uniqueSlug.mockReturnValue('dummyPath')
|
||||
|
||||
const sourcePath = {
|
||||
sourceFilePath: 'http://www.foo.bar/baz/qux?h=1080',
|
||||
type: 'base64',
|
||||
data: 'data:image/jpeg;base64,Ym9vc3Rub3Rl'
|
||||
}
|
||||
|
||||
return systemUnderTest.copyAttachment(sourcePath, 'storageKey', 'noteKey').then(
|
||||
function (newFileName) {
|
||||
expect(newFileName).toBe('dummyPath.png')
|
||||
})
|
||||
})
|
||||
|
||||
it('should replace the all ":storage" path with the actual storage path', function () {
|
||||
const storageFolder = systemUnderTest.DESTINATION_FOLDER
|
||||
const noteKey = '9c9c4ba3-bc1e-441f-9866-c1e9a806e31c'
|
||||
const testInput =
|
||||
'<html>\n' +
|
||||
' <head>\n' +
|
||||
@@ -136,13 +277,62 @@ 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=":storage' + mdurl.encode(path.sep) + '0.6r4zdgc22xp.png" alt="dummyImage.png" >\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) + '0.q2i4iw0fyx.pdf">dummyPDF.pdf</a>\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) + 'd6c5ee92.jpg" alt="dummyImage2.jpg">\n' +
|
||||
' <img src=":storage' + mdurl.encode(path.sep) + noteKey + mdurl.encode(path.sep) + 'd6c5ee92.jpg" alt="dummyImage2.jpg">\n' +
|
||||
' </p>\n' +
|
||||
' <pre class="fence" data-line="8">\n' +
|
||||
' <span class="filename"></span>\n' +
|
||||
' <div class="gallery" data-autoplay="undefined" data-height="undefined">:storage' + mdurl.encode(path.sep) + noteKey + mdurl.encode(path.sep) + 'f939b2c3.jpg</div>\n' +
|
||||
' </pre>\n' +
|
||||
' </body>\n' +
|
||||
'</html>'
|
||||
const storagePath = '<<dummyStoragePath>>'
|
||||
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="file:///' + storagePath + path.sep + storageFolder + path.sep + noteKey + path.sep + '0.6r4zdgc22xp.png" alt="dummyImage.png" >\n' +
|
||||
' </p>\n' +
|
||||
' <p data-line="4">\n' +
|
||||
' <a href="file:///' + storagePath + path.sep + storageFolder + path.sep + noteKey + path.sep + '0.q2i4iw0fyx.pdf">dummyPDF.pdf</a>\n' +
|
||||
' </p>\n' +
|
||||
' <p data-line="6">\n' +
|
||||
' <img src="file:///' + storagePath + path.sep + storageFolder + path.sep + noteKey + path.sep + 'd6c5ee92.jpg" alt="dummyImage2.jpg">\n' +
|
||||
' </p>\n' +
|
||||
' <pre class="fence" data-line="8">\n' +
|
||||
' <span class="filename"></span>\n' +
|
||||
' <div class="gallery" data-autoplay="undefined" data-height="undefined">file:///' + storagePath + path.sep + storageFolder + path.sep + noteKey + path.sep + 'f939b2c3.jpg</div>\n' +
|
||||
' </pre>\n' +
|
||||
' </body>\n' +
|
||||
'</html>'
|
||||
const actual = systemUnderTest.fixLocalURLS(testInput, storagePath)
|
||||
expect(actual).toEqual(expectedOutput)
|
||||
})
|
||||
|
||||
it('should replace the ":storage" path with the actual storage path when they have different path separators', function () {
|
||||
const storageFolder = systemUnderTest.DESTINATION_FOLDER
|
||||
const noteKey = '9c9c4ba3-bc1e-441f-9866-c1e9a806e31c'
|
||||
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.win32.sep) + noteKey + mdurl.encode(path.win32.sep) + '0.6r4zdgc22xp.png" alt="dummyImage.png" >\n' +
|
||||
' </p>\n' +
|
||||
' <p data-line="4">\n' +
|
||||
' <a href=":storage' + mdurl.encode(path.posix.sep) + noteKey + mdurl.encode(path.posix.sep) + '0.q2i4iw0fyx.pdf">dummyPDF.pdf</a>\n' +
|
||||
' </p>\n' +
|
||||
' </body>\n' +
|
||||
'</html>'
|
||||
@@ -155,13 +345,10 @@ 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 + path.sep + storageFolder + path.sep + '0.6r4zdgc22xp.png" alt="dummyImage.png" >\n' +
|
||||
' <img src="file:///' + storagePath + path.sep + storageFolder + path.sep + noteKey + path.sep + '0.6r4zdgc22xp.png" alt="dummyImage.png" >\n' +
|
||||
' </p>\n' +
|
||||
' <p data-line="4">\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 + path.sep + storageFolder + path.sep + 'd6c5ee92.jpg" alt="dummyImage2.jpg">\n' +
|
||||
' <a href="file:///' + storagePath + path.sep + storageFolder + path.sep + noteKey + path.sep + '0.q2i4iw0fyx.pdf">dummyPDF.pdf</a>\n' +
|
||||
' </p>\n' +
|
||||
' </body>\n' +
|
||||
'</html>'
|
||||
@@ -180,54 +367,51 @@ it('should test that generateAttachmentMarkdown works correct both with previews
|
||||
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']
|
||||
it('should test that migrateAttachments work when they have different path separators', function () {
|
||||
sander.existsSync = jest.fn(() => true)
|
||||
const dummyStoragePath = 'dummyStoragePath'
|
||||
const imagesPath = path.join(dummyStoragePath, 'images')
|
||||
const attachmentsPath = path.join(dummyStoragePath, 'attachments')
|
||||
const noteKey = 'noteKey'
|
||||
const testInput = '"# Test\n' +
|
||||
'\n' +
|
||||
'\n' +
|
||||
'"'
|
||||
|
||||
systemUnderTest.migrateAttachments(testInput, dummyStoragePath, noteKey)
|
||||
|
||||
expect(sander.existsSync.mock.calls[0][0]).toBe(imagesPath)
|
||||
expect(sander.existsSync.mock.calls[1][0]).toBe(path.join(imagesPath, '0.3b88d0dc.png'))
|
||||
expect(sander.existsSync.mock.calls[2][0]).toBe(path.join(attachmentsPath, '0.3b88d0dc.png'))
|
||||
expect(sander.existsSync.mock.calls[3][0]).toBe(path.join(imagesPath, '0.2cb8875c.pdf'))
|
||||
expect(sander.existsSync.mock.calls[4][0]).toBe(path.join(attachmentsPath, '0.2cb8875c.pdf'))
|
||||
})
|
||||
|
||||
it('should test that getAttachmentsInMarkdownContent finds all attachments when they have different path separators', function () {
|
||||
const testInput = '"# Test\n' +
|
||||
'\n' +
|
||||
'\n' +
|
||||
'\n' +
|
||||
'"'
|
||||
|
||||
const actual = systemUnderTest.getAttachmentsInMarkdownContent(testInput)
|
||||
const expected = [':storage' + path.sep + '9c9c4ba3-bc1e-441f-9866-c1e9a806e31c' + path.sep + '0.3b88d0dc.png', ':storage' + path.sep + '9c9c4ba3-bc1e-441f-9866-c1e9a806e31c' + path.sep + '2cb8875c.pdf', ':storage' + path.sep + '9c9c4ba3-bc1e-441f-9866-c1e9a806e31c' + path.sep + 'bbf49b02.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 noteKey = '9c9c4ba3-bc1e-441f-9866-c1e9a806e31c'
|
||||
const testInput = '"# Test\n' +
|
||||
'\n' +
|
||||
'\n' +
|
||||
'\n' +
|
||||
'"'
|
||||
|
||||
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']
|
||||
const expected = [dummyStoragePath + path.sep + systemUnderTest.DESTINATION_FOLDER + path.sep + noteKey + path.sep + '0.6r4zdgc22xp.png',
|
||||
dummyStoragePath + path.sep + systemUnderTest.DESTINATION_FOLDER + path.sep + noteKey + path.sep + '0.q2i4iw0fyx.pdf',
|
||||
dummyStoragePath + path.sep + systemUnderTest.DESTINATION_FOLDER + path.sep + noteKey + path.sep + 'd6c5ee92.jpg']
|
||||
expect(actual).toEqual(expect.arrayContaining(expected))
|
||||
})
|
||||
|
||||
@@ -242,13 +426,13 @@ it('should remove the all ":storage" and noteKey references', function () {
|
||||
' <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' +
|
||||
' <img src=":storage' + mdurl.encode(path.win32.sep) + noteKey + mdurl.encode(path.win32.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' +
|
||||
' <a href=":storage' + mdurl.encode(path.posix.sep) + noteKey + mdurl.encode(path.posix.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' +
|
||||
' <img src=":storage' + mdurl.encode(path.win32.sep) + noteKey + mdurl.encode(path.posix.sep) + 'd6c5ee92.jpg" alt="dummyImage2.jpg">\n' +
|
||||
' </p>\n' +
|
||||
' </body>\n' +
|
||||
'</html>'
|
||||
@@ -274,6 +458,21 @@ it('should remove the all ":storage" and noteKey references', function () {
|
||||
expect(actual).toEqual(expectedOutput)
|
||||
})
|
||||
|
||||
it('should make sure that "removeStorageAndNoteReferences" works with markdown content as well', function () {
|
||||
const noteKey = 'noteKey'
|
||||
const testInput =
|
||||
'Test input' +
|
||||
' \n' +
|
||||
'[' + systemUnderTest.STORAGE_FOLDER_PLACEHOLDER + path.posix.sep + noteKey + path.posix.sep + 'pdf.pdf](pdf})'
|
||||
|
||||
const expectedOutput =
|
||||
'Test input' +
|
||||
' \n' +
|
||||
'[' + systemUnderTest.DESTINATION_FOLDER + path.sep + 'pdf.pdf](pdf})'
|
||||
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'
|
||||
@@ -339,6 +538,38 @@ it('should test that deleteAttachmentsNotPresentInNote does not delete reference
|
||||
expect(fsUnlinkCallArguments.includes(path.join(attachmentFolderPath, dummyFilesInFolder[0]))).toBe(false)
|
||||
})
|
||||
|
||||
it('should test that deleteAttachmentsNotPresentInNote does nothing if noteKey, storageKey or noteContent was null', function () {
|
||||
const noteKey = null
|
||||
const storageKey = null
|
||||
const markdownContent = ''
|
||||
|
||||
findStorage.findStorage = jest.fn()
|
||||
fs.existsSync = jest.fn()
|
||||
fs.readdir = jest.fn()
|
||||
fs.unlink = jest.fn()
|
||||
|
||||
systemUnderTest.deleteAttachmentsNotPresentInNote(markdownContent, storageKey, noteKey)
|
||||
expect(fs.existsSync).not.toHaveBeenCalled()
|
||||
expect(fs.readdir).not.toHaveBeenCalled()
|
||||
expect(fs.unlink).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('should test that deleteAttachmentsNotPresentInNote does nothing if noteKey, storageKey or noteContent was undefined', function () {
|
||||
const noteKey = undefined
|
||||
const storageKey = undefined
|
||||
const markdownContent = ''
|
||||
|
||||
findStorage.findStorage = jest.fn()
|
||||
fs.existsSync = jest.fn()
|
||||
fs.readdir = jest.fn()
|
||||
fs.unlink = jest.fn()
|
||||
|
||||
systemUnderTest.deleteAttachmentsNotPresentInNote(markdownContent, storageKey, noteKey)
|
||||
expect(fs.existsSync).not.toHaveBeenCalled()
|
||||
expect(fs.readdir).not.toHaveBeenCalled()
|
||||
expect(fs.unlink).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('should test that moveAttachments moves attachments only if the source folder existed', function () {
|
||||
fse.existsSync = jest.fn(() => false)
|
||||
fse.moveSync = jest.fn()
|
||||
@@ -384,8 +615,8 @@ it('should test that moveAttachments returns a correct modified content version'
|
||||
const newNoteKey = 'newNoteKey'
|
||||
const testInput =
|
||||
'Test input' +
|
||||
' \n' +
|
||||
'[' + systemUnderTest.STORAGE_FOLDER_PLACEHOLDER + path.sep + oldNoteKey + path.sep + 'pdf.pdf](pdf})'
|
||||
' \n' +
|
||||
'[' + systemUnderTest.STORAGE_FOLDER_PLACEHOLDER + path.posix.sep + oldNoteKey + path.posix.sep + 'pdf.pdf](pdf})'
|
||||
const expectedOutput =
|
||||
'Test input' +
|
||||
' \n' +
|
||||
@@ -400,9 +631,11 @@ it('should test that cloneAttachments modifies the content of the new note corre
|
||||
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})'
|
||||
' \n' +
|
||||
'[' + systemUnderTest.STORAGE_FOLDER_PLACEHOLDER + path.posix.sep + oldNote.key + path.posix.sep + 'pdf.pdf](pdf})'
|
||||
newNote.content = testInput
|
||||
findStorage.findStorage = jest.fn()
|
||||
findStorage.findStorage.mockReturnValue({path: 'dummyStoragePath'})
|
||||
|
||||
const expectedOutput =
|
||||
'Test input' +
|
||||
@@ -422,8 +655,8 @@ it('should test that cloneAttachments finds all attachments and copies them to t
|
||||
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})'
|
||||
' \n' +
|
||||
'[' + systemUnderTest.STORAGE_FOLDER_PLACEHOLDER + path.posix.sep + oldNote.key + path.posix.sep + 'pdf.pdf](pdf})'
|
||||
oldNote.content = testInput
|
||||
newNote.content = testInput
|
||||
|
||||
@@ -467,3 +700,288 @@ it('should test that cloneAttachments finds all attachments and copies them to t
|
||||
expect(findStorage.findStorage).not.toHaveBeenCalled()
|
||||
expect(sander.copyFileSync).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('should test that isAttachmentLink works correctly', function () {
|
||||
expect(systemUnderTest.isAttachmentLink('text')).toBe(false)
|
||||
expect(systemUnderTest.isAttachmentLink('text [linkText](link)')).toBe(false)
|
||||
expect(systemUnderTest.isAttachmentLink('text ')).toBe(false)
|
||||
expect(systemUnderTest.isAttachmentLink('[linkText](' + systemUnderTest.STORAGE_FOLDER_PLACEHOLDER + path.win32.sep + 'noteKey' + path.win32.sep + 'pdf.pdf)')).toBe(true)
|
||||
expect(systemUnderTest.isAttachmentLink('')).toBe(true)
|
||||
expect(systemUnderTest.isAttachmentLink('text [ linkText](' + systemUnderTest.STORAGE_FOLDER_PLACEHOLDER + path.win32.sep + 'noteKey' + path.win32.sep + 'pdf.pdf)')).toBe(true)
|
||||
expect(systemUnderTest.isAttachmentLink('text ')).toBe(true)
|
||||
expect(systemUnderTest.isAttachmentLink('[linkText](' + systemUnderTest.STORAGE_FOLDER_PLACEHOLDER + path.win32.sep + 'noteKey' + path.win32.sep + 'pdf.pdf) test')).toBe(true)
|
||||
expect(systemUnderTest.isAttachmentLink(' test')).toBe(true)
|
||||
expect(systemUnderTest.isAttachmentLink('text [linkText](' + systemUnderTest.STORAGE_FOLDER_PLACEHOLDER + path.win32.sep + 'noteKey' + path.win32.sep + 'pdf.pdf) test')).toBe(true)
|
||||
expect(systemUnderTest.isAttachmentLink('text  test')).toBe(true)
|
||||
expect(systemUnderTest.isAttachmentLink('[linkText](' + systemUnderTest.STORAGE_FOLDER_PLACEHOLDER + path.posix.sep + 'noteKey' + path.posix.sep + 'pdf.pdf)')).toBe(true)
|
||||
expect(systemUnderTest.isAttachmentLink('')).toBe(true)
|
||||
expect(systemUnderTest.isAttachmentLink('text [ linkText](' + systemUnderTest.STORAGE_FOLDER_PLACEHOLDER + path.posix.sep + 'noteKey' + path.posix.sep + 'pdf.pdf)')).toBe(true)
|
||||
expect(systemUnderTest.isAttachmentLink('text ')).toBe(true)
|
||||
expect(systemUnderTest.isAttachmentLink('[linkText](' + systemUnderTest.STORAGE_FOLDER_PLACEHOLDER + path.posix.sep + 'noteKey' + path.posix.sep + 'pdf.pdf) test')).toBe(true)
|
||||
expect(systemUnderTest.isAttachmentLink(' test')).toBe(true)
|
||||
expect(systemUnderTest.isAttachmentLink('text [linkText](' + systemUnderTest.STORAGE_FOLDER_PLACEHOLDER + path.posix.sep + 'noteKey' + path.posix.sep + 'pdf.pdf) test')).toBe(true)
|
||||
expect(systemUnderTest.isAttachmentLink('text  test')).toBe(true)
|
||||
})
|
||||
|
||||
it('should test that handleAttachmentLinkPaste copies the attachments to the new location', function () {
|
||||
const dummyStorage = {path: 'dummyStoragePath'}
|
||||
findStorage.findStorage = jest.fn(() => dummyStorage)
|
||||
const pastedNoteKey = 'b1e06f81-8266-49b9-b438-084003c2e723'
|
||||
const newNoteKey = 'abc234-8266-49b9-b438-084003c2e723'
|
||||
const pasteText = 'text '
|
||||
const storageKey = 'storageKey'
|
||||
const expectedSourceFilePath = path.join(dummyStorage.path, systemUnderTest.DESTINATION_FOLDER, pastedNoteKey, 'pdf.pdf')
|
||||
|
||||
sander.exists = jest.fn(() => Promise.resolve(true))
|
||||
systemUnderTest.copyAttachment = jest.fn(() => Promise.resolve('dummyNewFileName'))
|
||||
|
||||
return systemUnderTest.handleAttachmentLinkPaste(storageKey, newNoteKey, pasteText)
|
||||
.then(() => {
|
||||
expect(findStorage.findStorage).toHaveBeenCalledWith(storageKey)
|
||||
expect(sander.exists).toHaveBeenCalledWith(expectedSourceFilePath)
|
||||
expect(systemUnderTest.copyAttachment).toHaveBeenCalledWith(expectedSourceFilePath, storageKey, newNoteKey)
|
||||
})
|
||||
})
|
||||
|
||||
it('should test that handleAttachmentLinkPaste copies the attachments to the new location - win32 path', function () {
|
||||
const dummyStorage = {path: 'dummyStoragePath'}
|
||||
findStorage.findStorage = jest.fn(() => dummyStorage)
|
||||
const pastedNoteKey = 'b1e06f81-8266-49b9-b438-084003c2e723'
|
||||
const newNoteKey = 'abc234-8266-49b9-b438-084003c2e723'
|
||||
const pasteText = 'text '
|
||||
const storageKey = 'storageKey'
|
||||
const expectedSourceFilePath = path.join(dummyStorage.path, systemUnderTest.DESTINATION_FOLDER, pastedNoteKey, 'pdf.pdf')
|
||||
|
||||
sander.exists = jest.fn(() => Promise.resolve(true))
|
||||
systemUnderTest.copyAttachment = jest.fn(() => Promise.resolve('dummyNewFileName'))
|
||||
|
||||
return systemUnderTest.handleAttachmentLinkPaste(storageKey, newNoteKey, pasteText)
|
||||
.then(() => {
|
||||
expect(findStorage.findStorage).toHaveBeenCalledWith(storageKey)
|
||||
expect(sander.exists).toHaveBeenCalledWith(expectedSourceFilePath)
|
||||
expect(systemUnderTest.copyAttachment).toHaveBeenCalledWith(expectedSourceFilePath, storageKey, newNoteKey)
|
||||
})
|
||||
})
|
||||
|
||||
it('should test that handleAttachmentLinkPaste don\'t try to copy the file if it does not exist - win32 path', function () {
|
||||
const dummyStorage = {path: 'dummyStoragePath'}
|
||||
findStorage.findStorage = jest.fn(() => dummyStorage)
|
||||
const pastedNoteKey = 'b1e06f81-8266-49b9-b438-084003c2e723'
|
||||
const newNoteKey = 'abc234-8266-49b9-b438-084003c2e723'
|
||||
const pasteText = 'text '
|
||||
const storageKey = 'storageKey'
|
||||
const expectedSourceFilePath = path.join(dummyStorage.path, systemUnderTest.DESTINATION_FOLDER, pastedNoteKey, 'pdf.pdf')
|
||||
|
||||
sander.exists = jest.fn(() => Promise.resolve(false))
|
||||
systemUnderTest.copyAttachment = jest.fn()
|
||||
systemUnderTest.generateFileNotFoundMarkdown = jest.fn()
|
||||
|
||||
return systemUnderTest.handleAttachmentLinkPaste(storageKey, newNoteKey, pasteText)
|
||||
.then(() => {
|
||||
expect(findStorage.findStorage).toHaveBeenCalledWith(storageKey)
|
||||
expect(sander.exists).toHaveBeenCalledWith(expectedSourceFilePath)
|
||||
expect(systemUnderTest.copyAttachment).not.toHaveBeenCalled()
|
||||
})
|
||||
})
|
||||
|
||||
it('should test that handleAttachmentLinkPaste don\'t try to copy the file if it does not exist -- posix', function () {
|
||||
const dummyStorage = {path: 'dummyStoragePath'}
|
||||
findStorage.findStorage = jest.fn(() => dummyStorage)
|
||||
const pastedNoteKey = 'b1e06f81-8266-49b9-b438-084003c2e723'
|
||||
const newNoteKey = 'abc234-8266-49b9-b438-084003c2e723'
|
||||
const pasteText = 'text '
|
||||
const storageKey = 'storageKey'
|
||||
const expectedSourceFilePath = path.join(dummyStorage.path, systemUnderTest.DESTINATION_FOLDER, pastedNoteKey, 'pdf.pdf')
|
||||
|
||||
sander.exists = jest.fn(() => Promise.resolve(false))
|
||||
systemUnderTest.copyAttachment = jest.fn()
|
||||
systemUnderTest.generateFileNotFoundMarkdown = jest.fn()
|
||||
|
||||
return systemUnderTest.handleAttachmentLinkPaste(storageKey, newNoteKey, pasteText)
|
||||
.then(() => {
|
||||
expect(findStorage.findStorage).toHaveBeenCalledWith(storageKey)
|
||||
expect(sander.exists).toHaveBeenCalledWith(expectedSourceFilePath)
|
||||
expect(systemUnderTest.copyAttachment).not.toHaveBeenCalled()
|
||||
})
|
||||
})
|
||||
|
||||
it('should test that handleAttachmentLinkPaste copies multiple attachments if multiple were pasted', function () {
|
||||
const dummyStorage = {path: 'dummyStoragePath'}
|
||||
findStorage.findStorage = jest.fn(() => dummyStorage)
|
||||
const pastedNoteKey = 'b1e06f81-8266-49b9-b438-084003c2e723'
|
||||
const newNoteKey = 'abc234-8266-49b9-b438-084003c2e723'
|
||||
const pasteText = 'text  ..' +
|
||||
''
|
||||
const storageKey = 'storageKey'
|
||||
const expectedSourceFilePathOne = path.join(dummyStorage.path, systemUnderTest.DESTINATION_FOLDER, pastedNoteKey, 'pdf.pdf')
|
||||
const expectedSourceFilePathTwo = path.join(dummyStorage.path, systemUnderTest.DESTINATION_FOLDER, pastedNoteKey, 'img.jpg')
|
||||
|
||||
sander.exists = jest.fn(() => Promise.resolve(true))
|
||||
systemUnderTest.copyAttachment = jest.fn(() => Promise.resolve('dummyNewFileName'))
|
||||
|
||||
return systemUnderTest.handleAttachmentLinkPaste(storageKey, newNoteKey, pasteText)
|
||||
.then(() => {
|
||||
expect(findStorage.findStorage).toHaveBeenCalledWith(storageKey)
|
||||
expect(sander.exists).toHaveBeenCalledWith(expectedSourceFilePathOne)
|
||||
expect(sander.exists).toHaveBeenCalledWith(expectedSourceFilePathTwo)
|
||||
expect(systemUnderTest.copyAttachment).toHaveBeenCalledWith(expectedSourceFilePathOne, storageKey, newNoteKey)
|
||||
expect(systemUnderTest.copyAttachment).toHaveBeenCalledWith(expectedSourceFilePathTwo, storageKey, newNoteKey)
|
||||
})
|
||||
})
|
||||
|
||||
it('should test that handleAttachmentLinkPaste returns the correct modified paste text', function () {
|
||||
const dummyStorage = {path: 'dummyStoragePath'}
|
||||
findStorage.findStorage = jest.fn(() => dummyStorage)
|
||||
const pastedNoteKey = 'b1e06f81-8266-49b9-b438-084003c2e723'
|
||||
const newNoteKey = 'abc234-8266-49b9-b438-084003c2e723'
|
||||
const dummyNewFileName = 'dummyNewFileName'
|
||||
const pasteText = 'text '
|
||||
const expectedText = 'text '
|
||||
const storageKey = 'storageKey'
|
||||
|
||||
sander.exists = jest.fn(() => Promise.resolve(true))
|
||||
systemUnderTest.copyAttachment = jest.fn(() => Promise.resolve(dummyNewFileName))
|
||||
|
||||
return systemUnderTest.handleAttachmentLinkPaste(storageKey, newNoteKey, pasteText)
|
||||
.then((returnedPastedText) => {
|
||||
expect(returnedPastedText).toBe(expectedText)
|
||||
})
|
||||
})
|
||||
|
||||
it('should test that handleAttachmentLinkPaste returns the correct modified paste text if multiple links are posted', function () {
|
||||
const dummyStorage = {path: 'dummyStoragePath'}
|
||||
findStorage.findStorage = jest.fn(() => dummyStorage)
|
||||
const pastedNoteKey = 'b1e06f81-8266-49b9-b438-084003c2e723'
|
||||
const newNoteKey = 'abc234-8266-49b9-b438-084003c2e723'
|
||||
const dummyNewFileNameOne = 'dummyNewFileName'
|
||||
const dummyNewFileNameTwo = 'dummyNewFileNameTwo'
|
||||
const pasteText = 'text  ' +
|
||||
''
|
||||
const expectedText = 'text  ' +
|
||||
''
|
||||
const storageKey = 'storageKey'
|
||||
|
||||
sander.exists = jest.fn(() => Promise.resolve(true))
|
||||
systemUnderTest.copyAttachment = jest.fn()
|
||||
systemUnderTest.copyAttachment.mockReturnValueOnce(Promise.resolve(dummyNewFileNameOne))
|
||||
systemUnderTest.copyAttachment.mockReturnValue(Promise.resolve(dummyNewFileNameTwo))
|
||||
|
||||
return systemUnderTest.handleAttachmentLinkPaste(storageKey, newNoteKey, pasteText)
|
||||
.then((returnedPastedText) => {
|
||||
expect(returnedPastedText).toBe(expectedText)
|
||||
})
|
||||
})
|
||||
|
||||
it('should test that handleAttachmentLinkPaste calls the copy method correct if multiple links are posted where one file was found and one was not', function () {
|
||||
const dummyStorage = {path: 'dummyStoragePath'}
|
||||
findStorage.findStorage = jest.fn(() => dummyStorage)
|
||||
const pastedNoteKey = 'b1e06f81-8266-49b9-b438-084003c2e723'
|
||||
const newNoteKey = 'abc234-8266-49b9-b438-084003c2e723'
|
||||
const pasteText = 'text  ..' +
|
||||
''
|
||||
const storageKey = 'storageKey'
|
||||
const expectedSourceFilePathOne = path.join(dummyStorage.path, systemUnderTest.DESTINATION_FOLDER, pastedNoteKey, 'pdf.pdf')
|
||||
const expectedSourceFilePathTwo = path.join(dummyStorage.path, systemUnderTest.DESTINATION_FOLDER, pastedNoteKey, 'img.jpg')
|
||||
|
||||
sander.exists = jest.fn()
|
||||
sander.exists.mockReturnValueOnce(Promise.resolve(false))
|
||||
sander.exists.mockReturnValue(Promise.resolve(true))
|
||||
systemUnderTest.copyAttachment = jest.fn(() => Promise.resolve('dummyNewFileName'))
|
||||
systemUnderTest.generateFileNotFoundMarkdown = jest.fn()
|
||||
|
||||
return systemUnderTest.handleAttachmentLinkPaste(storageKey, newNoteKey, pasteText)
|
||||
.then(() => {
|
||||
expect(findStorage.findStorage).toHaveBeenCalledWith(storageKey)
|
||||
expect(sander.exists).toHaveBeenCalledWith(expectedSourceFilePathOne)
|
||||
expect(sander.exists).toHaveBeenCalledWith(expectedSourceFilePathTwo)
|
||||
expect(systemUnderTest.copyAttachment).toHaveBeenCalledTimes(1)
|
||||
expect(systemUnderTest.copyAttachment).toHaveBeenCalledWith(expectedSourceFilePathTwo, storageKey, newNoteKey)
|
||||
})
|
||||
})
|
||||
|
||||
it('should test that handleAttachmentLinkPaste returns the correct modified paste text if the file was not found', function () {
|
||||
const dummyStorage = {path: 'dummyStoragePath'}
|
||||
findStorage.findStorage = jest.fn(() => dummyStorage)
|
||||
const pastedNoteKey = 'b1e06f81-8266-49b9-b438-084003c2e723'
|
||||
const newNoteKey = 'abc234-8266-49b9-b438-084003c2e723'
|
||||
const pasteText = 'text '
|
||||
const storageKey = 'storageKey'
|
||||
const fileNotFoundMD = 'file not found'
|
||||
const expectedPastText = 'text ' + fileNotFoundMD
|
||||
|
||||
systemUnderTest.generateFileNotFoundMarkdown = jest.fn(() => fileNotFoundMD)
|
||||
sander.exists = jest.fn(() => Promise.resolve(false))
|
||||
|
||||
return systemUnderTest.handleAttachmentLinkPaste(storageKey, newNoteKey, pasteText)
|
||||
.then((returnedPastedText) => {
|
||||
expect(returnedPastedText).toBe(expectedPastText)
|
||||
})
|
||||
})
|
||||
|
||||
it('should test that handleAttachmentLinkPaste returns the correct modified paste text if multiple files were not found', function () {
|
||||
const dummyStorage = {path: 'dummyStoragePath'}
|
||||
findStorage.findStorage = jest.fn(() => dummyStorage)
|
||||
const pastedNoteKey = 'b1e06f81-8266-49b9-b438-084003c2e723'
|
||||
const newNoteKey = 'abc234-8266-49b9-b438-084003c2e723'
|
||||
const pasteText = 'text  ' +
|
||||
''
|
||||
const storageKey = 'storageKey'
|
||||
const fileNotFoundMD = 'file not found'
|
||||
const expectedPastText = 'text ' + fileNotFoundMD + ' ' + fileNotFoundMD
|
||||
systemUnderTest.generateFileNotFoundMarkdown = jest.fn(() => fileNotFoundMD)
|
||||
|
||||
sander.exists = jest.fn(() => Promise.resolve(false))
|
||||
|
||||
return systemUnderTest.handleAttachmentLinkPaste(storageKey, newNoteKey, pasteText)
|
||||
.then((returnedPastedText) => {
|
||||
expect(returnedPastedText).toBe(expectedPastText)
|
||||
})
|
||||
})
|
||||
|
||||
it('should test that handleAttachmentLinkPaste returns the correct modified paste text if one file was found and one was not found', function () {
|
||||
const dummyStorage = {path: 'dummyStoragePath'}
|
||||
findStorage.findStorage = jest.fn(() => dummyStorage)
|
||||
const pastedNoteKey = 'b1e06f81-8266-49b9-b438-084003c2e723'
|
||||
const newNoteKey = 'abc234-8266-49b9-b438-084003c2e723'
|
||||
const dummyFoundFileName = 'dummyFileName'
|
||||
const fileNotFoundMD = 'file not found'
|
||||
const pasteText = 'text  .. ' +
|
||||
''
|
||||
const storageKey = 'storageKey'
|
||||
const expectedPastText = 'text ' + fileNotFoundMD + ' .. '
|
||||
|
||||
sander.exists = jest.fn()
|
||||
sander.exists.mockReturnValueOnce(Promise.resolve(false))
|
||||
sander.exists.mockReturnValue(Promise.resolve(true))
|
||||
systemUnderTest.copyAttachment = jest.fn(() => Promise.resolve(dummyFoundFileName))
|
||||
systemUnderTest.generateFileNotFoundMarkdown = jest.fn(() => fileNotFoundMD)
|
||||
|
||||
return systemUnderTest.handleAttachmentLinkPaste(storageKey, newNoteKey, pasteText)
|
||||
.then((returnedPastedText) => {
|
||||
expect(returnedPastedText).toBe(expectedPastText)
|
||||
})
|
||||
})
|
||||
|
||||
it('should test that handleAttachmentLinkPaste returns the correct modified paste text if one file was found and one was not found', function () {
|
||||
const dummyStorage = {path: 'dummyStoragePath'}
|
||||
findStorage.findStorage = jest.fn(() => dummyStorage)
|
||||
const pastedNoteKey = 'b1e06f81-8266-49b9-b438-084003c2e723'
|
||||
const newNoteKey = 'abc234-8266-49b9-b438-084003c2e723'
|
||||
const dummyFoundFileName = 'dummyFileName'
|
||||
const fileNotFoundMD = 'file not found'
|
||||
const pasteText = 'text  .. ' +
|
||||
''
|
||||
const storageKey = 'storageKey'
|
||||
const expectedPastText = 'text  .. ' + fileNotFoundMD
|
||||
|
||||
sander.exists = jest.fn()
|
||||
sander.exists.mockReturnValueOnce(Promise.resolve(true))
|
||||
sander.exists.mockReturnValue(Promise.resolve(false))
|
||||
systemUnderTest.copyAttachment = jest.fn(() => Promise.resolve(dummyFoundFileName))
|
||||
systemUnderTest.generateFileNotFoundMarkdown = jest.fn(() => fileNotFoundMD)
|
||||
|
||||
return systemUnderTest.handleAttachmentLinkPaste(storageKey, newNoteKey, pasteText)
|
||||
.then((returnedPastedText) => {
|
||||
expect(returnedPastedText).toBe(expectedPastText)
|
||||
})
|
||||
})
|
||||
|
||||
35
tests/dataApi/copyFile-test.js
Normal file
35
tests/dataApi/copyFile-test.js
Normal file
@@ -0,0 +1,35 @@
|
||||
const test = require('ava')
|
||||
const copyFile = require('browser/main/lib/dataApi/copyFile')
|
||||
|
||||
const path = require('path')
|
||||
const fs = require('fs')
|
||||
|
||||
const testFile = 'test.txt'
|
||||
const srcFolder = path.join(__dirname, '🤔')
|
||||
const srcPath = path.join(srcFolder, testFile)
|
||||
const dstFolder = path.join(__dirname, '😇')
|
||||
const dstPath = path.join(dstFolder, testFile)
|
||||
|
||||
test.before((t) => {
|
||||
if (!fs.existsSync(srcFolder)) fs.mkdirSync(srcFolder)
|
||||
|
||||
fs.writeFileSync(srcPath, 'test')
|
||||
})
|
||||
|
||||
test('`copyFile` should handle encoded URI on src path', (t) => {
|
||||
return copyFile(encodeURI(srcPath), dstPath)
|
||||
.then(() => {
|
||||
t.true(true)
|
||||
})
|
||||
.catch(() => {
|
||||
t.true(false)
|
||||
})
|
||||
})
|
||||
|
||||
test.after((t) => {
|
||||
fs.unlinkSync(srcPath)
|
||||
fs.unlinkSync(dstPath)
|
||||
fs.rmdirSync(srcFolder)
|
||||
fs.rmdirSync(dstFolder)
|
||||
})
|
||||
|
||||
@@ -25,13 +25,16 @@ test.serial('Create a note', (t) => {
|
||||
const storageKey = t.context.storage.cache.key
|
||||
const folderKey = t.context.storage.json.folders[0].key
|
||||
|
||||
const randLinesHighlightedArray = new Array(10).fill().map(() => Math.round(Math.random() * 10))
|
||||
|
||||
const input1 = {
|
||||
type: 'SNIPPET_NOTE',
|
||||
description: faker.lorem.lines(),
|
||||
snippets: [{
|
||||
name: faker.system.fileName(),
|
||||
mode: 'text',
|
||||
content: faker.lorem.lines()
|
||||
content: faker.lorem.lines(),
|
||||
linesHighlighted: randLinesHighlightedArray
|
||||
}],
|
||||
tags: faker.lorem.words().split(' '),
|
||||
folder: folderKey
|
||||
@@ -42,7 +45,8 @@ test.serial('Create a note', (t) => {
|
||||
type: 'MARKDOWN_NOTE',
|
||||
content: faker.lorem.lines(),
|
||||
tags: faker.lorem.words().split(' '),
|
||||
folder: folderKey
|
||||
folder: folderKey,
|
||||
linesHighlighted: randLinesHighlightedArray
|
||||
}
|
||||
input2.title = input2.content.split('\n').shift()
|
||||
|
||||
@@ -59,6 +63,7 @@ test.serial('Create a note', (t) => {
|
||||
|
||||
t.is(storageKey, data1.storage)
|
||||
const jsonData1 = CSON.readFileSync(path.join(storagePath, 'notes', data1.key + '.cson'))
|
||||
|
||||
t.is(input1.title, data1.title)
|
||||
t.is(input1.title, jsonData1.title)
|
||||
t.is(input1.description, data1.description)
|
||||
@@ -71,6 +76,8 @@ test.serial('Create a note', (t) => {
|
||||
t.is(input1.snippets[0].content, jsonData1.snippets[0].content)
|
||||
t.is(input1.snippets[0].name, data1.snippets[0].name)
|
||||
t.is(input1.snippets[0].name, jsonData1.snippets[0].name)
|
||||
t.deepEqual(input1.snippets[0].linesHighlighted, data1.snippets[0].linesHighlighted)
|
||||
t.deepEqual(input1.snippets[0].linesHighlighted, jsonData1.snippets[0].linesHighlighted)
|
||||
|
||||
t.is(storageKey, data2.storage)
|
||||
const jsonData2 = CSON.readFileSync(path.join(storagePath, 'notes', data2.key + '.cson'))
|
||||
@@ -80,6 +87,8 @@ test.serial('Create a note', (t) => {
|
||||
t.is(input2.content, jsonData2.content)
|
||||
t.is(input2.tags.length, data2.tags.length)
|
||||
t.is(input2.tags.length, jsonData2.tags.length)
|
||||
t.deepEqual(input2.linesHighlighted, data2.linesHighlighted)
|
||||
t.deepEqual(input2.linesHighlighted, jsonData2.linesHighlighted)
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ const TestDummy = require('../fixtures/TestDummy')
|
||||
const sander = require('sander')
|
||||
const os = require('os')
|
||||
const CSON = require('@rokt33r/season')
|
||||
const faker = require('faker')
|
||||
// const faker = require('faker')
|
||||
|
||||
const storagePath = path.join(os.tmpdir(), 'test/create-note-from-url')
|
||||
|
||||
@@ -42,10 +42,10 @@ test.serial('Create a note from URL', (t) => {
|
||||
const jsonData2 = CSON.readFileSync(path.join(storagePath, 'notes', data1.key + '.cson'))
|
||||
|
||||
// <<<<<< fix me - input2 & data not defined
|
||||
t.is(input2.content, data2.content)
|
||||
/* t.is(input2.content, data2.content)
|
||||
t.is(input2.content, jsonData2.content)
|
||||
t.is(input2.tags.length, data2.tags.length)
|
||||
t.is(input2.tags.length, jsonData2.tags.length)
|
||||
t.is(input2.tags.length, jsonData2.tags.length) */
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
35
tests/dataApi/createSnippet-test.js
Normal file
35
tests/dataApi/createSnippet-test.js
Normal file
@@ -0,0 +1,35 @@
|
||||
const test = require('ava')
|
||||
const createSnippet = require('browser/main/lib/dataApi/createSnippet')
|
||||
const sander = require('sander')
|
||||
const os = require('os')
|
||||
const path = require('path')
|
||||
|
||||
const snippetFilePath = path.join(os.tmpdir(), 'test', 'create-snippet')
|
||||
const snippetFile = path.join(snippetFilePath, 'snippets.json')
|
||||
|
||||
test.beforeEach((t) => {
|
||||
sander.writeFileSync(snippetFile, '[]')
|
||||
})
|
||||
|
||||
test.serial('Create a snippet', (t) => {
|
||||
return Promise.resolve()
|
||||
.then(function doTest () {
|
||||
return Promise.all([
|
||||
createSnippet(snippetFile)
|
||||
])
|
||||
})
|
||||
.then(function assert (data) {
|
||||
data = data[0]
|
||||
const snippets = JSON.parse(sander.readFileSync(snippetFile))
|
||||
const snippet = snippets.find(currentSnippet => currentSnippet.id === data.id)
|
||||
t.not(snippet, undefined)
|
||||
t.is(snippet.name, data.name)
|
||||
t.deepEqual(snippet.prefix, data.prefix)
|
||||
t.is(snippet.content, data.content)
|
||||
t.deepEqual(snippet.linesHighlighted, data.linesHighlighted)
|
||||
})
|
||||
})
|
||||
|
||||
test.after.always(() => {
|
||||
sander.rimrafSync(snippetFilePath)
|
||||
})
|
||||
37
tests/dataApi/deleteSnippet-test.js
Normal file
37
tests/dataApi/deleteSnippet-test.js
Normal file
@@ -0,0 +1,37 @@
|
||||
const test = require('ava')
|
||||
const deleteSnippet = require('browser/main/lib/dataApi/deleteSnippet')
|
||||
const sander = require('sander')
|
||||
const os = require('os')
|
||||
const path = require('path')
|
||||
const crypto = require('crypto')
|
||||
|
||||
const snippetFilePath = path.join(os.tmpdir(), 'test', 'delete-snippet')
|
||||
const snippetFile = path.join(snippetFilePath, 'snippets.json')
|
||||
const newSnippet = {
|
||||
id: crypto.randomBytes(16).toString('hex'),
|
||||
name: 'Unnamed snippet',
|
||||
prefix: [],
|
||||
content: ''
|
||||
}
|
||||
|
||||
test.beforeEach((t) => {
|
||||
sander.writeFileSync(snippetFile, JSON.stringify([newSnippet]))
|
||||
})
|
||||
|
||||
test.serial('Delete a snippet', (t) => {
|
||||
return Promise.resolve()
|
||||
.then(function doTest () {
|
||||
return Promise.all([
|
||||
deleteSnippet(newSnippet, snippetFile)
|
||||
])
|
||||
})
|
||||
.then(function assert (data) {
|
||||
data = data[0]
|
||||
const snippets = JSON.parse(sander.readFileSync(snippetFile))
|
||||
t.is(snippets.length, 0)
|
||||
})
|
||||
})
|
||||
|
||||
test.after.always(() => {
|
||||
sander.rimrafSync(snippetFilePath)
|
||||
})
|
||||
52
tests/dataApi/exportStorage-test.js
Normal file
52
tests/dataApi/exportStorage-test.js
Normal file
@@ -0,0 +1,52 @@
|
||||
const test = require('ava')
|
||||
const exportStorage = require('browser/main/lib/dataApi/exportStorage')
|
||||
|
||||
global.document = require('jsdom').jsdom('<body></body>')
|
||||
global.window = document.defaultView
|
||||
global.navigator = window.navigator
|
||||
|
||||
const Storage = require('dom-storage')
|
||||
const localStorage = window.localStorage = global.localStorage = new Storage(null, { strict: true })
|
||||
const path = require('path')
|
||||
const TestDummy = require('../fixtures/TestDummy')
|
||||
const os = require('os')
|
||||
const fs = require('fs')
|
||||
const sander = require('sander')
|
||||
|
||||
test.beforeEach(t => {
|
||||
t.context.storageDir = path.join(os.tmpdir(), 'test/export-storage')
|
||||
t.context.storage = TestDummy.dummyStorage(t.context.storageDir)
|
||||
t.context.exportDir = path.join(os.tmpdir(), 'test/export-storage-output')
|
||||
try { fs.mkdirSync(t.context.exportDir) } catch (e) {}
|
||||
localStorage.setItem('storages', JSON.stringify([t.context.storage.cache]))
|
||||
})
|
||||
|
||||
test.serial('Export a storage', t => {
|
||||
const storageKey = t.context.storage.cache.key
|
||||
const folders = t.context.storage.json.folders
|
||||
const notes = t.context.storage.notes
|
||||
const exportDir = t.context.exportDir
|
||||
const folderKeyToName = folders.reduce(
|
||||
(acc, folder) => {
|
||||
acc[folder.key] = folder.name
|
||||
return acc
|
||||
}, {})
|
||||
return exportStorage(storageKey, 'md', exportDir)
|
||||
.then(() => {
|
||||
notes.forEach(note => {
|
||||
const noteDir = path.join(exportDir, folderKeyToName[note.folder], `${note.title}.md`)
|
||||
if (note.type === 'MARKDOWN_NOTE') {
|
||||
t.true(fs.existsSync(noteDir))
|
||||
t.is(fs.readFileSync(noteDir, 'utf8'), note.content)
|
||||
} else if (note.type === 'SNIPPET_NOTE') {
|
||||
t.false(fs.existsSync(noteDir))
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
test.afterEach.always(t => {
|
||||
localStorage.clear()
|
||||
sander.rimrafSync(t.context.storageDir)
|
||||
sander.rimrafSync(t.context.exportDir)
|
||||
})
|
||||
38
tests/dataApi/toggleStorage-test.js
Normal file
38
tests/dataApi/toggleStorage-test.js
Normal file
@@ -0,0 +1,38 @@
|
||||
const test = require('ava')
|
||||
const toggleStorage = require('browser/main/lib/dataApi/toggleStorage')
|
||||
|
||||
global.document = require('jsdom').jsdom('<body></body>')
|
||||
global.window = document.defaultView
|
||||
global.navigator = window.navigator
|
||||
|
||||
const Storage = require('dom-storage')
|
||||
const localStorage = window.localStorage = global.localStorage = new Storage(null, { strict: true })
|
||||
const path = require('path')
|
||||
const _ = require('lodash')
|
||||
const TestDummy = require('../fixtures/TestDummy')
|
||||
const sander = require('sander')
|
||||
const os = require('os')
|
||||
|
||||
const storagePath = path.join(os.tmpdir(), 'test/toggle-storage')
|
||||
|
||||
test.beforeEach((t) => {
|
||||
t.context.storage = TestDummy.dummyStorage(storagePath)
|
||||
localStorage.setItem('storages', JSON.stringify([t.context.storage.cache]))
|
||||
})
|
||||
|
||||
test.serial('Toggle a storage location', (t) => {
|
||||
const storageKey = t.context.storage.cache.key
|
||||
return Promise.resolve()
|
||||
.then(function doTest () {
|
||||
return toggleStorage(storageKey, true)
|
||||
})
|
||||
.then(function assert (data) {
|
||||
const cachedStorageList = JSON.parse(localStorage.getItem('storages'))
|
||||
t.true(_.find(cachedStorageList, {key: storageKey}).isOpen === true)
|
||||
})
|
||||
})
|
||||
|
||||
test.after(function after () {
|
||||
localStorage.clear()
|
||||
sander.rimrafSync(storagePath)
|
||||
})
|
||||
@@ -26,13 +26,17 @@ test.serial('Update a note', (t) => {
|
||||
const storageKey = t.context.storage.cache.key
|
||||
const folderKey = t.context.storage.json.folders[0].key
|
||||
|
||||
const randLinesHighlightedArray = new Array(10).fill().map(() => Math.round(Math.random() * 10))
|
||||
const randLinesHighlightedArray2 = new Array(15).fill().map(() => Math.round(Math.random() * 15))
|
||||
|
||||
const input1 = {
|
||||
type: 'SNIPPET_NOTE',
|
||||
description: faker.lorem.lines(),
|
||||
snippets: [{
|
||||
name: faker.system.fileName(),
|
||||
mode: 'text',
|
||||
content: faker.lorem.lines()
|
||||
content: faker.lorem.lines(),
|
||||
linesHighlighted: randLinesHighlightedArray
|
||||
}],
|
||||
tags: faker.lorem.words().split(' '),
|
||||
folder: folderKey
|
||||
@@ -43,7 +47,8 @@ test.serial('Update a note', (t) => {
|
||||
type: 'MARKDOWN_NOTE',
|
||||
content: faker.lorem.lines(),
|
||||
tags: faker.lorem.words().split(' '),
|
||||
folder: folderKey
|
||||
folder: folderKey,
|
||||
linesHighlighted: randLinesHighlightedArray
|
||||
}
|
||||
input2.title = input2.content.split('\n').shift()
|
||||
|
||||
@@ -53,7 +58,8 @@ test.serial('Update a note', (t) => {
|
||||
snippets: [{
|
||||
name: faker.system.fileName(),
|
||||
mode: 'text',
|
||||
content: faker.lorem.lines()
|
||||
content: faker.lorem.lines(),
|
||||
linesHighlighted: randLinesHighlightedArray2
|
||||
}],
|
||||
tags: faker.lorem.words().split(' ')
|
||||
}
|
||||
@@ -62,7 +68,8 @@ test.serial('Update a note', (t) => {
|
||||
const input4 = {
|
||||
type: 'MARKDOWN_NOTE',
|
||||
content: faker.lorem.lines(),
|
||||
tags: faker.lorem.words().split(' ')
|
||||
tags: faker.lorem.words().split(' '),
|
||||
linesHighlighted: randLinesHighlightedArray2
|
||||
}
|
||||
input4.title = input4.content.split('\n').shift()
|
||||
|
||||
@@ -99,6 +106,8 @@ test.serial('Update a note', (t) => {
|
||||
t.is(input3.snippets[0].content, jsonData1.snippets[0].content)
|
||||
t.is(input3.snippets[0].name, data1.snippets[0].name)
|
||||
t.is(input3.snippets[0].name, jsonData1.snippets[0].name)
|
||||
t.deepEqual(input3.snippets[0].linesHighlighted, data1.snippets[0].linesHighlighted)
|
||||
t.deepEqual(input3.snippets[0].linesHighlighted, jsonData1.snippets[0].linesHighlighted)
|
||||
|
||||
const jsonData2 = CSON.readFileSync(path.join(storagePath, 'notes', data2.key + '.cson'))
|
||||
t.is(input4.title, data2.title)
|
||||
@@ -107,6 +116,8 @@ test.serial('Update a note', (t) => {
|
||||
t.is(input4.content, jsonData2.content)
|
||||
t.is(input4.tags.length, data2.tags.length)
|
||||
t.is(input4.tags.length, jsonData2.tags.length)
|
||||
t.deepEqual(input4.linesHighlighted, data2.linesHighlighted)
|
||||
t.deepEqual(input4.linesHighlighted, jsonData2.linesHighlighted)
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
47
tests/dataApi/updateSnippet-test.js
Normal file
47
tests/dataApi/updateSnippet-test.js
Normal file
@@ -0,0 +1,47 @@
|
||||
const test = require('ava')
|
||||
const updateSnippet = require('browser/main/lib/dataApi/updateSnippet')
|
||||
const sander = require('sander')
|
||||
const os = require('os')
|
||||
const path = require('path')
|
||||
const crypto = require('crypto')
|
||||
|
||||
const snippetFilePath = path.join(os.tmpdir(), 'test', 'update-snippet')
|
||||
const snippetFile = path.join(snippetFilePath, 'snippets.json')
|
||||
const oldSnippet = {
|
||||
id: crypto.randomBytes(16).toString('hex'),
|
||||
name: 'Initial snippet',
|
||||
prefix: [],
|
||||
content: ''
|
||||
}
|
||||
|
||||
const newSnippet = {
|
||||
id: oldSnippet.id,
|
||||
name: 'new name',
|
||||
prefix: ['prefix'],
|
||||
content: 'new content'
|
||||
}
|
||||
|
||||
test.beforeEach((t) => {
|
||||
sander.writeFileSync(snippetFile, JSON.stringify([oldSnippet]))
|
||||
})
|
||||
|
||||
test.serial('Update a snippet', (t) => {
|
||||
return Promise.resolve()
|
||||
.then(function doTest () {
|
||||
return Promise.all([
|
||||
updateSnippet(newSnippet, snippetFile)
|
||||
])
|
||||
})
|
||||
.then(function assert () {
|
||||
const snippets = JSON.parse(sander.readFileSync(snippetFile))
|
||||
const snippet = snippets.find(currentSnippet => currentSnippet.id === newSnippet.id)
|
||||
t.not(snippet, undefined)
|
||||
t.is(snippet.name, newSnippet.name)
|
||||
t.deepEqual(snippet.prefix, newSnippet.prefix)
|
||||
t.is(snippet.content, newSnippet.content)
|
||||
})
|
||||
})
|
||||
|
||||
test.after.always(() => {
|
||||
sander.rimrafSync(snippetFilePath)
|
||||
})
|
||||
Reference in New Issue
Block a user