UNPKG

singularci

Version:

SingularCI is a DSL transpiler used to generate CI/CD configuration files for existing CI platforms

117 lines (92 loc) 3.98 kB
import 'reflect-metadata'; import { Container } from "typedi"; import DSLParser from '../../src/Parser/DSLParser'; import IPipeline from '../../src/SemanticModel/interfaces/IPipeline'; import { GitHubConfigGenerator } from '../../src/Targets/GitHubModule'; import { GitLabConfigGenerator } from '../../src/Targets/GitLabModule'; import Pipeline from '../../src/SemanticModel/Pipeline'; import { BuildDockerImageFactory } from '../../src/SemanticModel/Tasks/BuildDockerImage'; import { TriggerFactory } from '../../src/SemanticModel/Trigger'; import VariablesFactory from '../../src/SemanticModel/Variables'; import { TargetsFactory } from '../../src/SemanticModel/Targets'; import StageFactory from '../../src/SemanticModel/Stage'; import RunFactory from '../../src/SemanticModel/Tasks/Run'; import Job from '../../src/SemanticModel/Job'; import fs from 'fs'; import path from 'path'; let parser: DSLParser; let expectedPipeline: IPipeline; beforeAll(() => { Container.import([ GitHubConfigGenerator, GitLabConfigGenerator, Pipeline, BuildDockerImageFactory, TriggerFactory ]); setupExpectedPipeline(); }) const setupExpectedPipeline = () => { const triggerFactory = new TriggerFactory(); const variablesFactory = new VariablesFactory(); const platformTargets = new TargetsFactory(); const stageFactory = new StageFactory(); const runFactory = new RunFactory(); const trigger = triggerFactory.createTrigger(); const variables = variablesFactory.createVariables(); const targets = platformTargets.createTargets(); targets.addTarget('GitHub') targets.addTarget('GitLab') trigger.addBranch('master'); trigger.addBranch('main'); trigger.addType('push'); variables.addVariable('testKey', 'testValue'); expectedPipeline = new Pipeline(trigger, targets, variables); const environment = "ubuntu-latest"; const task1_stage1 = runFactory.createRunTask(['apt-get update -y','apt-get install -y nodejs', 'npm install','npm run lint']); const job1_stage1 = new Job('Lint', [task1_stage1]); const stage1 = stageFactory.createStage("lintstage", [job1_stage1], [], environment); const task1_stage2 = runFactory.createRunTask(['echo build done']) const job1_stage2 = new Job("build",[task1_stage2]) const needs = "lintstage"; const stage2 = stageFactory.createStage("buildstage", [job1_stage2], [needs], environment) expectedPipeline.addStage(stage1); expectedPipeline.addStage(stage2); } test('Comparing Pipeline to expected Pipeline', () => { Container.set('dslparser.inputFileName', './test/Parser/testfile.yml'); parser = Container.get<DSLParser>('dslparser'); const resultPipeline = parser.parse(); expect(resultPipeline).toEqual(expectedPipeline); }); test('Attempting to parse an input file without the triggers key throws an error', () => { Container.set('dslparser.inputFileName', './test/Parser/testfile_missing_triggers.yml'); parser = Container.get<DSLParser>('dslparser'); expect(() => { parser.parse(); }).toThrow(); }); test('Attempting to parse an input file without the targets key throws an error', () => { Container.set('dslparser.inputFileName', './test/Parser/testfile_missing_targets.yml'); parser = Container.get<DSLParser>('dslparser'); expect(() => { parser.parse(); }).toThrow(); }); test('Attempting to parse an input file without the pipeline key throws an error', () => { Container.set('dslparser.inputFileName', './test/Parser/testfile_missing_pipeline.yml'); parser = Container.get<DSLParser>('dslparser'); expect(() => { parser.parse(); }).toThrow(); }); afterEach(() => { Container.reset(); }); afterAll(() => { setTimeout(() => { if (fs.existsSync(path.join(process.cwd(), ".singularci-copy.yml"))) { fs.rmSync(path.join(process.cwd(), ".singularci-copy.yml")); } }, 100); })