File: test_views.py

package info (click to toggle)
python-jenkinsapi 0.3.17-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,500 kB
  • sloc: python: 10,001; xml: 50; makefile: 31; sh: 26
file content (190 lines) | stat: -rw-r--r-- 5,757 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
"""
System tests for `jenkinsapi.jenkins` module.
"""

import logging
from jenkinsapi.view import View
from jenkinsapi.views import Views
from jenkinsapi.job import Job
from jenkinsapi.api import get_view_from_url
from jenkinsapi_tests.systests.job_configs import EMPTY_JOB
from jenkinsapi_tests.systests.view_configs import VIEW_WITH_FILTER_AND_REGEX
from jenkinsapi_tests.test_utils.random_strings import random_string

log = logging.getLogger(__name__)


def create_job(jenkins, job_name="whatever"):
    job = jenkins.create_job(job_name, EMPTY_JOB)
    return job


def test_make_views(jenkins):
    view_name = random_string()
    assert view_name not in jenkins.views
    new_view = jenkins.views.create(view_name)
    assert view_name in jenkins.views
    assert isinstance(new_view, View) is True
    assert view_name == str(new_view)

    # Can we create a view that already exists?
    existing = jenkins.views.create(view_name)
    assert existing == new_view

    # Can we use the API convenience methods
    new_view_1 = get_view_from_url(new_view.baseurl)
    assert new_view == new_view_1

    del jenkins.views[view_name]


def test_add_job_to_view(jenkins):
    job_name = random_string()
    create_job(jenkins, job_name)

    view_name = random_string()
    assert view_name not in jenkins.views
    new_view = jenkins.views.create(view_name)
    assert view_name in jenkins.views
    assert isinstance(new_view, View) is True

    assert job_name not in new_view
    assert new_view.add_job(job_name) is True
    assert job_name in new_view
    assert isinstance(new_view[job_name], Job) is True

    assert len(new_view) == 1
    for j_name, j in new_view.iteritems():
        assert j_name == job_name
        assert isinstance(j, Job) is True

    for j in new_view.values():
        assert isinstance(j, Job) is True

    jobs = new_view.items()
    assert isinstance(jobs, list) is True
    assert isinstance(jobs[0], tuple) is True

    assert new_view.add_job(job_name) is False
    assert new_view.add_job("unknown") is False

    del jenkins.views[view_name]


def test_create_and_delete_views(jenkins):
    view1_name = random_string()
    new_view = jenkins.views.create(view1_name)
    assert isinstance(new_view, View) is True
    assert view1_name in jenkins.views
    del jenkins.views[view1_name]
    assert view1_name not in jenkins.views


def test_create_and_delete_views_by_url(jenkins):
    view1_name = random_string()
    new_view = jenkins.views.create(view1_name)
    assert isinstance(new_view, View) is True
    assert view1_name in jenkins.views

    view_url = new_view.baseurl
    view_by_url = jenkins.get_view_by_url(view_url)
    assert isinstance(view_by_url, View) is True
    jenkins.delete_view_by_url(view_url)

    assert view1_name not in jenkins.views


def test_delete_view_which_does_not_exist(jenkins):
    view1_name = random_string()
    assert view1_name not in jenkins.views
    del jenkins.views[view1_name]


def test_update_view_config(jenkins):
    view_name = random_string()
    new_view = jenkins.views.create(view_name)
    assert isinstance(new_view, View) is True
    assert view_name in jenkins.views

    config = jenkins.views[view_name].get_config().strip()
    new_view_config = VIEW_WITH_FILTER_AND_REGEX % view_name
    assert config != new_view_config

    jenkins.views[view_name].update_config(new_view_config)
    config = jenkins.views[view_name].get_config().strip()
    assert config == new_view_config


def test_make_nested_views(jenkins):
    job = create_job(jenkins)
    top_view_name = random_string()
    sub1_view_name = random_string()
    sub2_view_name = random_string()

    assert top_view_name not in jenkins.views
    tv = jenkins.views.create(top_view_name, Views.NESTED_VIEW)
    assert top_view_name in jenkins.views
    assert isinstance(tv, View) is True

    # Empty sub view
    sv1 = tv.views.create(sub1_view_name)
    assert sub1_view_name in tv.views
    assert isinstance(sv1, View) is True

    # Sub view with job in it
    tv.views[sub2_view_name] = job.name
    assert sub2_view_name in tv.views
    sv2 = tv.views[sub2_view_name]
    assert isinstance(sv2, View) is True
    assert job.name in sv2

    # Can we use the API convenience methods
    new_view = get_view_from_url(sv2.baseurl)
    assert new_view == sv2


def test_add_to_view_after_copy(jenkins):
    # This test is for issue #291
    job = create_job(jenkins)
    new_job_name = random_string()
    view_name = random_string()
    new_view = jenkins.views.create(view_name)
    new_view = jenkins.views[view_name]
    new_job = jenkins.copy_job(job.name, new_job_name)
    assert new_view.add_job(new_job.name) is True
    assert new_job.name in new_view


def test_get_job_config(jenkins):
    # This test is for issue #301
    job = create_job(jenkins)
    view_name = random_string()
    new_view = jenkins.views.create(view_name)

    assert new_view.add_job(job.name) is True

    assert "<?xml" in jenkins.get_job(job.name).get_config()
    for _, job in jenkins.views[view_name].items():
        assert "<?xml" in job.get_config()


def test_remove_job_from_view(jenkins):
    job_name = random_string()
    create_job(jenkins, job_name)

    view_name = random_string()
    assert view_name not in jenkins.views
    new_view = jenkins.views.create(view_name)
    assert view_name in jenkins.views
    assert isinstance(new_view, View)

    assert job_name not in new_view
    assert new_view.add_job(job_name)
    assert job_name in new_view
    assert isinstance(new_view[job_name], Job) is True

    assert new_view.remove_job(job_name)
    assert job_name not in new_view
    assert new_view.remove_job(job_name) is False

    del jenkins.views[view_name]