🐛 fix issue with re-uploading a deleted theme (#725)

closes https://github.com/TryGhost/Ghost/issues/8515

- ensure the theme record is removed from the store when deleting because theme IDs get re-used unlike other models
This commit is contained in:
Kevin Ansfield 2017-06-01 14:44:04 +01:00 committed by Katharina Irrgang
parent f1f1580084
commit 1d4cc70246
2 changed files with 32 additions and 1 deletions

View File

@ -73,7 +73,12 @@ export default Controller.extend({
return; return;
} }
return theme.destroyRecord().catch((error) => { return theme.destroyRecord().then(() => {
// HACK: this is a private method, we need to unload from the store
// here so that uploading another theme with the same "id" doesn't
// attempt to update the deleted record
theme.unloadRecord();
}).catch((error) => {
this.get('notifications').showAPIError(error); this.get('notifications').showAPIError(error);
}); });
}, },

View File

@ -651,5 +651,31 @@ describe('Acceptance: Settings - Design', function () {
// restore default mirage handlers // restore default mirage handlers
mockThemes(server); mockThemes(server);
}); });
it('can delete then re-upload the same theme', async function () {
server.loadFixtures('themes');
// mock theme upload to emulate uploading theme with same id
server.post('/themes/upload/', function ({themes}) {
let theme = themes.create({
name: 'foo',
package: {
name: 'Foo',
version: '0.1'
}
});
return {themes: [theme]};
});
await visit('/settings/design');
await click(`${testSelector('theme-id', 'foo')} ${testSelector('theme-delete-button')}`);
await click(`.fullscreen-modal ${testSelector('delete-button')}`);
await click(testSelector('upload-theme-button'));
await fileUpload('.fullscreen-modal input[type="file"]', ['test'], {name: 'foo.zip', type: 'application/zip'});
// this will fail if upload failed because there won't be an activate now button
await click(`.fullscreen-modal ${testSelector('activate-now-button')}`);
});
}); });
}); });