Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit c726d16b20e8daeb56b159521721877ac05c58c1
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Wed Aug 26 14:21:59 2015 +0200
[frontend][api] update MockChroot Resource, covered with tests
---------------------------------------------------------------
.../coprs/rest_api/resources/mock_chroot.py | 44 +++++++++------
frontend/coprs_frontend/tests/coprs_test_case.py | 1 +
.../tests/test_api/test_mock_chroot_r.py | 60 ++++++++++++++++++++
..._project_chroot.py => test_project_chroot_r.py} | 0
4 files changed, 88 insertions(+), 17 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/rest_api/resources/mock_chroot.py
b/frontend/coprs_frontend/coprs/rest_api/resources/mock_chroot.py
index 0ffa083..0ee1d0d 100644
--- a/frontend/coprs_frontend/coprs/rest_api/resources/mock_chroot.py
+++ b/frontend/coprs_frontend/coprs/rest_api/resources/mock_chroot.py
@@ -14,21 +14,38 @@ from coprs.logic.coprs_logic import MockChrootsLogic,
CoprChrootsLogic, CoprsLog
from ..util import get_one_safe, json_loads_safe, mm_deserialize
+def render_mock_chroot(chroot):
+ return {
+ "chroot": MockChrootSchema().dump(chroot)[0],
+ "_links": {
+ "self": {"href": url_for(".mockchrootr",
name=chroot.name)},
+ "all_chroots": {"href":
url_for(".mockchrootlistr")}
+ },
+ }
+
+
class MockChrootListR(Resource):
+
def get(self):
- # todo: add argument active_only
- chroots = MockChrootsLogic.get_multiple(active_only=False).all()
+ parser = reqparse.RequestParser()
+ parser.add_argument('active_only', type=bool)
+ req_args = parser.parse_args()
+ active_only = False
+ if req_args["active_only"]:
+ active_only = True
+
+ chroots = MockChrootsLogic.get_multiple(active_only=active_only).all()
+
+ self_extra = {}
+ if active_only:
+ self_extra["active_only"] = active_only
return {
"_links": {
- "self": {"href":
url_for(".mockchrootlistr")},
+ "self": {"href":
url_for(".mockchrootlistr", **self_extra)},
},
"chroots": [
- {
- "chroot": MockChrootSchema().dump(chroot)[0],
- "_links": {
- "self": {"href":
url_for(".mockchrootr", name=chroot.name)},
- }
- } for chroot in chroots
+ render_mock_chroot(chroot)
+ for chroot in chroots
]
}
@@ -36,11 +53,4 @@ class MockChrootListR(Resource):
class MockChrootR(Resource):
def get(self, name):
chroot = get_one_safe(MockChrootsLogic.get_from_name(name))
- return {
- "chroot": MockChrootSchema().dump(chroot)[0],
- "_links": {
- "self": {"href": url_for(".mockchrootr",
name=chroot.name)},
- "all_chroots": {"href":
url_for(".mockchrootlistr")}
- },
- }
-
+ return render_mock_chroot(chroot)
diff --git a/frontend/coprs_frontend/tests/coprs_test_case.py
b/frontend/coprs_frontend/tests/coprs_test_case.py
index 37db540..52fceb2 100644
--- a/frontend/coprs_frontend/tests/coprs_test_case.py
+++ b/frontend/coprs_frontend/tests/coprs_test_case.py
@@ -135,6 +135,7 @@ class CoprsTestCase(object):
self.mc4 = models.MockChroot(
os_release="fedora", os_version="rawhide",
arch="i386", is_active=True)
+ self.mc_basic_list = [self.mc1, self.mc2, self.mc3, self.mc4]
# only bind to coprs if the test has used the f_coprs fixture
if hasattr(self, "c1"):
cc1 = models.CoprChroot()
diff --git a/frontend/coprs_frontend/tests/test_api/test_mock_chroot_r.py
b/frontend/coprs_frontend/tests/test_api/test_mock_chroot_r.py
new file mode 100644
index 0000000..3c4061c
--- /dev/null
+++ b/frontend/coprs_frontend/tests/test_api/test_mock_chroot_r.py
@@ -0,0 +1,60 @@
+# coding: utf-8
+
+import json
+from marshmallow import pprint
+
+import pytest
+import sqlalchemy
+
+from coprs.logic.users_logic import UsersLogic
+from coprs.logic.coprs_logic import CoprsLogic
+
+from tests.coprs_test_case import CoprsTestCase, TransactionDecorator
+
+
+class TestMockChrootResource(CoprsTestCase):
+
+ def test_collection(self, f_mock_chroots, f_db):
+ href = "/api_2/mock_chroots"
+ r = self.tc.get(href)
+ assert r.status_code == 200
+ obj = json.loads(r.data)
+ assert obj["_links"]["self"]["href"] == href
+ assert len(obj["chroots"]) == len(self.mc_basic_list)
+
+ def test_collection_only_active(self, f_mock_chroots, f_db):
+ expected_len = len(self.mc_basic_list) - 1
+ self.mc4.is_active = False
+ self.db.session.add(self.mc4)
+ self.db.session.commit()
+
+ href = "/api_2/mock_chroots?active_only=True"
+ r = self.tc.get(href)
+ assert r.status_code == 200
+ obj = json.loads(r.data)
+ assert obj["_links"]["self"]["href"] == href
+ assert len(obj["chroots"]) == expected_len
+
+ def test_post_not_allowed(self, f_mock_chroots, f_db, f_users, f_users_api):
+ data = {
+ u'arch': u'i386',
+ u'is_active': True,
+ u'name': u'fedora-99-i386',
+ u'os_release': u'fedora',
+ u'os_version': u'99'
+ }
+ r0 = self.request_rest_api_with_auth(
+ "/api_2/mock_chroots",
+ method="post",
+ content=data,
+ )
+ assert r0.status_code == 405
+
+ def test_get_one(self, f_mock_chroots, f_db):
+ chroot_name = self.mc1.name
+ href = "/api_2/mock_chroots/{}".format(chroot_name)
+ r = self.tc.get(href)
+ assert r.status_code == 200
+ obj = json.loads(r.data)
+ assert obj["_links"]["self"]["href"] == href
+ assert obj["chroot"]["name"] == chroot_name
diff --git a/frontend/coprs_frontend/tests/test_api/test_project_chroot.py
b/frontend/coprs_frontend/tests/test_api/test_project_chroot_r.py
similarity index 100%
rename from frontend/coprs_frontend/tests/test_api/test_project_chroot.py
rename to frontend/coprs_frontend/tests/test_api/test_project_chroot_r.py