jenkins-job-builder/tests/xml_config/test_xml_config.py

114 lines
3.4 KiB
Python

# Copyright 2016 Hewlett Packard Enterprise
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from pathlib import Path
import pytest
from jenkins_jobs.config import JJBConfig
from jenkins_jobs.errors import JenkinsJobsException
from jenkins_jobs.xml_config import XmlJobGenerator, XmlViewGenerator
from jenkins_jobs.roots import Roots
from jenkins_jobs.loader import load_files
fixtures_dir = Path(__file__).parent / "exceptions"
# Override jjb_config and plugins_info so that scenarios won't be used.
@pytest.fixture
def jjb_config():
config = JJBConfig()
config.validate()
return config
@pytest.fixture
def plugins_info():
return None
@pytest.fixture
def parser(jjb_config, registry):
def parse(fname):
roots = Roots(jjb_config)
load_files(jjb_config, roots, [fixtures_dir / fname])
registry.set_macros(roots.macros)
return roots
return parse
def test_invalid_project(parser, registry):
roots = parser("invalid_project.yaml")
jobs = roots.generate_jobs()
generator = XmlJobGenerator(registry)
with pytest.raises(JenkinsJobsException) as excinfo:
generator.generateXML(jobs)
assert "Unrecognized project-type:" in str(excinfo.value)
def test_invalid_view(parser, registry):
roots = parser("invalid_view.yaml")
views = roots.generate_views()
generator = XmlViewGenerator(registry)
with pytest.raises(JenkinsJobsException) as excinfo:
generator.generateXML(views)
assert "Unrecognized view-type:" in str(excinfo.value)
def test_template_params(parser, registry):
roots = parser("failure_formatting_component.yaml")
jobs = roots.generate_jobs()
generator = XmlJobGenerator(registry)
with pytest.raises(Exception) as excinfo:
generator.generateXML(jobs)
message = (
"While expanding macro 'default-git-scm':"
" While formatting string '{branches}': Missing parameter: 'branches'"
)
assert str(excinfo.value) == message
def test_missing_j2_param(parser, registry):
roots = parser("missing_j2_parameter.yaml")
jobs = roots.generate_jobs()
generator = XmlJobGenerator(registry)
with pytest.raises(Exception) as excinfo:
generator.generateXML(jobs)
message = (
"While expanding macro 'default-git-scm':"
" While formatting jinja2 template '{{ branches }}': 'branches' is undefined"
)
assert str(excinfo.value) == message
def test_missing_include_j2_param(parser, registry):
roots = parser("missing_include_j2_parameter.yaml")
jobs = roots.generate_jobs()
generator = XmlJobGenerator(registry)
with pytest.raises(Exception) as excinfo:
generator.generateXML(jobs)
message = (
"While expanding macro 'a-builder':"
" While formatting jinja2 template 'echo \"Parameter branch={{ branches }} is...':"
" 'branches' is undefined"
)
assert str(excinfo.value) == message