| |
@@ -1,17 +1,18 @@
|
| |
import json
|
| |
import os
|
| |
- from unittest.mock import call, patch
|
| |
+ from unittest.mock import patch
|
| |
|
| |
- import pagure.lib.query
|
| |
import pagure.lib.model
|
| |
+ import pagure.lib.query
|
| |
|
| |
+ from pagure_distgit import model
|
| |
from pagure_distgit import plugin
|
| |
|
| |
import tests
|
| |
|
| |
|
| |
class PagureFlaskApiOrphanEndpointTests(tests.Modeltests):
|
| |
- """ Tests the orphan endpoints added in pagure-dist-git. """
|
| |
+ """ Tests the orphan endpoint added in pagure-dist-git. """
|
| |
|
| |
def setUp(self):
|
| |
""" Set up the environnment, ran before every tests. """
|
| |
@@ -52,6 +53,16 @@
|
| |
)
|
| |
assert output.status_code == 401
|
| |
|
| |
+ def test_invalid_form(self):
|
| |
+ """Assert that invalid form is not accepted.
|
| |
+ """
|
| |
+ headers = {"Authorization": "token aaabbbcccddd"}
|
| |
+ datainput = {}
|
| |
+ output = self.app.post(
|
| |
+ "/_dg/orphan/somenamespace/test3", data=datainput, headers=headers,
|
| |
+ )
|
| |
+ assert output.status_code == 400
|
| |
+
|
| |
def test_already_orphaned_package(self):
|
| |
"""Assert that already orphaned package can't be orphaned again.
|
| |
"""
|
| |
@@ -74,7 +85,7 @@
|
| |
"""Assert that package is correctly orphaned.
|
| |
"""
|
| |
headers = {"Authorization": "token aaabbbcccddd"}
|
| |
- datainput = {}
|
| |
+ datainput = {"orphan_reason": "Lack of time"}
|
| |
repo = pagure.lib.query.get_authorized_project(
|
| |
self.session, "test3", namespace="somenamespace",
|
| |
)
|
| |
@@ -89,7 +100,8 @@
|
| |
)
|
| |
assert output.status_code == 200
|
| |
data = json.loads(output.get_data(as_text=True))
|
| |
- self.assertDictEqual(data, {"point_of_contact": "orphan"})
|
| |
+ exp = {"orphan": True, "reason": "Lack of time", "reason_info": ""}
|
| |
+ self.assertDictEqual(data, exp)
|
| |
|
| |
assert repo.user.user == "orphan"
|
| |
|
| |
@@ -107,7 +119,7 @@
|
| |
"""Assert that package is correctly orphaned.
|
| |
"""
|
| |
headers = {"Authorization": "token aaabbbcccddd"}
|
| |
- datainput = {}
|
| |
+ datainput = {"orphan_reason": "Lack of time"}
|
| |
repo = pagure.lib.query.get_authorized_project(
|
| |
self.session, "test3", namespace="somenamespace",
|
| |
)
|
| |
@@ -117,7 +129,8 @@
|
| |
)
|
| |
assert output.status_code == 200
|
| |
data = json.loads(output.get_data(as_text=True))
|
| |
- self.assertDictEqual(data, {"point_of_contact": "orphan"})
|
| |
+ exp = {"orphan": True, "reason": "Lack of time", "reason_info": ""}
|
| |
+ self.assertDictEqual(data, exp)
|
| |
# refresh the repo object, so we have the current state
|
| |
self.session.refresh(repo)
|
| |
|
| |
@@ -143,3 +156,199 @@
|
| |
"/_dg/orphan/somenamespace/test3", data=datainput, headers=headers,
|
| |
)
|
| |
assert output.status_code == 400
|
| |
+
|
| |
+
|
| |
+ class PagureFlaskApiOrphanGetEndpointTests(tests.Modeltests):
|
| |
+ """ Tests the orphan get endpoint added in pagure-dist-git. """
|
| |
+
|
| |
+ def setUp(self):
|
| |
+ """ Set up the environnment, ran before every tests. """
|
| |
+ super(PagureFlaskApiOrphanGetEndpointTests, self).setUp()
|
| |
+ self.session.flush()
|
| |
+ tests.create_projects(self.session)
|
| |
+ tests.create_projects_git(os.path.join(self.path, "repos"), bare=True)
|
| |
+ tests.create_tokens(self.session)
|
| |
+ tests.create_tokens_acl(self.session)
|
| |
+ tests.create_user(
|
| |
+ self.session, "orphan", "orphan", ["orphan@fedoraproject.org"]
|
| |
+ )
|
| |
+ repo = pagure.lib.query.get_authorized_project(
|
| |
+ self.session, "test3", namespace="somenamespace",
|
| |
+ )
|
| |
+ token = pagure.lib.query.get_api_token(self.session, "aaabbbcccddd")
|
| |
+ token.project = repo
|
| |
+ self.session.add(token)
|
| |
+ self.session.commit()
|
| |
+ self._app.register_blueprint(plugin.DISTGIT_NS)
|
| |
+
|
| |
+ def test_not_orphaned(self):
|
| |
+ """
|
| |
+ Assert that correct output is returned when package is not orphaned.
|
| |
+ """
|
| |
+ output = self.app.get("/_dg/orphan/somenamespace/test3")
|
| |
+ assert output.status_code == 200
|
| |
+
|
| |
+ data = json.loads(output.get_data(as_text=True))
|
| |
+ exp = {"orphan": False, "reason": "", "reason_info": ""}
|
| |
+ self.assertDictEqual(data, exp)
|
| |
+
|
| |
+ def test_orphaned(self):
|
| |
+ """ Assert that correct output is returned when package is orphaned.
|
| |
+ """
|
| |
+ orphan_user_obj = pagure.lib.query.get_user(self.session, "orphan")
|
| |
+ repo = pagure.lib.query.get_authorized_project(
|
| |
+ self.session, "test3", namespace="somenamespace",
|
| |
+ )
|
| |
+ repo.user = orphan_user_obj
|
| |
+ reason = model.PagureOrphanReason(
|
| |
+ project_id=repo.id, reason="reason", reason_info="reason_info",
|
| |
+ )
|
| |
+ self.session.add(reason)
|
| |
+ self.session.add(repo)
|
| |
+ self.session.commit()
|
| |
+ output = self.app.get("/_dg/orphan/somenamespace/test3")
|
| |
+ assert output.status_code == 200
|
| |
+
|
| |
+ data = json.loads(output.get_data(as_text=True))
|
| |
+ exp = {
|
| |
+ "orphan": True,
|
| |
+ "reason": "reason",
|
| |
+ "reason_info": "reason_info",
|
| |
+ }
|
| |
+ self.assertDictEqual(data, exp)
|
| |
+
|
| |
+ def test_orphaned_no_reason(self):
|
| |
+ """ Assert that correct output is returned when package is orphaned.
|
| |
+ """
|
| |
+ orphan_user_obj = pagure.lib.query.get_user(self.session, "orphan")
|
| |
+ repo = pagure.lib.query.get_authorized_project(
|
| |
+ self.session, "test3", namespace="somenamespace",
|
| |
+ )
|
| |
+ repo.user = orphan_user_obj
|
| |
+ self.session.add(repo)
|
| |
+ self.session.commit()
|
| |
+ output = self.app.get("/_dg/orphan/somenamespace/test3")
|
| |
+ assert output.status_code == 200
|
| |
+
|
| |
+ data = json.loads(output.get_data(as_text=True))
|
| |
+ exp = {
|
| |
+ "orphan": True,
|
| |
+ "reason": "",
|
| |
+ "reason_info": "",
|
| |
+ }
|
| |
+ self.assertDictEqual(data, exp)
|
| |
+
|
| |
+
|
| |
+ class PagureFlaskApiTakeOrphanEndpointTests(tests.Modeltests):
|
| |
+ """ Tests the take orphan endpoint added in pagure-dist-git. """
|
| |
+
|
| |
+ def setUp(self):
|
| |
+ """ Set up the environnment, ran before every tests. """
|
| |
+ super(PagureFlaskApiTakeOrphanEndpointTests, self).setUp()
|
| |
+ self.session.flush()
|
| |
+ tests.create_projects(self.session)
|
| |
+ tests.create_projects_git(os.path.join(self.path, "repos"), bare=True)
|
| |
+ tests.create_tokens(self.session)
|
| |
+ tests.create_tokens_acl(self.session)
|
| |
+ tests.create_user(
|
| |
+ self.session, "orphan", "orphan", ["orphan@fedoraproject.org"]
|
| |
+ )
|
| |
+ pagure.lib.query.add_group(
|
| |
+ self.session,
|
| |
+ "packager",
|
| |
+ "packager",
|
| |
+ "",
|
| |
+ "user",
|
| |
+ "pingou",
|
| |
+ True,
|
| |
+ [],
|
| |
+ )
|
| |
+
|
| |
+ repo = pagure.lib.query.get_authorized_project(
|
| |
+ self.session, "test3", namespace="somenamespace",
|
| |
+ )
|
| |
+ token = pagure.lib.query.get_api_token(self.session, "aaabbbcccddd")
|
| |
+ token.project = repo
|
| |
+ orphan_user_obj = pagure.lib.query.get_user(self.session, "orphan")
|
| |
+ repo.user = orphan_user_obj
|
| |
+ reason = model.PagureOrphanReason(
|
| |
+ project_id=repo.id, reason="reason", reason_info="reason_info",
|
| |
+ )
|
| |
+ self.session.add(reason)
|
| |
+ self.session.add(repo)
|
| |
+ self.session.add(token)
|
| |
+ self.session.commit()
|
| |
+ self._app.register_blueprint(plugin.DISTGIT_NS)
|
| |
+
|
| |
+ def test_token_missing_ACL(self):
|
| |
+ """
|
| |
+ Test the take orphan endpoint with an API token missing
|
| |
+ the `modify_project` ACL.
|
| |
+ """
|
| |
+ headers = {"Authorization": "token foo_token"}
|
| |
+ output = self.app.post(
|
| |
+ "/_dg/take_orphan/somenamespace/test3", headers=headers
|
| |
+ )
|
| |
+ # invalid token
|
| |
+ assert output.status_code == 401
|
| |
+
|
| |
+ def test_invalid_token(self):
|
| |
+ """Test the take orphan endpoint with an invalid API token. """
|
| |
+ headers = {"Authorization": "token BBBZZZOOO"}
|
| |
+ output = self.app.post(
|
| |
+ "/_dg/take_orphan/somenamespace/test3", headers=headers,
|
| |
+ )
|
| |
+ assert output.status_code == 401
|
| |
+
|
| |
+ @patch("pagure_distgit.plugin._is_active_in_pdc")
|
| |
+ @patch("pagure_distgit.plugin.pagure.lib.notify.log")
|
| |
+ def test_take_orphan(self, mock_log, mock_pdc):
|
| |
+ """Assert that package is correctly adopted.
|
| |
+ """
|
| |
+ mock_pdc.return_value = True
|
| |
+ headers = {"Authorization": "token aaabbbcccddd"}
|
| |
+ repo = pagure.lib.query.get_authorized_project(
|
| |
+ self.session, "test3", namespace="somenamespace",
|
| |
+ )
|
| |
+ assert repo.orphan_reason.reason == "reason"
|
| |
+ output = self.app.post(
|
| |
+ "/_dg/take_orphan/somenamespace/test3", headers=headers,
|
| |
+ )
|
| |
+ assert output.status_code == 200
|
| |
+ data = json.loads(output.get_data(as_text=True))
|
| |
+ self.assertDictEqual(data, {"point_of_contact": "pingou"})
|
| |
+
|
| |
+ # refresh the repo object, so we have the current state
|
| |
+ self.session.refresh(repo)
|
| |
+ assert repo.user.user == "pingou"
|
| |
+ assert not repo.orphan_reason
|
| |
+
|
| |
+ assert mock_log.call_count == 1
|
| |
+
|
| |
+ @patch("pagure_distgit.plugin._is_active_in_pdc")
|
| |
+ @patch("pagure_distgit.plugin.pagure.lib.notify.log")
|
| |
+ def test_take_orphan_no_reason(self, mock_log, mock_pdc):
|
| |
+ """
|
| |
+ Assert that package is correctly adopted when reason
|
| |
+ is not provided.
|
| |
+ """
|
| |
+ mock_pdc.return_value = True
|
| |
+ headers = {"Authorization": "token aaabbbcccddd"}
|
| |
+ repo = pagure.lib.query.get_authorized_project(
|
| |
+ self.session, "test3", namespace="somenamespace",
|
| |
+ )
|
| |
+ reason = repo.orphan_reason
|
| |
+ self.session.delete(reason)
|
| |
+ self.session.commit()
|
| |
+ output = self.app.post(
|
| |
+ "/_dg/take_orphan/somenamespace/test3", headers=headers,
|
| |
+ )
|
| |
+ assert output.status_code == 200
|
| |
+ data = json.loads(output.get_data(as_text=True))
|
| |
+ self.assertDictEqual(data, {"point_of_contact": "pingou"})
|
| |
+
|
| |
+ # refresh the repo object, so we have the current state
|
| |
+ self.session.refresh(repo)
|
| |
+ assert repo.user.user == "pingou"
|
| |
+
|
| |
+ assert mock_log.call_count == 1
|
| |
This PR implements https://pagure.io/pagure-dist-git/issue/112 and adds
following:
Signed-off-by: Michal Konečný mkonecny@redhat.com