Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit 0a7e250616ca8824adfb0b2cf14a0fe8c3d78e78
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Tue Sep 1 11:40:14 2015 +0200
[frontend][api] Updated and tested DELETE method to /projects/<id> resource
---------------------------------------------------------------
.../coprs/rest_api/resources/project.py | 17 ++---
frontend/coprs_frontend/coprs/rest_api/schemas.py | 1 -
.../tests/test_api/test_project_r.py | 64 ++++++++++++++++++++
3 files changed, 71 insertions(+), 11 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/rest_api/resources/project.py
b/frontend/coprs_frontend/coprs/rest_api/resources/project.py
index da72007..6c2cbd7 100644
--- a/frontend/coprs_frontend/coprs/rest_api/resources/project.py
+++ b/frontend/coprs_frontend/coprs/rest_api/resources/project.py
@@ -20,7 +20,7 @@ from coprs.logic.users_logic import UsersLogic
from coprs.logic.coprs_logic import CoprsLogic
from coprs.exceptions import ActionInProgressException, InsufficientRightsException
from coprs.rest_api.schemas import ProjectSchema
-from ..exceptions import ObjectAlreadyExists, AuthFailed
+from ..exceptions import ObjectAlreadyExists, AuthFailed, CannotProcessRequest,
AccessForbidden
from ..util import get_one_safe, json_loads_safe, mm_deserialize, render_allowed_method,
mm_serialize_one
@@ -174,18 +174,15 @@ class ProjectR(Resource):
@rest_api_auth_required
def delete(self, project_id):
- copr = get_one_safe(CoprsLogic.get_by_id(int(project_id)))
-
- raise NotImplementedError()
+ project = get_one_safe(CoprsLogic.get_by_id(int(project_id)))
try:
- ComplexLogic.delete_copr(copr)
- except (ActionInProgressException,
- InsufficientRightsException) as err:
- db.session.rollback()
- raise
- else:
+ ComplexLogic.delete_copr(project)
db.session.commit()
+ except ActionInProgressException as err:
+ raise CannotProcessRequest(str(err))
+ except InsufficientRightsException as err:
+ raise AccessForbidden(str(err))
return None, 204
diff --git a/frontend/coprs_frontend/coprs/rest_api/schemas.py
b/frontend/coprs_frontend/coprs/rest_api/schemas.py
index 26f4452..7325e3e 100644
--- a/frontend/coprs_frontend/coprs/rest_api/schemas.py
+++ b/frontend/coprs_frontend/coprs/rest_api/schemas.py
@@ -79,7 +79,6 @@ class BuildSchema(Schema):
id = fields.Int(dump_only=True)
state = fields.Str()
- pkgs = fields.Str(dump_only=True)
build_packages = fields.Str(dump_only=True)
pkg_version = fields.Str(dump_only=True)
diff --git a/frontend/coprs_frontend/tests/test_api/test_project_r.py
b/frontend/coprs_frontend/tests/test_api/test_project_r.py
index 439820f..6fae757 100644
--- a/frontend/coprs_frontend/tests/test_api/test_project_r.py
+++ b/frontend/coprs_frontend/tests/test_api/test_project_r.py
@@ -92,3 +92,67 @@ class TestProjectResource(CoprsTestCase):
project = CoprsLogic.get_by_id(p_id).one()
builds = BuildsLogic.get_multiple_by_copr(project).all()
assert len(obj["project_builds"]) == len(builds)
+
+ def test_delete_not_found(self, f_users, f_mock_chroots,
+ f_users_api, f_db):
+
+ href = "/api_2/projects/{}".format("1")
+
+ r0 = self.request_rest_api_with_auth(
+ href,
+ method="delete"
+ )
+ assert r0.status_code == 404
+
+ def test_delete_ok(self, f_users, f_mock_chroots,
+ f_coprs, f_users_api, f_db):
+
+ href = "/api_2/projects/{}".format(self.c1.id)
+
+ r0 = self.request_rest_api_with_auth(
+ href,
+ method="delete"
+ )
+ assert r0.status_code == 204
+ assert self.tc.get(href).status_code == 404
+
+ def test_delete_fail_unfinished_build(self, f_users, f_mock_chroots,
+ f_coprs, f_builds, f_users_api, f_db):
+
+ href = "/api_2/projects/{}".format(self.c1.id)
+
+ r0 = self.request_rest_api_with_auth(
+ href,
+ method="delete"
+ )
+ assert r0.status_code == 400
+
+ def test_delete_fail_unfinished_project_action(
+ self, f_users, f_mock_chroots,
+ f_coprs, f_users_api, f_db):
+
+ CoprsLogic.create_delete_action(self.c1)
+ self.db.session.commit()
+ href = "/api_2/projects/{}".format(self.c1.id)
+ r0 = self.request_rest_api_with_auth(
+ href,
+ method="delete"
+ )
+ assert r0.status_code == 400
+
+ def test_delete_wrong_user(
+ self, f_users, f_mock_chroots,
+ f_coprs, f_users_api, f_db):
+
+ login = self.u2.api_login
+ token = self.u2.api_token
+
+ href = "/api_2/projects/{}".format(self.c1.id)
+
+ r0 = self.request_rest_api_with_auth(
+ href,
+ method="delete",
+ login=login, token=token,
+ )
+ assert r0.status_code == 403
+