All files / src/lib/routes/admin-api/project environments.ts

100% Statements 17/17
100% Branches 0/0
100% Functions 3/3
100% Lines 17/17

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74  59x         59x 59x   59x                     59x                 141x   141x 141x 141x 141x                               31x   31x   30x       30x             3x 3x       2x      
import { Request, Response } from 'express';
import Controller from '../../controller';
import { IUnleashConfig } from '../../../types/option';
import { IUnleashServices } from '../../../types/services';
import { Logger } from '../../../logger';
import EnvironmentService from '../../../services/environment-service';
import { UPDATE_PROJECT } from '../../../types/permissions';
import { addEnvironment } from '../../../schema/project-schema';
 
const PREFIX = '/:projectId/environments';
 
interface IProjectEnvironmentParams {
    projectId: string;
    environment: string;
}
 
interface EnvironmentBody {
    environment: string;
}
 
export default class EnvironmentsController extends Controller {
    private logger: Logger;
 
    private environmentService: EnvironmentService;
 
    constructor(
        config: IUnleashConfig,
        { environmentService }: Pick<IUnleashServices, 'environmentService'>,
    ) {
        super(config);
 
        this.logger = config.getLogger('admin-api/project/environments.ts');
        this.environmentService = environmentService;
        this.post(PREFIX, this.addEnvironmentToProject, UPDATE_PROJECT);
        this.delete(
            `${PREFIX}/:environment`,
            this.removeEnvironmentFromProject,
            UPDATE_PROJECT,
        );
    }
 
    async addEnvironmentToProject(
        req: Request<
            Omit<IProjectEnvironmentParams, 'environment'>,
            any,
            EnvironmentBody,
            any
        >,
        res: Response,
    ): Promise<void> {
        const { projectId } = req.params;
 
        const { environment } = await addEnvironment.validateAsync(req.body);
 
        await this.environmentService.addEnvironmentToProject(
            environment,
            projectId,
        );
        res.status(200).end();
    }
 
    async removeEnvironmentFromProject(
        req: Request<IProjectEnvironmentParams, any, any, any>,
        res: Response,
    ): Promise<void> {
        const { projectId, environment } = req.params;
        await this.environmentService.removeEnvironmentFromProject(
            environment,
            projectId,
        );
        res.status(200).end();
    }
}