From 3c8bd177b24cbc53dba9ebc8a03f83370e409c4f Mon Sep 17 00:00:00 2001 From: Jessica Tallon Date: Sat, 12 Jul 2014 08:42:39 +0100 Subject: [PATCH] Add test for API object endpoint --- mediagoblin/db/models.py | 11 +++++++++++ mediagoblin/federation/routing.py | 2 +- mediagoblin/federation/views.py | 6 +++--- mediagoblin/tests/test_api.py | 29 +++++++++++++++++++++++++++++ 4 files changed, 44 insertions(+), 4 deletions(-) diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py index 27ca74e0..0507161e 100644 --- a/mediagoblin/db/models.py +++ b/mediagoblin/db/models.py @@ -461,6 +461,17 @@ class MediaEntry(Base, MediaEntryMixin): "pump_io": { "shared": False, }, + "links": { + "self": { + "href": request.urlgen( + "mediagoblin.federation.object", + objectType=self.objectType, + slug=self.slug, + qualified=True + ), + }, + + } } if self.title: diff --git a/mediagoblin/federation/routing.py b/mediagoblin/federation/routing.py index b9cc4e2e..544edc68 100644 --- a/mediagoblin/federation/routing.py +++ b/mediagoblin/federation/routing.py @@ -51,7 +51,7 @@ add_route( # object endpoints add_route( "mediagoblin.federation.object", - "/api//", + "/api//", "mediagoblin.federation.views:object" ) add_route( diff --git a/mediagoblin/federation/views.py b/mediagoblin/federation/views.py index c2b02ec0..af81cbcb 100644 --- a/mediagoblin/federation/views.py +++ b/mediagoblin/federation/views.py @@ -275,16 +275,16 @@ def feed(request): def object(request, raw_obj=False): """ Lookup for a object type """ object_type = request.matchdict["objectType"] - uuid = request.matchdict["uuid"] + slug = request.matchdict["slug"] if object_type not in ["image"]: error = "Unknown type: {0}".format(object_type) # not sure why this is 404, maybe ask evan. Maybe 400? return json_response({"error": error}, status=404) - media = MediaEntry.query.filter_by(slug=uuid).first() + media = MediaEntry.query.filter_by(slug=slug).first() if media is None: # no media found with that uuid - error = "Can't find a {0} with ID = {1}".format(object_type, uuid) + error = "Can't find a {0} with ID = {1}".format(object_type, slug) return json_response({"error": error}, status=404) if raw_obj: diff --git a/mediagoblin/tests/test_api.py b/mediagoblin/tests/test_api.py index 38d4c0d5..07c34d04 100644 --- a/mediagoblin/tests/test_api.py +++ b/mediagoblin/tests/test_api.py @@ -178,6 +178,35 @@ class TestAPI(object): # Assert that we've got a 403 assert "403 FORBIDDEN" in excinfo.value.message + def test_object_endpoint(self, test_app): + """ Tests that object can be looked up at endpoint """ + # Post an image + response, data = self._upload_image(test_app, GOOD_JPG) + response, data = self._post_image_to_feed(test_app, data) + + # Now lookup image to check that endpoint works. + image = data["object"] + + assert "links" in image + assert "self" in image["links"] + + # Get URI and strip testing host off + object_uri = image["links"]["self"]["href"] + object_uri = object_uri.replace("http://localhost:80", "") + + with mock.patch("mediagoblin.decorators.oauth_required", new_callable=self.mocked_oauth_required): + request = test_app.get(object_uri) + + image = json.loads(request.body) + entry = MediaEntry.query.filter_by(id=image["id"]).first() + + assert request.status_code == 200 + assert entry.id == image["id"] + + assert "image" in image + assert "fullImage" in image + assert "pump_io" in image + assert "links" in image def test_post_comment(self, test_app): """ Tests that I can post an comment media """ -- 2.25.1