Show More
@@ -32,6 +32,65 b' def route_path(name, **kwargs):' | |||
|
32 | 32 | }[name].format(**kwargs) |
|
33 | 33 | |
|
34 | 34 | |
|
35 | def _post_integration_test_helper(app, url, csrf_token, repo, repo_group, | |
|
36 | admin_view): | |
|
37 | """ | |
|
38 | Posts form data to create integration at the url given then deletes it and | |
|
39 | checks if the redirect url is correct. | |
|
40 | """ | |
|
41 | repo_name = repo.repo_name | |
|
42 | repo_group_name = repo_group.group_name | |
|
43 | app.post(url, params={}, status=403) # missing csrf check | |
|
44 | response = app.post(url, params={'csrf_token': csrf_token}) | |
|
45 | assert response.status_code == 200 | |
|
46 | response.mustcontain('Errors exist') | |
|
47 | ||
|
48 | scopes_destinations = [ | |
|
49 | ('global', | |
|
50 | ADMIN_PREFIX + '/integrations'), | |
|
51 | ('root-repos', | |
|
52 | ADMIN_PREFIX + '/integrations'), | |
|
53 | ('repo:%s' % repo_name, | |
|
54 | '/%s/settings/integrations' % repo_name), | |
|
55 | ('repogroup:%s' % repo_group_name, | |
|
56 | '/%s/_settings/integrations' % repo_group_name), | |
|
57 | ('repogroup-recursive:%s' % repo_group_name, | |
|
58 | '/%s/_settings/integrations' % repo_group_name), | |
|
59 | ] | |
|
60 | ||
|
61 | for scope, destination in scopes_destinations: | |
|
62 | if admin_view: | |
|
63 | destination = ADMIN_PREFIX + '/integrations' | |
|
64 | ||
|
65 | form_data = [ | |
|
66 | ('csrf_token', csrf_token), | |
|
67 | ('__start__', 'options:mapping'), | |
|
68 | ('name', 'test integration'), | |
|
69 | ('scope', scope), | |
|
70 | ('enabled', 'true'), | |
|
71 | ('__end__', 'options:mapping'), | |
|
72 | ('__start__', 'settings:mapping'), | |
|
73 | ('test_int_field', '34'), | |
|
74 | ('test_string_field', ''), # empty value on purpose as it's required | |
|
75 | ('__end__', 'settings:mapping'), | |
|
76 | ] | |
|
77 | errors_response = app.post(url, form_data) | |
|
78 | assert 'Errors exist' in errors_response.body | |
|
79 | ||
|
80 | form_data[-2] = ('test_string_field', 'data!') | |
|
81 | assert Session().query(Integration).count() == 0 | |
|
82 | created_response = app.post(url, form_data) | |
|
83 | assert Session().query(Integration).count() == 1 | |
|
84 | ||
|
85 | delete_response = app.post( | |
|
86 | created_response.location, | |
|
87 | params={'csrf_token': csrf_token, 'delete': 'delete'}) | |
|
88 | ||
|
89 | assert Session().query(Integration).count() == 0 | |
|
90 | assert delete_response.location.endswith(destination) | |
|
91 | ||
|
92 | ||
|
93 | ||
|
35 | 94 | @pytest.mark.usefixtures('app', 'autologin_user') |
|
36 | 95 | class TestIntegrationsView(object): |
|
37 | 96 | pass |
@@ -209,61 +268,3 b' class TestRepoGroupIntegrationsView(Test' | |||
|
209 | 268 | _post_integration_test_helper( |
|
210 | 269 | self.app, url, csrf_token, admin_view=False, |
|
211 | 270 | repo=backend_random.repo, repo_group=test_repo_group) |
|
212 | ||
|
213 | ||
|
214 | def _post_integration_test_helper(app, url, csrf_token, repo, repo_group, | |
|
215 | admin_view): | |
|
216 | """ | |
|
217 | Posts form data to create integration at the url given then deletes it and | |
|
218 | checks if the redirect url is correct. | |
|
219 | """ | |
|
220 | repo_name = repo.repo_name | |
|
221 | repo_group_name = repo_group.group_name | |
|
222 | app.post(url, params={}, status=403) # missing csrf check | |
|
223 | response = app.post(url, params={'csrf_token': csrf_token}) | |
|
224 | assert response.status_code == 200 | |
|
225 | response.mustcontain('Errors exist') | |
|
226 | ||
|
227 | scopes_destinations = [ | |
|
228 | ('global', | |
|
229 | ADMIN_PREFIX + '/integrations'), | |
|
230 | ('root-repos', | |
|
231 | ADMIN_PREFIX + '/integrations'), | |
|
232 | ('repo:%s' % repo_name, | |
|
233 | '/%s/settings/integrations' % repo_name), | |
|
234 | ('repogroup:%s' % repo_group_name, | |
|
235 | '/%s/_settings/integrations' % repo_group_name), | |
|
236 | ('repogroup-recursive:%s' % repo_group_name, | |
|
237 | '/%s/_settings/integrations' % repo_group_name), | |
|
238 | ] | |
|
239 | ||
|
240 | for scope, destination in scopes_destinations: | |
|
241 | if admin_view: | |
|
242 | destination = ADMIN_PREFIX + '/integrations' | |
|
243 | ||
|
244 | form_data = [ | |
|
245 | ('csrf_token', csrf_token), | |
|
246 | ('__start__', 'options:mapping'), | |
|
247 | ('name', 'test integration'), | |
|
248 | ('scope', scope), | |
|
249 | ('enabled', 'true'), | |
|
250 | ('__end__', 'options:mapping'), | |
|
251 | ('__start__', 'settings:mapping'), | |
|
252 | ('test_int_field', '34'), | |
|
253 | ('test_string_field', ''), # empty value on purpose as it's required | |
|
254 | ('__end__', 'settings:mapping'), | |
|
255 | ] | |
|
256 | errors_response = app.post(url, form_data) | |
|
257 | assert 'Errors exist' in errors_response.body | |
|
258 | ||
|
259 | form_data[-2] = ('test_string_field', 'data!') | |
|
260 | assert Session().query(Integration).count() == 0 | |
|
261 | created_response = app.post(url, form_data) | |
|
262 | assert Session().query(Integration).count() == 1 | |
|
263 | ||
|
264 | delete_response = app.post( | |
|
265 | created_response.location, | |
|
266 | params={'csrf_token': csrf_token, 'delete': 'delete'}) | |
|
267 | ||
|
268 | assert Session().query(Integration).count() == 0 | |
|
269 | assert delete_response.location.endswith(destination) |
@@ -218,11 +218,11 b' class WebhookDataHandler(CommitParsingDa' | |||
|
218 | 218 | |
|
219 | 219 | def repo_push_event_handler(self, event, data): |
|
220 | 220 | url = self.get_base_parsed_template(data) |
|
221 | url_cals = [] | |
|
221 | url_calls = [] | |
|
222 | 222 | |
|
223 | 223 | branches_commits = self.aggregate_branch_data( |
|
224 | 224 | data['push']['branches'], data['push']['commits']) |
|
225 | if '${branch}' in url or '${branch_head}' in url: | |
|
225 | if '${branch}' in url or '${branch_head}' in url or '${commit_id}' in url: | |
|
226 | 226 | # call it multiple times, for each branch if used in variables |
|
227 | 227 | for branch, commit_ids in branches_commits.items(): |
|
228 | 228 | branch_url = string.Template(url).safe_substitute(branch=branch) |
@@ -243,7 +243,7 b' class WebhookDataHandler(CommitParsingDa' | |||
|
243 | 243 | log.debug( |
|
244 | 244 | 'register %s call(%s) to url %s', |
|
245 | 245 | self.name, event, commit_url) |
|
246 | url_cals.append( | |
|
246 | url_calls.append( | |
|
247 | 247 | (commit_url, self.headers, data)) |
|
248 | 248 | |
|
249 | 249 | else: |
@@ -251,15 +251,15 b' class WebhookDataHandler(CommitParsingDa' | |||
|
251 | 251 | log.debug( |
|
252 | 252 | 'register %s call(%s) to url %s', |
|
253 | 253 | self.name, event, branch_url) |
|
254 | url_cals.append( | |
|
254 | url_calls.append( | |
|
255 | 255 | (branch_url, self.headers, data)) |
|
256 | 256 | |
|
257 | 257 | else: |
|
258 | 258 | log.debug( |
|
259 | 259 | 'register %s call(%s) to url %s', self.name, event, url) |
|
260 | url_cals.append((url, self.headers, data)) | |
|
260 | url_calls.append((url, self.headers, data)) | |
|
261 | 261 | |
|
262 | return url_cals | |
|
262 | return url_calls | |
|
263 | 263 | |
|
264 | 264 | def repo_create_event_handler(self, event, data): |
|
265 | 265 | url = self.get_base_parsed_template(data) |
@@ -107,6 +107,14 b' def test_webook_parse_url_for_pull_reque' | |||
|
107 | 107 | 'http://server.com/stable/stable-yyy', |
|
108 | 108 | 'http://server.com/dev/dev-xxx', |
|
109 | 109 | 'http://server.com/dev/dev-yyy']), |
|
110 | ('http://server.com/${branch_head}', | |
|
111 | ['http://server.com/stable-yyy', | |
|
112 | 'http://server.com/dev-yyy']), | |
|
113 | ('http://server.com/${commit_id}', | |
|
114 | ['http://server.com/stable-xxx', | |
|
115 | 'http://server.com/stable-yyy', | |
|
116 | 'http://server.com/dev-xxx', | |
|
117 | 'http://server.com/dev-yyy']), | |
|
110 | 118 | ]) |
|
111 | 119 | def test_webook_parse_url_for_push_event( |
|
112 | 120 | baseapp, repo_push_event, base_data, template, expected_urls): |
General Comments 0
You need to be logged in to leave comments.
Login now