Add tests for 'update' command

Cover views and --jobs-only and --views-only options.

Change-Id: Ib325a09180162d46e2556e05eb6f982daea1dd21
This commit is contained in:
Vsevolod Fedorov 2024-03-22 11:12:23 +03:00
parent e9a7e4ef32
commit d95a677d85
3 changed files with 134 additions and 0 deletions

View File

@ -0,0 +1,17 @@
# Input file for test_update with both jobs and views.
- job-template:
name: job-{num}
description: Job Number {num}
- view-template:
name: view-{num}
description: View Number {num}
- project:
name: sample-project
num: [1, 2, 3]
jobs:
- job-{num}
views:
- view-{num}

View File

@ -0,0 +1,11 @@
# Input file for test_update with only views.
- view-template:
name: view-{num}
description: View Number {num}
- project:
name: sample-project
num: [1, 2, 3]
views:
- view-{num}

View File

@ -138,6 +138,112 @@ def test_update_jobs_and_delete_old(
assert jenkins_delete_job.call_count == len(calls)
def test_update_views(mocker, fixtures_dir, default_config_file, execute_jenkins_jobs):
"""
Test update_job is called for project with views
"""
mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.view_exists")
mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.get_views")
reconfig_view = mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.reconfig_view")
path = fixtures_dir / "update-views.yaml"
args = ["--conf", default_config_file, "update", str(path)]
execute_jenkins_jobs(args)
reconfig_view.assert_has_calls(
[
mock.call(view_name, mock.ANY)
for view_name in ["view-1", "view-2", "view-3"]
],
any_order=True,
)
assert reconfig_view.call_count == 3
def test_update_jobs_and_views(
mocker, fixtures_dir, default_config_file, execute_jenkins_jobs
):
"""
Test update_job is called for project with both jobs and views
"""
mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.job_exists")
mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.get_all_jobs")
reconfig_job = mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.reconfig_job")
mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.view_exists")
mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.get_views")
reconfig_view = mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.reconfig_view")
path = fixtures_dir / "update-both.yaml"
args = ["--conf", default_config_file, "update", str(path)]
execute_jenkins_jobs(args)
reconfig_job.assert_has_calls(
[mock.call(job_name, mock.ANY) for job_name in ["job-1", "job-2", "job-3"]],
any_order=True,
)
assert reconfig_job.call_count == 3
reconfig_view.assert_has_calls(
[
mock.call(view_name, mock.ANY)
for view_name in ["view-1", "view-2", "view-3"]
],
any_order=True,
)
assert reconfig_view.call_count == 3
def test_update_jobs_only(
mocker, fixtures_dir, default_config_file, execute_jenkins_jobs
):
"""
Test update_job is called for project with both jobs and views
but only jobs update is requested
"""
mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.job_exists")
mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.get_all_jobs")
reconfig_job = mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.reconfig_job")
mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.view_exists")
mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.get_views")
reconfig_view = mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.reconfig_view")
path = fixtures_dir / "update-both.yaml"
args = ["--conf", default_config_file, "update", "--jobs-only", str(path)]
execute_jenkins_jobs(args)
assert reconfig_job.call_count == 3
assert reconfig_view.call_count == 0
def test_update_views_only(
mocker, fixtures_dir, default_config_file, execute_jenkins_jobs
):
"""
Test update_job is called for project with both jobs and views
but only views update is requested
"""
mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.job_exists")
mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.get_all_jobs")
reconfig_job = mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.reconfig_job")
mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.view_exists")
mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.get_views")
reconfig_view = mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.reconfig_view")
path = fixtures_dir / "update-both.yaml"
args = ["--conf", default_config_file, "update", "--views-only", str(path)]
execute_jenkins_jobs(args)
assert reconfig_job.call_count == 0
assert reconfig_view.call_count == 3
@pytest.mark.skip(reason="TODO: Develop actual update timeout test approach.")
def test_update_timeout_not_set():
"""Validate update timeout behavior when timeout not explicitly configured."""