debian-mirror-gitlab/spec/frontend/pipeline_wizard/templates/pages_spec.js
2022-08-13 15:12:31 +05:30

89 lines
2.6 KiB
JavaScript

import { Document, parseDocument } from 'yaml';
import PagesWizardTemplate from '~/pipeline_wizard/templates/pages.yml';
import { merge } from '~/lib/utils/yaml';
const VAR_BUILD_IMAGE = '$BUILD_IMAGE';
const VAR_INSTALLATION_STEPS = '$INSTALLATION_STEPS';
const VAR_BUILD_STEPS = '$BUILD_STEPS';
const getYaml = () => parseDocument(PagesWizardTemplate);
const getFinalTemplate = () => {
const merged = new Document();
const yaml = getYaml();
yaml.toJS().steps.forEach((_, i) => {
merge(merged, yaml.getIn(['steps', i, 'template']));
});
return merged;
};
describe('Pages Template', () => {
it('is valid yaml', () => {
// Testing equality to an empty array (as opposed to just comparing
// errors.length) will cause jest to print the underlying error
expect(getYaml().errors).toEqual([]);
});
it('includes all `target`s in the respective `template`', () => {
const yaml = getYaml();
const actual = yaml.toJS().steps.map((x, i) => ({
inputs: x.inputs,
template: yaml.getIn(['steps', i, 'template']).toString(),
}));
expect(actual).toEqual([
{
inputs: [
expect.objectContaining({
label: 'Select your build image',
target: VAR_BUILD_IMAGE,
}),
expect.objectContaining({
widget: 'checklist',
title: 'Before we begin, please check:',
}),
],
template: expect.stringContaining(VAR_BUILD_IMAGE),
},
{
inputs: [
expect.objectContaining({
label: 'Installation Steps',
target: VAR_INSTALLATION_STEPS,
}),
],
template: expect.stringContaining(VAR_INSTALLATION_STEPS),
},
{
inputs: [
expect.objectContaining({
label: 'Build Steps',
target: VAR_BUILD_STEPS,
}),
],
template: expect.stringContaining(VAR_BUILD_STEPS),
},
]);
});
it('addresses all relevant instructions for a pages pipeline', () => {
const fullTemplate = getFinalTemplate();
expect(fullTemplate.toString()).toEqual(
`# The Docker image that will be used to build your app
image: ${VAR_BUILD_IMAGE}
# Functions that should be executed before the build script is run
before_script: ${VAR_INSTALLATION_STEPS}
pages:
script: ${VAR_BUILD_STEPS}
artifacts:
paths:
# The folder that contains the files to be exposed at the Page URL
- public
rules:
# This ensures that only pushes to the default branch will trigger
# a pages deploy
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
`,
);
});
});