mirror of
https://github.com/laurent22/joplin.git
synced 2025-02-01 19:15:01 +02:00
All: Fixes #1694: When deleting resource from sync target also delete associated data blob
This commit is contained in:
parent
85bf89fd97
commit
ec1089870f
@ -5,9 +5,10 @@ const { fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synch
|
|||||||
const markdownUtils = require('lib/markdownUtils.js');
|
const markdownUtils = require('lib/markdownUtils.js');
|
||||||
const Api = require('lib/services/rest/Api');
|
const Api = require('lib/services/rest/Api');
|
||||||
const Folder = require('lib/models/Folder');
|
const Folder = require('lib/models/Folder');
|
||||||
|
const Resource = require('lib/models/Resource');
|
||||||
const Note = require('lib/models/Note');
|
const Note = require('lib/models/Note');
|
||||||
const Tag = require('lib/models/Tag');
|
const Tag = require('lib/models/Tag');
|
||||||
const Resource = require('lib/models/Resource');
|
const { shim } = require('lib/shim');
|
||||||
|
|
||||||
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
|
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
|
||||||
|
|
||||||
@ -252,6 +253,28 @@ describe('services_rest_Api', function() {
|
|||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should delete resources', async (done) => {
|
||||||
|
let response = null;
|
||||||
|
const f = await Folder.save({ title: "mon carnet" });
|
||||||
|
|
||||||
|
response = await api.route('POST', 'notes', null, JSON.stringify({
|
||||||
|
title: 'testing image',
|
||||||
|
parent_id: f.id,
|
||||||
|
image_data_url: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUeNoAyAA3/wFwtO3K6gUB/vz2+Prw9fj/+/r+/wBZKAAExOgF4/MC9ff+MRH6Ui4E+/0Bqc/zutj6AgT+/Pz7+vv7++nu82c4DlMqCvLs8goA/gL8/fz09fb59vXa6vzZ6vjT5fbn6voD/fwC8vX4UiT9Zi//APHyAP8ACgUBAPv5APz7BPj2+DIaC2o3E+3o6ywaC5fT6gD6/QD9/QEVf9kD+/dcLQgJA/7v8vqfwOf18wA1IAIEVycAyt//v9XvAPv7APz8LhoIAPz9Ri4OAgwARgx4W/6fVeEAAAAASUVORK5CYII="
|
||||||
|
}));
|
||||||
|
|
||||||
|
const resource = (await Resource.all())[0];
|
||||||
|
|
||||||
|
const filePath = Resource.fullPath(resource);
|
||||||
|
expect(await shim.fsDriver().exists(filePath)).toBe(true);
|
||||||
|
|
||||||
|
await api.route('DELETE', 'resources/' + resource.id);
|
||||||
|
expect(await shim.fsDriver().exists(filePath)).toBe(false);
|
||||||
|
expect(!(await Resource.load(resource.id))).toBe(true);
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
it('should create notes from HTML', async (done) => {
|
it('should create notes from HTML', async (done) => {
|
||||||
let response = null;
|
let response = null;
|
||||||
const f = await Folder.save({ title: "mon carnet" });
|
const f = await Folder.save({ title: "mon carnet" });
|
||||||
|
@ -947,6 +947,9 @@ describe('Synchronizer', function() {
|
|||||||
await synchronizer().start();
|
await synchronizer().start();
|
||||||
expect((await remoteNotesFoldersResources()).length).toBe(2);
|
expect((await remoteNotesFoldersResources()).length).toBe(2);
|
||||||
|
|
||||||
|
const remoteBlob = await fileApi().stat('.resource/' + resource1.id);
|
||||||
|
expect(!remoteBlob).toBe(true);
|
||||||
|
|
||||||
await switchClient(1);
|
await switchClient(1);
|
||||||
|
|
||||||
expect(await shim.fsDriver().exists(resourcePath1)).toBe(true);
|
expect(await shim.fsDriver().exists(resourcePath1)).toBe(true);
|
||||||
|
@ -223,6 +223,10 @@ class Synchronizer {
|
|||||||
this.dispatch({ type: "SYNC_HAS_DISABLED_SYNC_ITEMS" });
|
this.dispatch({ type: "SYNC_HAS_DISABLED_SYNC_ITEMS" });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const resourceRemotePath = resourceId => {
|
||||||
|
return this.resourceDirName_ + "/" + resourceId;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await this.api().mkdir(this.syncDirName_);
|
await this.api().mkdir(this.syncDirName_);
|
||||||
this.api().setTempDirName(this.syncDirName_);
|
this.api().setTempDirName(this.syncDirName_);
|
||||||
@ -330,7 +334,7 @@ class Synchronizer {
|
|||||||
action = null;
|
action = null;
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
const remoteContentPath = this.resourceDirName_ + "/" + local.id;
|
const remoteContentPath = resourceRemotePath(local.id);
|
||||||
const result = await Resource.fullPathForSyncUpload(local);
|
const result = await Resource.fullPathForSyncUpload(local);
|
||||||
local = result.resource;
|
local = result.resource;
|
||||||
const localResourceContentPath = result.path;
|
const localResourceContentPath = result.path;
|
||||||
@ -461,6 +465,12 @@ class Synchronizer {
|
|||||||
let path = BaseItem.systemPath(item.item_id);
|
let path = BaseItem.systemPath(item.item_id);
|
||||||
this.logSyncOperation("deleteRemote", null, { id: item.item_id }, "local has been deleted");
|
this.logSyncOperation("deleteRemote", null, { id: item.item_id }, "local has been deleted");
|
||||||
await this.api().delete(path);
|
await this.api().delete(path);
|
||||||
|
|
||||||
|
if (item.item_type === BaseModel.TYPE_RESOURCE) {
|
||||||
|
const remoteContentPath = resourceRemotePath(item.item_id);
|
||||||
|
await this.api().delete(remoteContentPath);
|
||||||
|
}
|
||||||
|
|
||||||
await BaseItem.remoteDeletedItem(syncTargetId, item.item_id);
|
await BaseItem.remoteDeletedItem(syncTargetId, item.item_id);
|
||||||
}
|
}
|
||||||
} // DELETE_REMOTE STEP
|
} // DELETE_REMOTE STEP
|
||||||
|
Loading…
x
Reference in New Issue
Block a user