mirror of
https://github.com/Unleash/unleash.git
synced 2025-04-24 01:18:01 +02:00
task: add default environment (#989)
- Adds development and production environments. - Connects default environment to all projects - When creating a project connects the project to all enabled environments
This commit is contained in:
parent
c870b33ba6
commit
e3cebb21c8
@ -91,10 +91,14 @@ export default class EnvironmentStore implements IEnvironmentStore {
|
|||||||
throw new NotFoundError(`Could not find environment with name: ${key}`);
|
throw new NotFoundError(`Could not find environment with name: ${key}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
async getAll(): Promise<IEnvironment[]> {
|
async getAll(query?: Object): Promise<IEnvironment[]> {
|
||||||
const rows = await this.db<IEnvironmentsTable>(TABLE)
|
let qB = this.db<IEnvironmentsTable>(TABLE)
|
||||||
.select('*')
|
.select('*')
|
||||||
.orderBy('sort_order', 'created_at');
|
.orderBy('sort_order', 'created_at');
|
||||||
|
if (query) {
|
||||||
|
qB = qB.where(query);
|
||||||
|
}
|
||||||
|
const rows = await qB;
|
||||||
return rows.map(mapRow);
|
return rows.map(mapRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,7 +30,6 @@ import { IEventStore } from '../types/stores/event-store';
|
|||||||
import FeatureToggleServiceV2 from './feature-toggle-service-v2';
|
import FeatureToggleServiceV2 from './feature-toggle-service-v2';
|
||||||
import { CREATE_FEATURE, UPDATE_FEATURE } from '../types/permissions';
|
import { CREATE_FEATURE, UPDATE_FEATURE } from '../types/permissions';
|
||||||
import NoAccessError from '../error/no-access-error';
|
import NoAccessError from '../error/no-access-error';
|
||||||
import { DEFAULT_ENV } from '../util/constants';
|
|
||||||
|
|
||||||
const getCreatedBy = (user: User) => user.email || user.username;
|
const getCreatedBy = (user: User) => user.email || user.username;
|
||||||
|
|
||||||
@ -123,8 +122,17 @@ export default class ProjectService {
|
|||||||
|
|
||||||
await this.store.create(data);
|
await this.store.create(data);
|
||||||
|
|
||||||
// TODO: we should only connect to enabled environments
|
const enabledEnvironments = await this.environmentStore.getAll({
|
||||||
await this.featureEnvironmentStore.connectProject(DEFAULT_ENV, data.id);
|
enabled: true,
|
||||||
|
});
|
||||||
|
await Promise.all(
|
||||||
|
enabledEnvironments.map(async (e) => {
|
||||||
|
await this.featureEnvironmentStore.connectProject(
|
||||||
|
e.name,
|
||||||
|
data.id,
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
await this.accessService.createDefaultProjectRoles(user, data.id);
|
await this.accessService.createDefaultProjectRoles(user, data.id);
|
||||||
|
|
||||||
|
@ -113,6 +113,7 @@ export interface IEnvironmentCreate {
|
|||||||
name: string;
|
name: string;
|
||||||
type: string;
|
type: string;
|
||||||
sortOrder?: number;
|
sortOrder?: number;
|
||||||
|
enabled?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IEnvironmentOverview {
|
export interface IEnvironmentOverview {
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
exports.up = function (db, cb) {
|
||||||
|
db.runSql(
|
||||||
|
`
|
||||||
|
INSERT INTO environments(name, type, enabled)
|
||||||
|
VALUES ('development', 'development', true),
|
||||||
|
('production', 'production', true);
|
||||||
|
`,
|
||||||
|
cb,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.down = function (db, cb) {
|
||||||
|
db.runSql(
|
||||||
|
`
|
||||||
|
DELETE
|
||||||
|
FROM environments
|
||||||
|
WHERE name IN ('development', 'production');
|
||||||
|
`,
|
||||||
|
cb,
|
||||||
|
);
|
||||||
|
};
|
@ -0,0 +1,22 @@
|
|||||||
|
exports.up = function (db, cb) {
|
||||||
|
db.runSql(
|
||||||
|
`
|
||||||
|
INSERT INTO project_environments(project_id, environment_name)
|
||||||
|
SELECT id, 'default'
|
||||||
|
FROM projects
|
||||||
|
ON CONFLICT DO NOTHING;
|
||||||
|
`,
|
||||||
|
cb,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.down = function (db, cb) {
|
||||||
|
db.runSql(
|
||||||
|
`
|
||||||
|
DELETE
|
||||||
|
FROM project_environments
|
||||||
|
WHERE environment_name = 'default';
|
||||||
|
`,
|
||||||
|
cb,
|
||||||
|
);
|
||||||
|
};
|
@ -31,6 +31,7 @@
|
|||||||
{
|
{
|
||||||
"name": "default",
|
"name": "default",
|
||||||
"type": "production",
|
"type": "production",
|
||||||
|
|
||||||
"sortOrder": 1,
|
"sortOrder": 1,
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"protected": true
|
"protected": true
|
||||||
|
@ -132,7 +132,7 @@ test('should validate name, legal', async () => {
|
|||||||
expect(result).toBe(true);
|
expect(result).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should not be able to create exiting project', async () => {
|
test('should not be able to create existing project', async () => {
|
||||||
const project = {
|
const project = {
|
||||||
id: 'test-delete',
|
id: 'test-delete',
|
||||||
name: 'New project',
|
name: 'New project',
|
||||||
@ -510,3 +510,29 @@ test('should change project when checks pass', async () => {
|
|||||||
|
|
||||||
expect(updatedFeature.project).toBe(projectDestination.id);
|
expect(updatedFeature.project).toBe(projectDestination.id);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('A newly created project only gets connected to enabled environments', async () => {
|
||||||
|
const project = {
|
||||||
|
id: 'environment-test',
|
||||||
|
name: 'New environment project',
|
||||||
|
description: 'Blah',
|
||||||
|
};
|
||||||
|
const enabledEnv = 'connection_test';
|
||||||
|
await db.stores.environmentStore.create({
|
||||||
|
name: enabledEnv,
|
||||||
|
type: 'test',
|
||||||
|
});
|
||||||
|
const disabledEnv = 'do_not_connect';
|
||||||
|
await db.stores.environmentStore.create({
|
||||||
|
name: disabledEnv,
|
||||||
|
type: 'test',
|
||||||
|
enabled: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
await projectService.createProject(project, user);
|
||||||
|
const connectedEnvs =
|
||||||
|
await db.stores.projectStore.getEnvironmentsForProject(project.id);
|
||||||
|
expect(connectedEnvs).toHaveLength(2); // default, connection_test
|
||||||
|
expect(connectedEnvs.some((e) => e === enabledEnv)).toBeTruthy();
|
||||||
|
expect(connectedEnvs.some((e) => e === disabledEnv)).toBeFalsy();
|
||||||
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user