Пример #1
0
 def test_generate_field_for_endpoint_func_url_params(self):
     """
     Tests that url params are not a part of the
     fields returned.
     """
     fields_method = mock.Mock(return_value=[mock.Mock(arg_type=input_categories.URL_PARAMS)])
     endpoint_func = mock.Mock(fields=fields_method)
     adapter = SirenAdapter(mock.MagicMock())
     fields_found = adapter.generate_fields_for_endpoint_funct(endpoint_func)
     self.assertListEqual(fields_found, [])
Пример #2
0
    def test_generate_entity_not_all_pks(self):
        class Fake(ResourceBase):
            pks = ('id', )

        f = Fake(properties=dict(val='something'))
        adapter = SirenAdapter(f)
        resp = adapter.generate_entity(f, 'blah', True)
        # Ensure that it is an empty generator
        for r in resp:
            assert False
Пример #3
0
    def test_generate_entity_not_all_pks(self):
        class Fake(ResourceBase):
            pks = ('id',)

        f = Fake(properties=dict(val='something'))
        adapter = SirenAdapter(f)
        resp = adapter.generate_entity(f, 'blah', True)
        # Ensure that it is an empty generator
        for r in resp:
            assert False
Пример #4
0
    def test_generate_fields_for_endpoint_func_empty_no_fields(self):
        """
        Tests that an empty list is returned if
        the fields cannot be found.
        """
        def fake(*args, **kwargs):
            return

        adapter = SirenAdapter(object())
        func_fields = adapter.generate_fields_for_endpoint_funct(fake)
        self.assertListEqual([], func_fields)
Пример #5
0
    def test_generate_fields_for_endpoint_func_empty_no_fields(self):
        """
        Tests that an empty list is returned if
        the fields cannot be found.
        """
        def fake(*args, **kwargs):
            return

        adapter = SirenAdapter(object())
        func_fields = adapter.generate_fields_for_endpoint_funct(fake)
        self.assertListEqual([], func_fields)
Пример #6
0
 def test_generate_field_for_endpoint_func_url_params(self):
     """
     Tests that url params are not a part of the
     fields returned.
     """
     fields_method = mock.Mock(
         return_value=[mock.Mock(arg_type=input_categories.URL_PARAMS)])
     endpoint_func = mock.Mock(fields=fields_method)
     adapter = SirenAdapter(mock.MagicMock())
     fields_found = adapter.generate_fields_for_endpoint_funct(
         endpoint_func)
     self.assertListEqual(fields_found, [])
Пример #7
0
    def test_list_relationship_entity(self):
        """
        Tests a List entity entity
        """
        class Resource(ResourceBase):
            _pks = ['id']
            _relationships = [ListRelationship('related', relation='Resource')]

        props = dict(id=1, related=[dict(id=2), dict(id=3)])
        res = Resource(properties=props)
        adapter = SirenAdapter(res)
        entities = adapter.get_entities()
        self.assertEqual(len(entities), 2)
Пример #8
0
 def test_list_relationship_entity(self):
     """
     Tests a List entity entity
     """
     class Resource(ResourceBase):
         _pks = ['id']
         _relationships = [
             ListRelationship('related', relation='Resource')
         ]
     props = dict(id=1, related=[dict(id=2), dict(id=3)])
     res = Resource(properties=props)
     adapter = SirenAdapter(res)
     entities = adapter.get_entities()
     self.assertEqual(len(entities), 2)
Пример #9
0
    def test_relationship_single(self):
        class RelationshipResource(ResourceBase):
            _relationships = [
                Relationship('first_link', relation='RelatedResource'),
                Relationship('second_link',
                             relation='RelatedResource',
                             embedded=True)
            ]

        class RelatedResource(ResourceBase):
            pks = ['id']

        properties = dict(first_link=dict(id=1, prop='another'),
                          second_link=dict(id=2, prop='value'))
        lr = RelationshipResource(properties=properties)
        adapter = SirenAdapter(lr)
        data = json.loads(adapter.formatted_body)
        entities = data['entities']
        has_second = False
        has_first = False
        for ent in entities:
            if 'second_link' in ent['rel']:
                self.assertIn('properties', ent)
                self.assertEqual(ent['properties']['id'], 2)
                self.assertEqual(ent['properties']['prop'], 'value')
                has_second = True
            elif 'first_link' in ent['rel']:
                assert 'properties' not in ent
                self.assertEqual(ent['href'], '/related_resource/1')
                has_first = True
        self.assertTrue(has_first)
        self.assertTrue(has_second)
