unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
149 lines • 4.78 kB
JavaScript
import dbInit from '../../../test/e2e/helpers/database-init.js';
import getLogger from '../../../test/fixtures/no-logger.js';
import { setupAppWithCustomConfig, } from '../../../test/e2e/helpers/test-helper.js';
import { DEFAULT_ENV } from '../../util/constants.js';
let app;
let db;
beforeAll(async () => {
db = await dbInit('environment_api_serial', getLogger);
app = await setupAppWithCustomConfig(db.stores, {
experimental: {
flags: {
strictSchemaValidation: true,
},
},
}, db.rawDatabase);
});
afterAll(async () => {
await app.destroy();
await db.destroy();
});
test('Can list all existing environments', async () => {
const { body } = await app.request
.get('/api/admin/environments')
.expect(200)
.expect('Content-Type', /json/);
expect(body.version).toBe(1);
expect(body.environments[0]).toStrictEqual({
name: DEFAULT_ENV,
enabled: true,
sortOrder: 2,
type: 'development',
protected: false,
requiredApprovals: null,
projectCount: 1,
apiTokenCount: 0,
enabledToggleCount: 0,
});
expect(body.environments[1]).toStrictEqual({
name: 'production',
enabled: true,
sortOrder: 3,
type: 'production',
protected: false,
requiredApprovals: null,
projectCount: 1,
apiTokenCount: 0,
enabledToggleCount: 0,
});
});
test('Can update sort order', async () => {
const envName = 'update-sort-order';
await db.stores.environmentStore.create({
name: envName,
type: 'production',
});
await app.request
.put('/api/admin/environments/sort-order')
.send({
[DEFAULT_ENV]: 2,
[envName]: 1,
})
.expect(200);
await app.request
.get('/api/admin/environments')
.expect(200)
.expect('Content-Type', /json/)
.expect((res) => {
const updatedSort = res.body.environments.find((t) => t.name === envName);
const defaultEnv = res.body.environments.find((t) => t.name === DEFAULT_ENV);
expect(updatedSort.sortOrder).toBe(1);
expect(defaultEnv.sortOrder).toBe(2);
});
});
test('Sort order will fail on wrong data format', async () => {
const envName = 'sort-order-env';
await app.request
.put('/api/admin/environments/sort-order')
.send({
[DEFAULT_ENV]: 'test',
[envName]: 1,
})
.expect(400);
});
test('Can update environment enabled status', async () => {
const envName = 'enable-environment';
await db.stores.environmentStore.create({
name: envName,
type: 'production',
});
await app.request
.post(`/api/admin/environments/${envName}/on`)
.set('Content-Type', 'application/json')
.expect(204);
});
test('Can update environment disabled status', async () => {
const envName = 'disable-environment';
await db.stores.environmentStore.create({
name: envName,
type: 'production',
});
await app.request
.post(`/api/admin/environments/${envName}/off`)
.set('Content-Type', 'application/json')
.expect(204);
});
test('Can not update non-existing environment enabled status', async () => {
const envName = 'non-existing-env';
await app.request
.post(`/api/admin/environments/${envName}/on`)
.set('Content-Type', 'application/json')
.expect(404);
});
test('Can not update non-existing environment disabled status', async () => {
const envName = 'non-existing-env';
await app.request
.post(`/api/admin/environments/${envName}/off`)
.set('Content-Type', 'application/json')
.expect(404);
});
test('Can get specific environment', async () => {
const envName = 'get-specific';
await db.stores.environmentStore.create({
name: envName,
type: 'production',
});
await app.request
.get(`/api/admin/environments/${envName}`)
.expect(200)
.expect('Content-Type', /json/)
.expect((res) => {
const { body } = res;
expect(body.name).toBe(envName);
expect(body.type).toBe('production');
});
});
test('Getting a non existing environment yields 404', async () => {
await app.request
.get('/api/admin/environments/this-does-not-exist')
.expect(404);
});
test('Can deprecate and undeprecate protected environments', async () => {
await app.request
.post(`/api/admin/environments/${DEFAULT_ENV}/off`)
.expect(204);
await app.request
.post(`/api/admin/environments/${DEFAULT_ENV}/on`)
.expect(204);
});
//# sourceMappingURL=environment.test.js.map