1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-12-28 00:06:53 +01:00

Merge pull request #285 from Unleash/fix_create_archived_toggle

Should not allow creation of archived toggle
This commit is contained in:
Ivar Conradi Østhus 2017-12-18 09:30:45 +01:00 committed by GitHub
commit 8b77b21813
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 32 additions and 7 deletions

View File

@ -7,7 +7,7 @@ env:
- DATABASE_URL=postgres://postgres@localhost:5432/unleash_test TEST_DATABASE_URL=postgres://postgres@localhost:5432/unleash_test
global:
secure: HyWYh1dbUfe2yPF9ZdcdA/IVGyNWmJmpuaRvRGnnpO63/5Y0KT6/hyL6nZ4YJ7Wr/KEt4eMJBJsnzaCFtiqNA3cWyyprzXJButw0o8C6dfd/9jOleisuvdqndu92RqDKIIq2EjHVq3sd6B8uGyiOlkMsyFH57O/V+xHW8MYLnaQ=
before_install: yarn global add greenkeeper-lockfile@1
before_install: npm install -g greenkeeper-lockfile@1
before_script:
- psql -c 'create database unleash_test;' -U postgres
- greenkeeper-lockfile-update

View File

@ -51,6 +51,14 @@ class FeatureToggleStore {
.then(this.rowToFeature);
}
hasFeatureName(name) {
return this.db
.first('name')
.from(TABLE)
.where({ name })
.then(n => !!n);
}
getArchivedFeatures() {
return this.db
.select(FEATURE_COLUMNS)

View File

@ -97,12 +97,13 @@ module.exports.router = function(config) {
function validateUniqueName(req) {
return new Promise((resolve, reject) => {
featureToggleStore
.getFeature(req.body.name)
.then(() =>
reject(new NameExistsError('Feature name already exist'))
)
.catch(() => resolve(req));
featureToggleStore.hasFeatureName(req.body.name).then(hasName => {
if (hasName) {
reject(new NameExistsError('Feature name already exist'));
} else {
resolve(req);
}
});
});
}

View File

@ -193,3 +193,18 @@ test.serial(
.then(destroy);
}
);
test.serial('should not be possible to create archived toggle', async t => {
t.plan(0);
const { request, destroy } = await setupApp('feature_api_serial');
return request
.post('/api/admin/features')
.send({
name: 'featureArchivedX',
enabled: false,
strategies: [{ name: 'default' }],
})
.set('Content-Type', 'application/json')
.expect(403)
.then(destroy);
});

View File

@ -12,6 +12,7 @@ module.exports = () => {
}
},
getFeatures: () => Promise.resolve(_features),
hasFeatureName: () => Promise.resolve(false),
addFeature: feature => _features.push(feature),
};
};