Пример #10
0
    def test_links_single(self):
        """
        Tests getting the links attribute for
        """
        class LinkResource(ResourceBase):
            _links = [Relationship('first_link', relation='RelatedResource')]

        class RelatedResource(ResourceBase):
            pks = ['id']

        meta = dict(links=dict(first_link=dict(id=1), ignored_link=dict()))

        lr = LinkResource(meta=meta)
        adapter = SirenAdapter(lr)
        data = json.loads(adapter.formatted_body)
        links = data['links']
        self.assertEqual(len(links), 2)

        first_link = None
        self_ref = None
        for link in links:
            if 'self' in link['rel']:
                self_ref = link['href']
            elif 'first_link' in link['rel']:
                first_link = link['href']
        self.assertIsNotNone(self_ref)
        self.assertIsNotNone(first_link)
        self.assertEqual(self_ref, '/link_resource')
        self.assertEqual(first_link, '/related_resource/1')
Пример #11
0
 def setUp(self):
     HelloWorldViewset = get_refreshed_helloworld_viewset()
     self.resource = HelloWorldViewset.hello(
         RequestContainer(query_args={
             'content': 'hello',
             'related': 'world'
         }))
     self.adapter = SirenAdapter(self.resource,
                                 base_url='http://localhost:')
     self.data = json.loads(self.adapter.formatted_body)
Пример #12
0
    def test_empty_response(self):
        """
        Tests whether an empty body is returned when the status_code
        is 204
        """
        class T1(ResourceBase):
            _resource_name = 'blah'

        res = T1(properties=dict(x='something'), status_code=204)
        adapter = SirenAdapter(res)
        self.assertEqual(adapter.formatted_body, '')
Пример #13
0
 def test_format_exception(self):
     exc = RestException('blah blah', status_code=458)
     json_dump, content_type, status_code = SirenAdapter.format_exception(exc)
     data = json.loads(json_dump)
     self.assertEqual(SirenAdapter.formats[0], content_type)
     self.assertEqual(status_code, 458)
     self.assertIn('properties', data)
     self.assertIn('class', data)
     self.assertIn('actions', data)
     self.assertIn('links', data)
     self.assertIn('entities', data)
     self.assertEqual(data['properties']['message'], 'blah blah')
Пример #14
0
 def test_format_exception(self):
     exc = RestException('blah blah', status_code=458)
     json_dump, content_type, status_code = SirenAdapter.format_exception(
         exc)
     data = json.loads(json_dump)
     self.assertEqual(SirenAdapter.formats[0], content_type)
     self.assertEqual(status_code, 458)
     self.assertIn('properties', data)
     self.assertIn('class', data)
     self.assertIn('actions', data)
     self.assertIn('links', data)
     self.assertIn('entities', data)
     self.assertEqual(data['properties']['message'], 'blah blah')
Пример #15
0
 def test_siren_adapter_formatted_body(self):
     adapter = SirenAdapter(self.resource)
     for i in six.moves.range(self.runs):
         x = adapter.formatted_body
Пример #16
0
 def test_format_request(self):
     """Dumb test for format_request"""
     request = RequestContainer()
     response = SirenAdapter.format_request(request)
     self.assertIs(response, request)
Пример #17
0
 def test_format_request(self):
     """Dumb test for format_request"""
     request = RequestContainer()
     response = SirenAdapter.format_request(request)
     self.assertIs(response, request)
Пример #18
0
 def test_extra_headers(self):
     adapter = SirenAdapter(None)
     self.assertEqual(adapter.extra_headers,
                      {'Content-Type': 'application/vnd.siren+json'})