Sfoglia il codice sorgente

api/project: get project tag endpoint

Julen Landa Alustiza 4 anni fa
parent
commit
f6b1f497a6
2 ha cambiato i file con 90 aggiunte e 0 eliminazioni
  1. 41 0
      pagure/api/project.py
  2. 49 0
      tests/test_pagure_flask_api_project_tags.py

+ 41 - 0
pagure/api/project.py

@@ -103,6 +103,47 @@ def api_project_tags(repo, username=None, namespace=None):
     )
 
 
+@API.route("/<repo>/tag/<tag>", methods=["GET"])
+@API.route("/<namespace>/<repo>/tag/<tag>", methods=["GET"])
+@API.route("/fork/<username>/<repo>/tag/<tag>", methods=["GET"])
+@API.route("/fork/<username>/<namespace>/<repo>/tag/<tag>", methods=["GET"])
+@api_method
+def api_project_tag_view(repo, tag, username=None, namespace=None):
+    """
+    View a tag of a project
+    -----------------------
+    View a tag on project's issues or pull requests.
+
+    ::
+
+        GET /api/0/<repo>/tag/<tag>
+        GET /api/0/<repo>/tag/<tag>
+
+    ::
+        GET /api/0/fork/<username>/<repo>/tag/<tag>
+        GET /api/0/fork/<username>/<namespace>/tag/<tag>
+
+        Sample response
+        ----------------
+
+    ::
+
+        {
+            "tag": "tag1",
+            "tag_color": "DeepBlueSky"
+            "tag_description": "Our blue tag"
+        }
+
+    """
+    repo = _get_repo(repo, username, namespace)
+    _check_token(repo, project_token=False)
+    tag = _get_project_tag(repo.id, tag)
+    output = tag.to_json()
+
+    jsonout = flask.jsonify(output)
+    return jsonout
+
+
 @API.route("/<repo>/tags/new", methods=["POST"])
 @API.route("/<namespace>/<repo>/tags/new", methods=["POST"])
 @API.route("/fork/<username>/<repo>/tags/new", methods=["POST"])

+ 49 - 0
tests/test_pagure_flask_api_project_tags.py

@@ -358,3 +358,52 @@ class PagureFlaskApiProjectTagstests(tests.Modeltests):
         expected_rv = {"tags": [], "total_tags": 0}
         data = json.loads(output.get_data(as_text=True))
         self.assertDictEqual(data, expected_rv)
+
+    def test_api_project_tag_view_no_project(self):
+        """ Test the api_project_tag_view method of the flask api.  """
+        output = self.app.get("/api/0/foo/tag/tag1")
+        self.assertEqual(output.status_code, 404)
+        expected_rv = {
+            "error": "Project not found",
+            "error_code": "ENOPROJECT",
+        }
+        data = json.loads(output.get_data(as_text=True))
+        self.assertDictEqual(data, expected_rv)
+
+    def test_api_project_tag_view_wrong_tag(self):
+        """ Test the api_project_tag_view method of the flask api.  """
+        tests.create_projects(self.session)
+        tests.create_tokens(self.session)
+        tests.create_tokens_acl(self.session)
+
+        item = pagure.lib.model.TagColored(
+            tag="blue", tag_color="DeepBlueSky", project_id=1
+        )
+        self.session.add(item)
+        self.session.commit()
+        output = self.app.get("/api/0/test/tag/tag1")
+        self.assertEqual(output.status_code, 404)
+        expected_rv = {"error": "Tag not found", "error_code": "ENOTAG"}
+        data = json.loads(output.get_data(as_text=True))
+        self.assertDictEqual(data, expected_rv)
+
+    def test_api_project_tag_view(self):
+        """ Test the api_project_tag_view method of the flask api.  """
+        tests.create_projects(self.session)
+        tests.create_tokens(self.session)
+        tests.create_tokens_acl(self.session)
+
+        item = pagure.lib.model.TagColored(
+            tag="blue", tag_color="DeepBlueSky", project_id=1
+        )
+        self.session.add(item)
+        self.session.commit()
+        output = self.app.get("/api/0/test/tag/blue")
+        self.assertEqual(output.status_code, 200)
+        expected_rv = {
+            "tag": "blue",
+            "tag_color": "DeepBlueSky",
+            "tag_description": "",
+        }
+        data = json.loads(output.get_data(as_text=True))
+        self.assertDictEqual(data, expected_rv)