mirror of
https://github.com/BoostIo/Boostnote
synced 2025-12-15 10:46:32 +00:00
Merge pull request #1902 from ehhc/Issue_1900
Deleting a note should also delete the attachments -> fixes #1900
This commit is contained in:
@@ -4,6 +4,7 @@ const path = require('path')
|
|||||||
const findStorage = require('browser/lib/findStorage')
|
const findStorage = require('browser/lib/findStorage')
|
||||||
const mdurl = require('mdurl')
|
const mdurl = require('mdurl')
|
||||||
const escapeStringRegexp = require('escape-string-regexp')
|
const escapeStringRegexp = require('escape-string-regexp')
|
||||||
|
const sander = require('sander')
|
||||||
|
|
||||||
const STORAGE_FOLDER_PLACEHOLDER = ':storage'
|
const STORAGE_FOLDER_PLACEHOLDER = ':storage'
|
||||||
const DESTINATION_FOLDER = 'attachments'
|
const DESTINATION_FOLDER = 'attachments'
|
||||||
@@ -190,6 +191,17 @@ function removeStorageAndNoteReferences (input, noteKey) {
|
|||||||
return input.replace(new RegExp(mdurl.encode(path.sep), 'g'), path.sep).replace(new RegExp(STORAGE_FOLDER_PLACEHOLDER + escapeStringRegexp(path.sep) + noteKey, 'g'), DESTINATION_FOLDER)
|
return input.replace(new RegExp(mdurl.encode(path.sep), 'g'), path.sep).replace(new RegExp(STORAGE_FOLDER_PLACEHOLDER + escapeStringRegexp(path.sep) + noteKey, 'g'), DESTINATION_FOLDER)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description Deletes the attachment folder specified by the given storageKey and noteKey
|
||||||
|
* @param storageKey Key of the storage of the note to be deleted
|
||||||
|
* @param noteKey Key of the note to be deleted
|
||||||
|
*/
|
||||||
|
function deleteAttachmentFolder (storageKey, noteKey) {
|
||||||
|
const storagePath = findStorage.findStorage(storageKey)
|
||||||
|
const noteAttachmentPath = path.join(storagePath.path, DESTINATION_FOLDER, noteKey)
|
||||||
|
sander.rimrafSync(noteAttachmentPath)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description Deletes all attachments stored in the attachment folder of the give not that are not referenced in the markdownContent
|
* @description Deletes all attachments stored in the attachment folder of the give not that are not referenced in the markdownContent
|
||||||
* @param markdownContent Content of the note. All unreferenced notes will be deleted
|
* @param markdownContent Content of the note. All unreferenced notes will be deleted
|
||||||
@@ -242,6 +254,7 @@ module.exports = {
|
|||||||
getAttachmentsInContent,
|
getAttachmentsInContent,
|
||||||
getAbsolutePathsOfAttachmentsInContent,
|
getAbsolutePathsOfAttachmentsInContent,
|
||||||
removeStorageAndNoteReferences,
|
removeStorageAndNoteReferences,
|
||||||
|
deleteAttachmentFolder,
|
||||||
deleteAttachmentsNotPresentInNote,
|
deleteAttachmentsNotPresentInNote,
|
||||||
STORAGE_FOLDER_PLACEHOLDER,
|
STORAGE_FOLDER_PLACEHOLDER,
|
||||||
DESTINATION_FOLDER
|
DESTINATION_FOLDER
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
const resolveStorageData = require('./resolveStorageData')
|
const resolveStorageData = require('./resolveStorageData')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
const sander = require('sander')
|
const sander = require('sander')
|
||||||
|
const attachmentManagement = require('./attachmentManagement')
|
||||||
const { findStorage } = require('browser/lib/findStorage')
|
const { findStorage } = require('browser/lib/findStorage')
|
||||||
|
|
||||||
function deleteNote (storageKey, noteKey) {
|
function deleteNote (storageKey, noteKey) {
|
||||||
@@ -25,6 +26,10 @@ function deleteNote (storageKey, noteKey) {
|
|||||||
storageKey
|
storageKey
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
.then(function deleteAttachments (storageInfo) {
|
||||||
|
attachmentManagement.deleteAttachmentFolder(storageInfo.storageKey, storageInfo.noteKey)
|
||||||
|
return storageInfo
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = deleteNote
|
module.exports = deleteNote
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ const findStorage = require('browser/lib/findStorage')
|
|||||||
jest.mock('unique-slug')
|
jest.mock('unique-slug')
|
||||||
const uniqueSlug = require('unique-slug')
|
const uniqueSlug = require('unique-slug')
|
||||||
const mdurl = require('mdurl')
|
const mdurl = require('mdurl')
|
||||||
|
const sander = require('sander')
|
||||||
|
|
||||||
const systemUnderTest = require('browser/main/lib/dataApi/attachmentManagement')
|
const systemUnderTest = require('browser/main/lib/dataApi/attachmentManagement')
|
||||||
|
|
||||||
@@ -261,6 +262,19 @@ it('should remove the all ":storage" and noteKey references', function () {
|
|||||||
expect(actual).toEqual(expectedOutput)
|
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 () {
|
it('should test that deleteAttachmentsNotPresentInNote deletes all unreferenced attachments ', function () {
|
||||||
const dummyStorage = {path: 'dummyStoragePath'}
|
const dummyStorage = {path: 'dummyStoragePath'}
|
||||||
const noteKey = 'noteKey'
|
const noteKey = 'noteKey'
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ const sander = require('sander')
|
|||||||
const os = require('os')
|
const os = require('os')
|
||||||
const CSON = require('@rokt33r/season')
|
const CSON = require('@rokt33r/season')
|
||||||
const faker = require('faker')
|
const faker = require('faker')
|
||||||
|
const fs = require('fs')
|
||||||
|
const attachmentManagement = require('browser/main/lib/dataApi/attachmentManagement')
|
||||||
|
|
||||||
const storagePath = path.join(os.tmpdir(), 'test/delete-note')
|
const storagePath = path.join(os.tmpdir(), 'test/delete-note')
|
||||||
|
|
||||||
@@ -42,6 +44,11 @@ test.serial('Delete a note', (t) => {
|
|||||||
return Promise.resolve()
|
return Promise.resolve()
|
||||||
.then(function doTest () {
|
.then(function doTest () {
|
||||||
return createNote(storageKey, input1)
|
return createNote(storageKey, input1)
|
||||||
|
.then(function createAttachmentFolder (data) {
|
||||||
|
fs.mkdirSync(path.join(storagePath, attachmentManagement.DESTINATION_FOLDER))
|
||||||
|
fs.mkdirSync(path.join(storagePath, attachmentManagement.DESTINATION_FOLDER, data.key))
|
||||||
|
return data
|
||||||
|
})
|
||||||
.then(function (data) {
|
.then(function (data) {
|
||||||
return deleteNote(storageKey, data.key)
|
return deleteNote(storageKey, data.key)
|
||||||
})
|
})
|
||||||
@@ -52,8 +59,13 @@ test.serial('Delete a note', (t) => {
|
|||||||
t.fail('note cson must be deleted.')
|
t.fail('note cson must be deleted.')
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
t.is(err.code, 'ENOENT')
|
t.is(err.code, 'ENOENT')
|
||||||
|
return data
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
.then(function assertAttachmentFolderDeleted (data) {
|
||||||
|
const attachmentFolderPath = path.join(storagePath, attachmentManagement.DESTINATION_FOLDER, data.noteKey)
|
||||||
|
t.is(fs.existsSync(attachmentFolderPath), false)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
test.after(function after () {
|
test.after(function after () {
|
||||||
|
|||||||
Reference in New Issue
Block a user