From 51d0155d24e75dd623733af2a78a469fd9e6c61b Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Dec 19 2019 11:59:51 +0000 Subject: Rework the structure of the tests for the bugzilla override endpoints Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure_distgit_tests/bugzilla_overrides_tests.py b/pagure_distgit_tests/bugzilla_overrides_tests.py index 19b14cb..6f27149 100644 --- a/pagure_distgit_tests/bugzilla_overrides_tests.py +++ b/pagure_distgit_tests/bugzilla_overrides_tests.py @@ -9,6 +9,7 @@ from pagure_distgit import plugin class PagureFlaskApiProjectBZOverrideTests(tests.Modeltests): + """ Tests the bugzilla override endpoints added in pagure-dist-git. """ def setUp(self): """ Set up the environnment, ran before every tests. """ @@ -20,169 +21,240 @@ class PagureFlaskApiProjectBZOverrideTests(tests.Modeltests): tests.create_tokens_acl(self.session) self._app.register_blueprint(plugin.DISTGIT_NS) - def test_override_endpoint(self): - """Test bugzilla overrides. """ + def test_default_values(self): + """Test the default values returned by the bz overrides endpoint. """ - output = self.app.get("/api/0/somenamespace/test3") - self.assertEqual(output.status_code, 200) + expected_result = { + "epel_assignee": "pingou", + "fedora_assignee": "pingou", + } output = self.app.get("/_dg/bzoverrides/somenamespace/test3") self.assertEqual(output.status_code, 200) data = json.loads(output.get_data(as_text=True)) - expected_result = {"epel_assignee": "pingou", "fedora_assignee": "pingou"} - data = json.loads(output.get_data(as_text=True)) self.assertDictEqual(data, expected_result) + def test_token_missing_ACL(self): + """Test the bz endpoint with an API token missing the `modify_project` ACL. + """ headers = {"Authorization": "token foo_token"} - datainput = { - "epel_assignee": "foo", - "fedora_assignee": "pingou", - } output = self.app.post( - "/_dg/bzoverrides/somenamespace/test3", data=datainput, headers=headers + "/_dg/bzoverrides/somenamespace/test3", headers=headers ) # invalid token self.assertEqual(output.status_code, 401) + def test_invalid_token(self): + """Test the bz endpoint with an invalid API token. """ headers = {"Authorization": "token BBBZZZOOO"} + datainput = {} output = self.app.post( - "/_dg/bzoverrides/somenamespace/test3", data=datainput, headers=headers + "/_dg/bzoverrides/somenamespace/test3", + data=datainput, + headers=headers, ) self.assertEqual(output.status_code, 401) - output = self.app.get("/_dg/bzoverrides/somenamespace/test3") + def test_change_both_assignee(self): + """Test the bz endpoint when changing both assignee at once. """ + headers = {"Authorization": "token aaabbbcccddd"} + datainput = {"epel_assignee": "foo", "fedora_assignee": "foo"} + output = self.app.post( + "/_dg/bzoverrides/somenamespace/test3", + data=datainput, + headers=headers, + ) self.assertEqual(output.status_code, 200) data = json.loads(output.get_data(as_text=True)) - self.assertDictEqual(data, expected_result) + self.assertDictEqual(data, datainput) - # Change assignees with a valid token + def test_change_fedora_assignee(self): + """Test the bz endpoint when changing the Fedora assignee while keeping + the EPEL one. + """ headers = {"Authorization": "token aaabbbcccddd"} + datainput = {"epel_assignee": "foo", "fedora_assignee": "pingou"} output = self.app.post( - "/_dg/bzoverrides/somenamespace/test3", data=datainput, headers=headers + "/_dg/bzoverrides/somenamespace/test3", + data=datainput, + headers=headers, + ) + self.assertEqual(output.status_code, 200) + data = json.loads(output.get_data(as_text=True)) + self.assertDictEqual(data, datainput) + + def test_change_epel_assignee(self): + """Test the bz endpoint when changing the EPEL assignee while keeping + the Fedora one. + """ + headers = {"Authorization": "token aaabbbcccddd"} + datainput = {"epel_assignee": "", "fedora_assignee": None} + expected_result = { + "epel_assignee": "pingou", + "fedora_assignee": "pingou", + } + output = self.app.post( + "/_dg/bzoverrides/somenamespace/test3", + data=datainput, + headers=headers, ) self.assertEqual(output.status_code, 200) - expected_result = {"epel_assignee": "foo", "fedora_assignee": "pingou"} - output = self.app.get("/_dg/bzoverrides/somenamespace/test3") data = json.loads(output.get_data(as_text=True)) self.assertDictEqual(data, expected_result) - # set both assignees to foo - datainput = {"epel_assignee": "foo", "fedora_assignee": "foo"} + def test_reset_fedora_assignees(self): + """Test the bz endpoint when resetting the Fedora assignee. + """ + headers = {"Authorization": "token aaabbbcccddd"} + datainput = {"fedora_assignee": "foo"} output = self.app.post( - "/_dg/bzoverrides/somenamespace/test3", data=datainput, headers=headers + "/_dg/bzoverrides/somenamespace/test3", + data=datainput, + headers=headers, ) self.assertEqual(output.status_code, 200) - output = self.app.get("/_dg/bzoverrides/somenamespace/test3") data = json.loads(output.get_data(as_text=True)) - self.assertDictEqual(data, datainput) + self.assertDictEqual( + data, {"epel_assignee": "pingou", "fedora_assignee": "foo"} + ) - # Change both assignees back to default - datainput = {"epel_assignee": "", "fedora_assignee": None} - expected_result = {"epel_assignee": "pingou", "fedora_assignee": "pingou"} + datainput = {"fedora_assignee": ""} output = self.app.post( - "/_dg/bzoverrides/somenamespace/test3", data=datainput, headers=headers + "/_dg/bzoverrides/somenamespace/test3", + data=datainput, + headers=headers, ) self.assertEqual(output.status_code, 200) - output = self.app.get("/_dg/bzoverrides/somenamespace/test3") data = json.loads(output.get_data(as_text=True)) - self.assertDictEqual(data, expected_result) + self.assertDictEqual( + data, {"epel_assignee": "pingou", "fedora_assignee": "pingou"} + ) - # Change only one assignee, then change assignee back to default - expected_result = {"epel_assignee": "pingou", "fedora_assignee": "pingou"} + def test_reset_epel_assignees(self): + """Test the bz endpoint when resetting the EPEL assignee. + """ + headers = {"Authorization": "token aaabbbcccddd"} datainput = {"epel_assignee": "foo", "fedora_assignee": "pingou"} output = self.app.post( - "/_dg/bzoverrides/somenamespace/test3", data=datainput, headers=headers + "/_dg/bzoverrides/somenamespace/test3", + data=datainput, + headers=headers, ) self.assertEqual(output.status_code, 200) + data = json.loads(output.get_data(as_text=True)) + self.assertDictEqual(data, datainput) + + datainput = {"fedora_assignee": "pingou"} + output = self.app.post( + "/_dg/bzoverrides/somenamespace/test3", + data=datainput, + headers=headers, + ) + self.assertEqual(output.status_code, 200) + data = json.loads(output.get_data(as_text=True)) + self.assertDictEqual( + data, {"epel_assignee": "pingou", "fedora_assignee": "pingou"} + ) + + def test_reset_both_assignees(self): + """Test the bz endpoint when resetting the both assignees. + """ + headers = {"Authorization": "token aaabbbcccddd"} datainput = {"epel_assignee": "", "fedora_assignee": "pingou"} output = self.app.post( - "/_dg/bzoverrides/somenamespace/test3", data=datainput, headers=headers + "/_dg/bzoverrides/somenamespace/test3", + data=datainput, + headers=headers, ) self.assertEqual(output.status_code, 200) - output = self.app.get("/_dg/bzoverrides/somenamespace/test3") data = json.loads(output.get_data(as_text=True)) - self.assertDictEqual(data, expected_result) + self.assertDictEqual( + data, {"epel_assignee": "pingou", "fedora_assignee": "pingou"} + ) - user = tests.FakeUser(username="pingou") + def test_changing_assignees_logged_in_invalid_user(self): + """Test the bz endpoint when changing the both assignees when logged in + the UI but with an user that is not allowed. + """ + user = tests.FakeUser(username="foo") with tests.user_set(self.app.application, user): - # change one assignee - expected_result = {"epel_assignee": "foo", "fedora_assignee": "pingou"} - datainput = {"epel_assignee": "foo", "fedora_assignee": "pingou"} + expected_result = { + "epel_assignee": "pingou", + "fedora_assignee": "pingou", + } output = self.app.post( - "/_dg/bzoverrides/somenamespace/test3", data=datainput + "/_dg/bzoverrides/somenamespace/test3", data=expected_result ) - self.assertEqual(output.status_code, 200) - data = json.loads(output.get_data(as_text=True)) - self.assertDictEqual(data, expected_result) + self.assertEqual(output.status_code, 401) + def test_change_epel_assignee_logged_in(self): + """Test the bz endpoint when changing the EPEL assignee when logged in + the UI. + """ + user = tests.FakeUser(username="pingou") + with tests.user_set(self.app.application, user): # change one assignee - expected_result = {"epel_assignee": "foo", "fedora_assignee": "foo"} - datainput = {"epel_assignee": "foo","fedora_assignee": "foo"} + expected_result = {"epel_assignee": "foo"} + datainput = {"epel_assignee": "foo"} output = self.app.post( "/_dg/bzoverrides/somenamespace/test3", data=datainput ) self.assertEqual(output.status_code, 200) data = json.loads(output.get_data(as_text=True)) - self.assertDictEqual(data, expected_result) + self.assertDictEqual( + data, {"epel_assignee": "foo", "fedora_assignee": "pingou"} + ) - # reset assignees - expected_result = {"epel_assignee": "pingou", "fedora_assignee": "pingou"} - datainput = {"epel_assignee": None, "fedora_assignee": ""} + def test_change_fedora_assignee_logged_in(self): + """Test the bz endpoint when changing the Fedora assignee when logged in + the UI. + """ + user = tests.FakeUser(username="pingou") + with tests.user_set(self.app.application, user): + # change one assignee + datainput = {"fedora_assignee": "foo"} output = self.app.post( "/_dg/bzoverrides/somenamespace/test3", data=datainput ) self.assertEqual(output.status_code, 200) data = json.loads(output.get_data(as_text=True)) - self.assertDictEqual(data, expected_result) + self.assertDictEqual( + data, {"epel_assignee": "pingou", "fedora_assignee": "foo"} + ) - # change both assignees to foo, then change only one back - # As the other is considered empty, both should be back to pingou - expected_result = {"epel_assignee": "foo", "fedora_assignee": "foo"} - datainput = {"epel_assignee": "foo","fedora_assignee": "foo"} + def test_change_both_assignees_logged_in(self): + """Test the bz endpoint when changing the both assignees when logged in + the UI. + """ + user = tests.FakeUser(username="pingou") + with tests.user_set(self.app.application, user): + datainput = {"epel_assignee": "foo", "fedora_assignee": "foo"} output = self.app.post( "/_dg/bzoverrides/somenamespace/test3", data=datainput ) self.assertEqual(output.status_code, 200) data = json.loads(output.get_data(as_text=True)) - self.assertDictEqual(data, expected_result) - expected_result = {"epel_assignee": "pingou", "fedora_assignee": "pingou"} - datainput = {"epel_assignee": "pingou"} - output = self.app.post( - "/_dg/bzoverrides/somenamespace/test3", data=datainput + self.assertDictEqual( + data, {"epel_assignee": "foo", "fedora_assignee": "foo"} ) - self.assertEqual(output.status_code, 200) - data = json.loads(output.get_data(as_text=True)) - self.assertDictEqual(data, expected_result) - # Invalid datainput resets to default - datainput = {"epel_assignee": "foo","fedora_assignee": "foo"} - output = self.app.post( - "/_dg/bzoverrides/somenamespace/test3", data=datainput - ) - self.assertEqual(output.status_code, 200) - datainput = {} # This is invalid input + def test_resetting_assignees_logged_in(self): + """Test the bz endpoint when resetting assignees when logged in the UI. + """ + user = tests.FakeUser(username="pingou") + with tests.user_set(self.app.application, user): + datainput = {"epel_assignee": "foo"} output = self.app.post( "/_dg/bzoverrides/somenamespace/test3", data=datainput ) self.assertEqual(output.status_code, 200) data = json.loads(output.get_data(as_text=True)) - self.assertDictEqual(data, expected_result) - - datainput = {"epel_assignee": "foo","fedora_assignee": "foo"} - output = self.app.post( - "/_dg/bzoverrides/somenamespace/test3", data=datainput + self.assertDictEqual( + data, {"epel_assignee": "foo", "fedora_assignee": "pingou"} ) + + output = self.app.post("/_dg/bzoverrides/somenamespace/test3") self.assertEqual(output.status_code, 200) - datainput = None # Invalid input - output = self.app.post( - "/_dg/bzoverrides/somenamespace/test3", data=datainput - ) data = json.loads(output.get_data(as_text=True)) - self.assertEqual(output.status_code, 200) - - user = tests.FakeUser(username="foo") - with tests.user_set(self.app.application, user): - expected_result = {"epel_assignee": "pingou", "fedora_assignee": "pingou"} - output = self.app.post( - "/_dg/bzoverrides/somenamespace/test3", data=expected_result + self.assertDictEqual( + data, {"epel_assignee": "pingou", "fedora_assignee": "pingou"} ) - self.assertEqual(output.status_code, 401)