From e47ed8d841682e5e003cf7dabd2f96af04455c2d Mon Sep 17 00:00:00 2001 From: Gareth Bowen Date: Wed, 4 Dec 2019 08:24:28 +1300 Subject: [PATCH] Allow deleting pre-releases medic/cht-core#5129 --- ddocs/builds/validate_doc_update.js | 14 +++++++------- test/int/ddoc.js | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/ddocs/builds/validate_doc_update.js b/ddocs/builds/validate_doc_update.js index 5de6056..834f0e1 100644 --- a/ddocs/builds/validate_doc_update.js +++ b/ddocs/builds/validate_doc_update.js @@ -9,14 +9,14 @@ function(newDoc, oldDoc, userCtx) { throw({ forbidden: 'Document _id format invalid' }); } - if (newDoc._deleted && version.branch) { - // You are allowed to delete branches, don't worry worry about validating anything - return; - } - if (newDoc._deleted) { - // and you're not allowed to delete anything else! - throw({ forbidden: 'You are not allowed to delete releases or pre-releases'}); + if (version.branch || version.pre) { + // You are allowed to delete branches, alphas, and betas. + // Don't worry worry about validating anything. + return; + } + // You're not allowed to delete anything else (eg: final releases) + throw({ forbidden: 'You are not allowed to delete releases' }); } var meta = newDoc.build_info; diff --git a/test/int/ddoc.js b/test/int/ddoc.js index 0304464..a9fd556 100644 --- a/test/int/ddoc.js +++ b/test/int/ddoc.js @@ -221,6 +221,23 @@ describe('Design document', () => { .then(result => BuildsDb.put(withBuildInfo({_id: 'medic:medic:2.0.0-beta.1', value: 2, _rev: result.rev}))) .should.be.rejectedWith('You are not allowed to overwrite existing releases or pre-releases')); + it('Blocks deleting releases', () => + BuildsDb.put(withBuildInfo({ _id: 'medic:medic:2.1.0', value: 1 })) + .then(result => BuildsDb.put(withBuildInfo({ _id: 'medic:medic:2.1.0', _rev: result.rev, _deleted: true }))) + .should.be.rejectedWith('You are not allowed to delete releases')); + + it('Allows deleting pre-preleases', () => + BuildsDb.put(withBuildInfo({_id: 'medic:medic:2.1.0-beta.1', value: 1 })) + .then(result => BuildsDb.put(withBuildInfo({_id: 'medic:medic:2.1.0-beta.1', _rev: result.rev, _deleted: true }))) + .then(() => BuildsDb.get('medic:medic:2.1.0-beta.1')) + .should.be.rejectedWith('deleted')); + + it('Allows deleting branches', () => + BuildsDb.put(withBuildInfo({_id: 'medic:medic:1111-some-branch', value: 1 })) + .then(result => BuildsDb.put(withBuildInfo({_id: 'medic:medic:1111-some-branch', _rev: result.rev, _deleted: true }))) + .then(() => BuildsDb.get('medic:medic:1111-some-branch')) + .should.be.rejectedWith('deleted')); + it('Blocks incorrect document ids', () => BuildsDb.put({_id: 'not-a-valid-version-identifier'}) .should.be.rejectedWith('Document _id format invalid'));