def test_post_with_repositories(self): """Testing the POST <url> API with custom repositories""" repositories = [ self.create_repository(name='Repo 1'), self.create_repository(name='Repo 2'), ] self.user.is_superuser = True self.user.save() rsp = self.api_post(get_webhook_list_url(), { 'enabled': 0, 'events': '*', 'url': 'http://example.com', 'encoding': 'application/json', 'apply_to': 'custom', 'repositories': ','.join(six.text_type(repo.pk) for repo in repositories) }, expected_mimetype=webhook_item_mimetype) self.assertEqual(rsp['stat'], 'ok') self.check_post_result(self.user, rsp)
def test_post_with_local_site_and_set_local_site(self): """Testing the POST <URL> API and attempting to set a LocalSite for another LocalSite's WebHook is ignored """ local_site_1 = LocalSite.objects.create(name='local-site-1') local_site_1.users.add(self.user) local_site_2 = LocalSite.objects.create(name='local-site-2') self.user.is_superuser = True self.user.save() rsp = self.api_post( get_webhook_list_url(local_site_name='local-site-1'), { 'enabled': 0, 'events': '*', 'url': 'http://example.com', 'encoding': 'application/json', 'custom_content': '', 'apply_to': 'all', 'local_site': local_site_2.pk, }, expected_mimetype=webhook_item_mimetype) self.assertEqual(rsp['stat'], 'ok') webhook = WebHookTarget.objects.get(pk=rsp['webhook']['id']) self.assertEqual(webhook.local_site_id, local_site_1.pk) self.compare_item(rsp['webhook'], webhook)
def test_post_repositories_local_site_but_webhook_not(self): """Testing the POST <URL> API without a local site for repositories that are in a local site """ local_site = LocalSite.objects.create(name='local-site-1') self.user.is_superuser = True self.user.save() repository = self.create_repository(name='Repo 1', local_site=local_site) rsp = self.api_post(get_webhook_list_url(), { 'enabled': 0, 'events': '*', 'url': 'http://example.com', 'encoding': 'application/json', 'custom_content': '', 'apply_to': 'custom', 'repositories': six.text_type(repository.pk), }, expected_status=400) self.assertEqual(rsp['stat'], 'fail') self.assertTrue('err' in rsp) self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code) self.assertEqual(rsp['err']['msg'], INVALID_FORM_DATA.msg) self.assertTrue('fields' in rsp) self.assertTrue('repositories' in rsp['fields']) self.assertEqual(rsp['fields']['repositories'], [ 'Select a valid choice. 1 is not one of the ' 'available choices.' ])
def test_post_all_events_and_more(self): """Testing the POST <URL> API with all events (*) and additional events """ self.user.is_superuser = True self.user.save() rsp = self.api_post(get_webhook_list_url(), { 'enabled': 0, 'events': 'review_request_closed,*,review_request_published', 'url': 'http://example.com', 'encoding': 'application/json', 'custom_content': '', 'apply_to': 'all' }, expected_mimetype=webhook_item_mimetype) webhook = WebHookTarget.objects.get() self.assertIn('stat', rsp) self.assertEqual(rsp['stat'], 'ok') self.assertIn('webhook', rsp) self.compare_item(rsp['webhook'], webhook) self.assertListEqual(webhook.events, ['*'])
def test_post_all_events_and_more(self): """Testing adding a webhook that listens on all events (*) and additional events """ self.user.is_superuser = True self.user.save() rsp = self.api_post( get_webhook_list_url(), { 'enabled': 0, 'events': 'review_request_closed,*,review_request_published', 'url': 'http://example.com', 'encoding': 'application/json', 'custom_content': '', 'apply_to': 'all' }, expected_mimetype=webhook_item_mimetype) webhook = WebHookTarget.objects.get() self.assertIn('stat', rsp) self.assertEqual(rsp['stat'], 'ok') self.assertIn('webhook', rsp) self.compare_item(rsp['webhook'], webhook) self.assertListEqual(webhook.events, ['*'])
def test_post_with_repositories(self): """Testing adding a webhook for custom repositories""" repositories = [ self.create_repository(name='Repo 1'), self.create_repository(name='Repo 2'), ] self.user.is_superuser = True self.user.save() rsp = self.api_post( get_webhook_list_url(), { 'enabled': 0, 'events': '*', 'url': 'http://example.com', 'encoding': 'application/json', 'apply_to': 'custom', 'repositories': ','.join( six.text_type(repo.pk) for repo in repositories ) }, expected_mimetype=webhook_item_mimetype) self.assertEqual(rsp['stat'], 'ok') self.check_post_result(self.user, rsp)
def setup_basic_get_test(self, user, with_local_site, local_site_name, populate_items): webhook = self.create_webhook(with_local_site=with_local_site) if populate_items: items = [webhook] else: items = [] return (get_webhook_list_url(local_site_name), webhook_list_mimetype, items)
def test_post_all_repositories_not_same_local_site(self): """Testing the POST <URL> API with a local site and custom repositories that are not all in the same local site """ local_site_1 = LocalSite.objects.create(name='local-site-1') local_site_2 = LocalSite.objects.create(name='local-site-2') for local_site in (local_site_1, local_site_2): local_site.admins = [self.user] local_site.users = [self.user] local_site.save() repositories = [ self.create_repository(name='Repo 1', local_site=local_site_1), self.create_repository(name='Repo 2', local_site=local_site_2), self.create_repository(name='Repo 3') ] rsp = self.api_post(get_webhook_list_url(local_site_1), { 'enabled': 0, 'events': '*', 'url': 'http://example.com', 'encoding': 'application/json', 'custom_content': '', 'apply_to': 'custom', 'repositories': ','.join(six.text_type(repo.pk) for repo in repositories) }, expected_status=400) self.assertEqual(rsp['stat'], 'fail') self.assertTrue('err' in rsp) self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code) self.assertEqual(rsp['err']['msg'], INVALID_FORM_DATA.msg) self.assertTrue('fields' in rsp) self.assertTrue('repositories' in rsp['fields']) self.assertEqual( set(rsp['fields']['repositories']), set([ 'Repository with ID %s is invalid.' % repo.pk for repo in repositories[1:] ]))
def setup_basic_post_test(self, user, with_local_site, local_site_name, post_valid_data): if post_valid_data: post_data = { 'enabled': 0, 'events': '*', 'url': 'http://example.com', 'encoding': 'application/json', 'custom_content': '', 'apply_to': 'all', } else: post_data = {} return (get_webhook_list_url(local_site_name), webhook_item_mimetype, post_data, [local_site_name])
def test_post_all_repositories_not_same_local_site(self): """Testing adding a webhook with a local site adnd custom repositories that are not all in the same local site """ local_site_1 = LocalSite.objects.create(name='local-site-1') local_site_2 = LocalSite.objects.create(name='local-site-2') for local_site in (local_site_1, local_site_2): local_site.admins = [self.user] local_site.users = [self.user] local_site.save() repositories = [ self.create_repository(name='Repo 1', local_site=local_site_1), self.create_repository(name='Repo 2', local_site=local_site_2), self.create_repository(name='Repo 3') ] rsp = self.api_post( get_webhook_list_url(local_site_1), { 'enabled': 0, 'events': '*', 'url': 'http://example.com', 'encoding': 'application/json', 'custom_content': '', 'apply_to': 'custom', 'repositories': ','.join( six.text_type(repo.pk) for repo in repositories ) }, expected_status=400) self.assertEqual(rsp['stat'], 'fail') self.assertTrue('err' in rsp) self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code) self.assertEqual(rsp['err']['msg'], INVALID_FORM_DATA.msg) self.assertTrue('fields' in rsp) self.assertTrue('repositories' in rsp['fields']) self.assertEqual(set(rsp['fields']['repositories']), set([ 'Repository with ID %s is invalid.' % repo.pk for repo in repositories[1:] ]))
def setup_basic_post_test(self, user, with_local_site, local_site_name, post_valid_data): if post_valid_data: post_data = { 'enabled': 0, 'events': '*', 'url': 'http://example.com', 'encoding': 'application/json', 'custom_content': '', 'apply_to': 'all', } else: post_data = {} return (get_webhook_list_url(local_site_name), webhook_item_mimetype, post_data, [])
def test_post_with_local_site_and_repository_not_on_site(self): """Testing the POST <URL> API with a local site and custom repository not on a local site """ local_site_1 = LocalSite.objects.create(name='local-site-1') local_site_2 = LocalSite.objects.create(name='local-site-2') for local_site in (local_site_1, local_site_2): local_site.admins = [self.user] local_site.users = [self.user] repositories = [ self.create_repository(name='Repo 1', local_site=local_site_1), self.create_repository(name='Repo 2') ] rsp = self.api_post(get_webhook_list_url(local_site_1), { 'enabled': 0, 'events': '*', 'url': 'http://example.com', 'encoding': 'application/json', 'custom_content': '', 'apply_to': 'custom', 'repositories': ','.join(six.text_type(repo.pk) for repo in repositories) }, expected_status=400) self.assertEqual(rsp['stat'], 'fail') self.assertTrue('err' in rsp) self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code) self.assertEqual(rsp['err']['msg'], INVALID_FORM_DATA.msg) self.assertTrue('fields' in rsp) self.assertTrue('repositories' in rsp['fields']) self.assertEqual(rsp['fields']['repositories'], [ 'Select a valid choice. 2 is not one of the ' 'available choices.' ])
def test_post_repositories_local_site_but_webhook_not(self): """Testing adding a webhook without a local site for repositories that are in a local site """ local_site = LocalSite.objects.create(name='local-site-1') self.user.is_superuser = True self.user.save() repositories = [ self.create_repository(name='Repo 1', local_site=local_site), self.create_repository(name='Repo 2', local_site=local_site), ] rsp = self.api_post(get_webhook_list_url(), { 'enabled': 0, 'events': '*', 'url': 'http://example.com', 'encoding': 'application/json', 'custom_content': '', 'apply_to': 'custom', 'repositories': ','.join(six.text_type(repo.pk) for repo in repositories) }, expected_status=400) self.assertEqual(rsp['stat'], 'fail') self.assertTrue('err' in rsp) self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code) self.assertEqual(rsp['err']['msg'], INVALID_FORM_DATA.msg) self.assertTrue('fields' in rsp) self.assertTrue('repositories' in rsp['fields']) self.assertEqual( set(rsp['fields']['repositories']), set([ 'Repository with ID %s is invalid.' % repo.pk for repo in repositories ]))
def test_post_no_events(self): """Testing the POST <URL> API with no events""" self.user.is_superuser = True self.user.save() rsp = self.api_post(get_webhook_list_url(), { 'enabled': 0, 'events': '', 'url': 'http://example.com', 'encoding': 'application/json', 'custom_content': '', 'apply_to': 'all' }, expected_mimetype=webhook_item_mimetype) self.assertIn('stat', rsp) self.assertEqual(rsp['stat'], 'ok') self.assertIn('webhook', rsp) self.compare_item(rsp['webhook'], WebHookTarget.objects.get())
def test_post_empty_repositories(self): """Testing the POST <URL> API with an empty repositories field""" self.user.is_superuser = True self.user.save() rsp = self.api_post(get_webhook_list_url(), { 'enabled': 0, 'events': 'review_request_closed,*,review_request_published', 'url': 'http://example.com', 'encoding': 'application/json', 'custom_content': '', 'apply_to': 'custom', 'repositories': '', }, expected_mimetype=webhook_item_mimetype) self.assertIn('stat', rsp) self.assertEqual(rsp['stat'], 'ok') self.assertIn('webhook', rsp) self.compare_item(rsp['webhook'], WebHookTarget.objects.get())
def test_post_repositories_local_site_but_webhook_not(self): """Testing adding a webhook without a local site for repositories that are in a local site """ local_site = LocalSite.objects.create(name='local-site-1') self.user.is_superuser = True self.user.save() repositories = [ self.create_repository(name='Repo 1', local_site=local_site), self.create_repository(name='Repo 2', local_site=local_site), ] rsp = self.api_post( get_webhook_list_url(), { 'enabled': 0, 'events': '*', 'url': 'http://example.com', 'encoding': 'application/json', 'custom_content': '', 'apply_to': 'custom', 'repositories': ','.join( six.text_type(repo.pk) for repo in repositories ) }, expected_status=400) self.assertEqual(rsp['stat'], 'fail') self.assertTrue('err' in rsp) self.assertEqual(rsp['err']['code'], INVALID_FORM_DATA.code) self.assertEqual(rsp['err']['msg'], INVALID_FORM_DATA.msg) self.assertTrue('fields' in rsp) self.assertTrue('repositories' in rsp['fields']) self.assertEqual(set(rsp['fields']['repositories']), set([ 'Repository with ID %s is invalid.' % repo.pk for repo in repositories ]))
def test_post_multiple_events(self): """Testing adding a webhook that listens for multiple events""" self.user.is_superuser = True self.user.save() rsp = self.api_post( get_webhook_list_url(), { 'enabled': 0, 'events': 'review_request_closed,review_request_published', 'url': 'http://example.com', 'encoding': 'application/json', 'custom_content': '', 'apply_to': 'all' }, expected_mimetype=webhook_item_mimetype) self.assertIn('stat', rsp) self.assertEqual(rsp['stat'], 'ok') self.assertIn('webhook', rsp) self.compare_item(rsp['webhook'], WebHookTarget.objects.get())
def test_post_no_events(self): """Testing adding a webhook that listens on no events""" self.user.is_superuser = True self.user.save() rsp = self.api_post( get_webhook_list_url(), { 'enabled': 0, 'events': '', 'url': 'http://example.com', 'encoding': 'application/json', 'custom_content': '', 'apply_to': 'all' }, expected_mimetype=webhook_item_mimetype) self.assertIn('stat', rsp) self.assertEqual(rsp['stat'], 'ok') self.assertIn('webhook', rsp) self.compare_item(rsp['webhook'], WebHookTarget.objects.get())
def test_post_multiple_events(self): """Testing the POST <URL> API with multiple events""" self.user.is_superuser = True self.user.save() rsp = self.api_post( get_webhook_list_url(), { 'enabled': 0, 'events': 'review_request_closed,review_request_published', 'url': 'http://example.com', 'encoding': 'application/json', 'custom_content': '', 'apply_to': 'all' }, expected_mimetype=webhook_item_mimetype) self.assertIn('stat', rsp) self.assertEqual(rsp['stat'], 'ok') self.assertIn('webhook', rsp) self.compare_item(rsp['webhook'], WebHookTarget.objects.get())
def test_post_empty_repositories(self): """Testing adding a webhook that has an empty repositories field""" self.user.is_superuser = True self.user.save() rsp = self.api_post( get_webhook_list_url(), { 'enabled': 0, 'events': 'review_request_closed,*,review_request_published', 'url': 'http://example.com', 'encoding': 'application/json', 'custom_content': '', 'apply_to': 'custom', 'repositories': '', }, expected_mimetype=webhook_item_mimetype) self.assertIn('stat', rsp) self.assertEqual(rsp['stat'], 'ok') self.assertIn('webhook', rsp) self.compare_item(rsp['webhook'], WebHookTarget.objects.get())