102 lines
3.9 KiB
JavaScript
102 lines
3.9 KiB
JavaScript
import Ajv from 'ajv';
|
|
import AjvFormats from 'ajv-formats';
|
|
import CiSchema from '~/editor/schema/ci.json';
|
|
|
|
// JSON POSITIVE TESTS (LEGACY)
|
|
import AllowFailureJson from './json_tests/positive_tests/allow_failure.json';
|
|
import EnvironmentJson from './json_tests/positive_tests/environment.json';
|
|
import GitlabCiDependenciesJson from './json_tests/positive_tests/gitlab-ci-dependencies.json';
|
|
import GitlabCiJson from './json_tests/positive_tests/gitlab-ci.json';
|
|
import InheritJson from './json_tests/positive_tests/inherit.json';
|
|
import MultipleCachesJson from './json_tests/positive_tests/multiple-caches.json';
|
|
import RetryJson from './json_tests/positive_tests/retry.json';
|
|
import TerraformReportJson from './json_tests/positive_tests/terraform_report.json';
|
|
import VariablesMixStringAndUserInputJson from './json_tests/positive_tests/variables_mix_string_and_user_input.json';
|
|
import VariablesJson from './json_tests/positive_tests/variables.json';
|
|
|
|
// JSON NEGATIVE TESTS (LEGACY)
|
|
import DefaultNoAdditionalPropertiesJson from './json_tests/negative_tests/default_no_additional_properties.json';
|
|
import InheritDefaultNoAdditionalPropertiesJson from './json_tests/negative_tests/inherit_default_no_additional_properties.json';
|
|
import JobVariablesMustNotContainObjectsJson from './json_tests/negative_tests/job_variables_must_not_contain_objects.json';
|
|
import ReleaseAssetsLinksEmptyJson from './json_tests/negative_tests/release_assets_links_empty.json';
|
|
import ReleaseAssetsLinksInvalidLinkTypeJson from './json_tests/negative_tests/release_assets_links_invalid_link_type.json';
|
|
import ReleaseAssetsLinksMissingJson from './json_tests/negative_tests/release_assets_links_missing.json';
|
|
import RetryUnknownWhenJson from './json_tests/negative_tests/retry_unknown_when.json';
|
|
|
|
// YAML POSITIVE TEST
|
|
import ArtifactsYaml from './yaml_tests/positive_tests/artifacts.yml';
|
|
import CacheYaml from './yaml_tests/positive_tests/cache.yml';
|
|
import FilterYaml from './yaml_tests/positive_tests/filter.yml';
|
|
import IncludeYaml from './yaml_tests/positive_tests/include.yml';
|
|
import RulesYaml from './yaml_tests/positive_tests/rules.yml';
|
|
import VariablesYaml from './yaml_tests/positive_tests/variables.yml';
|
|
|
|
// YAML NEGATIVE TEST
|
|
import ArtifactsNegativeYaml from './yaml_tests/negative_tests/artifacts.yml';
|
|
import CacheNegativeYaml from './yaml_tests/negative_tests/cache.yml';
|
|
import IncludeNegativeYaml from './yaml_tests/negative_tests/include.yml';
|
|
import RulesNegativeYaml from './yaml_tests/negative_tests/rules.yml';
|
|
import VariablesNegativeYaml from './yaml_tests/negative_tests/variables.yml';
|
|
|
|
const ajv = new Ajv({
|
|
strictTypes: false,
|
|
strictTuples: false,
|
|
allowMatchingProperties: true,
|
|
});
|
|
ajv.addKeyword('markdownDescription');
|
|
|
|
AjvFormats(ajv);
|
|
const schema = ajv.compile(CiSchema);
|
|
|
|
describe('positive tests', () => {
|
|
it.each(
|
|
Object.entries({
|
|
// JSON
|
|
AllowFailureJson,
|
|
EnvironmentJson,
|
|
GitlabCiDependenciesJson,
|
|
GitlabCiJson,
|
|
InheritJson,
|
|
MultipleCachesJson,
|
|
RetryJson,
|
|
TerraformReportJson,
|
|
VariablesMixStringAndUserInputJson,
|
|
VariablesJson,
|
|
|
|
// YAML
|
|
ArtifactsYaml,
|
|
CacheYaml,
|
|
FilterYaml,
|
|
IncludeYaml,
|
|
RulesYaml,
|
|
VariablesYaml,
|
|
}),
|
|
)('schema validates %s', (_, input) => {
|
|
expect(input).toValidateJsonSchema(schema);
|
|
});
|
|
});
|
|
|
|
describe('negative tests', () => {
|
|
it.each(
|
|
Object.entries({
|
|
// JSON
|
|
DefaultNoAdditionalPropertiesJson,
|
|
JobVariablesMustNotContainObjectsJson,
|
|
InheritDefaultNoAdditionalPropertiesJson,
|
|
ReleaseAssetsLinksEmptyJson,
|
|
ReleaseAssetsLinksInvalidLinkTypeJson,
|
|
ReleaseAssetsLinksMissingJson,
|
|
RetryUnknownWhenJson,
|
|
|
|
// YAML
|
|
ArtifactsNegativeYaml,
|
|
CacheNegativeYaml,
|
|
IncludeNegativeYaml,
|
|
RulesNegativeYaml,
|
|
VariablesNegativeYaml,
|
|
}),
|
|
)('schema validates %s', (_, input) => {
|
|
expect(input).not.toValidateJsonSchema(schema);
|
|
});
|
|
});
|