mirror of
https://github.com/Unleash/unleash.git
synced 2025-02-09 00:18:00 +01:00
parent
e14d7fc5f0
commit
1c1b1edd83
@ -32,6 +32,8 @@ class FeatureController extends Controller {
|
|||||||
this.delete('/:featureName', this.deleteToggle, DELETE_FEATURE);
|
this.delete('/:featureName', this.deleteToggle, DELETE_FEATURE);
|
||||||
this.post('/validate', this.validate);
|
this.post('/validate', this.validate);
|
||||||
this.post('/:featureName/toggle', this.toggle, UPDATE_FEATURE);
|
this.post('/:featureName/toggle', this.toggle, UPDATE_FEATURE);
|
||||||
|
this.post('/:featureName/toggle/on', this.toggleOn, UPDATE_FEATURE);
|
||||||
|
this.post('/:featureName/toggle/off', this.toggleOff, UPDATE_FEATURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
async getAllToggles(req, res) {
|
async getAllToggles(req, res) {
|
||||||
@ -117,7 +119,27 @@ class FeatureController extends Controller {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Kept to keep backward compatability
|
||||||
async toggle(req, res) {
|
async toggle(req, res) {
|
||||||
|
try {
|
||||||
|
const name = req.params.featureName;
|
||||||
|
const feature = await this.featureToggleStore.getFeature(name);
|
||||||
|
const enabled = !feature.enabled;
|
||||||
|
this._toggle(enabled, req, res);
|
||||||
|
} catch (error) {
|
||||||
|
handleErrors(res, error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async toggleOn(req, res) {
|
||||||
|
this._toggle(true, req, res);
|
||||||
|
}
|
||||||
|
|
||||||
|
async toggleOff(req, res) {
|
||||||
|
this._toggle(false, req, res);
|
||||||
|
}
|
||||||
|
|
||||||
|
async _toggle(enabled, req, res) {
|
||||||
const featureName = req.params.featureName;
|
const featureName = req.params.featureName;
|
||||||
const userName = extractUser(req);
|
const userName = extractUser(req);
|
||||||
|
|
||||||
@ -126,13 +148,13 @@ class FeatureController extends Controller {
|
|||||||
featureName
|
featureName
|
||||||
);
|
);
|
||||||
|
|
||||||
feature.enabled = !feature.enabled;
|
feature.enabled = enabled;
|
||||||
await this.eventStore.store({
|
await this.eventStore.store({
|
||||||
type: FEATURE_UPDATED,
|
type: FEATURE_UPDATED,
|
||||||
createdBy: userName,
|
createdBy: userName,
|
||||||
data: feature,
|
data: feature,
|
||||||
});
|
});
|
||||||
res.status(200).end();
|
res.json(feature).end();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
handleErrors(res, error);
|
handleErrors(res, error);
|
||||||
}
|
}
|
||||||
|
@ -296,3 +296,63 @@ test('should not allow variants with same name when updating feature flag', t =>
|
|||||||
.set('Content-Type', 'application/json')
|
.set('Content-Type', 'application/json')
|
||||||
.expect(400);
|
.expect(400);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('should toggle on', t => {
|
||||||
|
t.plan(1);
|
||||||
|
const { request, featureToggleStore, base, perms } = getSetup();
|
||||||
|
perms.withPermissions(UPDATE_FEATURE);
|
||||||
|
|
||||||
|
featureToggleStore.addFeature({
|
||||||
|
name: 'toggle.disabled',
|
||||||
|
enabled: false,
|
||||||
|
strategies: [{ name: 'default' }],
|
||||||
|
});
|
||||||
|
|
||||||
|
return request
|
||||||
|
.post(`${base}/api/admin/features/toggle.disabled/toggle/on`)
|
||||||
|
.expect('Content-Type', /json/)
|
||||||
|
.expect(200)
|
||||||
|
.expect(res => {
|
||||||
|
t.true(res.body.enabled === true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should toggle off', t => {
|
||||||
|
t.plan(1);
|
||||||
|
const { request, featureToggleStore, base, perms } = getSetup();
|
||||||
|
perms.withPermissions(UPDATE_FEATURE);
|
||||||
|
|
||||||
|
featureToggleStore.addFeature({
|
||||||
|
name: 'toggle.enabled',
|
||||||
|
enabled: true,
|
||||||
|
strategies: [{ name: 'default' }],
|
||||||
|
});
|
||||||
|
|
||||||
|
return request
|
||||||
|
.post(`${base}/api/admin/features/toggle.enabled/toggle/off`)
|
||||||
|
.expect('Content-Type', /json/)
|
||||||
|
.expect(200)
|
||||||
|
.expect(res => {
|
||||||
|
t.true(res.body.enabled === false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should toggle', t => {
|
||||||
|
t.plan(1);
|
||||||
|
const { request, featureToggleStore, base, perms } = getSetup();
|
||||||
|
perms.withPermissions(UPDATE_FEATURE);
|
||||||
|
|
||||||
|
featureToggleStore.addFeature({
|
||||||
|
name: 'toggle.disabled',
|
||||||
|
enabled: false,
|
||||||
|
strategies: [{ name: 'default' }],
|
||||||
|
});
|
||||||
|
|
||||||
|
return request
|
||||||
|
.post(`${base}/api/admin/features/toggle.disabled/toggle`)
|
||||||
|
.expect('Content-Type', /json/)
|
||||||
|
.expect(200)
|
||||||
|
.expect(res => {
|
||||||
|
t.true(res.body.enabled === true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user