예제 #1
0
    def setUp(self):
        self.response = Mock()
        self.client = Mock()
        self.client.request.return_value = self.response

        self.session = Session()
        self.session.client = self.client
예제 #2
0
class SessionResourceTestCase(TestCase):
    def setUp(self):
        self.schema_url = "/schema"

        self.response = Mock()
        self.response.headers = {"content-type": "application/json; profile=%s" % self.schema_url}

        self.session = Session()

        patch.object(self.session, "request").start()
        self.session.request.return_value = self.response

    def tearDown(self):
        patch.stopall()

    @patch("pluct.session.Resource.from_response")
    @patch("pluct.session.LazySchema")
    def test_creates_resource_from_response(self, LazySchema, from_response):
        LazySchema.return_value = "fake schema"

        self.session.resource("/")

        LazySchema.assert_called_with(href=self.schema_url, session=self.session)

        from_response.assert_called_with(response=self.response, session=self.session, schema="fake schema")

    @patch("pluct.session.Schema")
    def test_creates_schema_from_response(self, Schema):
        self.session.schema("/")
        Schema.assert_called_with("/", raw_schema=self.response.json(), session=self.session)
예제 #3
0
    def setUp(self):
        self.schema_url = '/schema'

        self.response = Mock()
        self.response.headers = {
            'content-type': 'application/json; profile=%s' % self.schema_url
        }

        self.session = Session()

        patch.object(self.session, 'request').start()
        self.session.request.return_value = self.response
예제 #4
0
    def setUp(self):
        self.session = Session()

        self.url = 'http://app.com/myschema'
        self.schema = Schema(self.url,
                             raw_schema=deepcopy(SCHEMA),
                             session=self.session)
예제 #5
0
    def test_does_not_reuse_schema_on_different_sessions(self):
        other_session = Session()

        schema1 = self.create_schema(self.SCHEMA_URL)
        schema2 = self.create_schema(self.SCHEMA_URL, session=other_session)

        self.assertIsNot(schema1, schema2)
예제 #6
0
    def setUp(self):
        self.response = Mock()
        self.client = Mock()
        self.client.request.return_value = self.response

        self.session = Session()
        self.session.client = self.client
예제 #7
0
    def setUp(self):
        raw_schema = {
            'links': [
                {
                    'rel': 'item',
                    'href': '/root/{id}',
                },
                {
                    'rel': 'related',
                    'href': '/root/{slug}/{related}',
                },
                {
                    'rel': 'create',
                    'href': '/root',
                    'method': 'post',
                },
                {
                    'rel': 'list',
                    'href': '/root',
                }
            ]
        }
        data = {'id': '123', 'slug': 'slug'}

        self.session = Session()
        self.schema = Schema('/schema', raw_schema, session=self.session)
        self.resource = Resource.from_data(
            'http://much.url.com/',
            data=data, schema=self.schema, session=self.session
        )

        self.request_patcher = patch.object(self.session, 'request')
        self.request = self.request_patcher.start()
예제 #8
0
    def run(self, *args, **kwargs):
        self.session = Session()
        self.schema = LazySchema(self.HREF, session=self.session)

        with patch.object(self.session, 'request') as self.request:
            self.response = Mock()
            self.response.json.return_value = deepcopy(self.RAW_SCHEMA)
            self.request.return_value = self.response

            return super(BaseLazySchemaTestCase, self).run(*args, **kwargs)
예제 #9
0
    def setUp(self):
        self.schema_url = "/schema"

        self.response = Mock()
        self.response.headers = {"content-type": "application/json; profile=%s" % self.schema_url}

        self.session = Session()

        patch.object(self.session, "request").start()
        self.session.request.return_value = self.response
예제 #10
0
 def test_uses_original_ref_on_representation(self):
     raw_schema = {
         'properties': {
             'inner': {
                 '$ref': '/schema'
             },
         }
     }
     session = Session()
     schema = Schema('/schema', raw_schema=raw_schema, session=session)
     self.assertEqual(repr(schema), repr(raw_schema))
예제 #11
0
    def setUp(self):
        raw_schema = {
            'links': [
                {
                    'rel': 'item',
                    'href': '/root/{id}',
                },
                {
                    'rel': 'related',
                    'href': '/root/{slug}/{related}',
                },
                {
                    'rel': 'create',
                    'href': '/root',
                    'method': 'POST',
                },
                {
                    'rel': 'list',
                    'href': '/root',
                }
            ]
        }
        self.data = {'id': '123',
                     'slug': 'slug',
                     'items': [{"ide": 1},
                               {"ida": 2}]}

        self.session = Session()
        self.schema = Schema('/schema', raw_schema, session=self.session)

        self.response = Mock()
        self.response.url = 'http://example.com'

        self.profile_url = 'http://example.com/schema'

        content_type = 'application/json; profile=%s' % (self.profile_url)
        self.response.headers = {
            'content-type': content_type
        }

        self.resource = Resource.from_data(
            'http://much.url.com/',
            data=deepcopy(self.data), schema=self.schema, session=self.session
        )

        self.resource2 = Resource.from_data(
            'http://much.url.com/',
            data=deepcopy(self.data), schema=self.schema,
            session=self.session, response=self.response
        )

        self.request_patcher = patch.object(self.session, 'request')
        self.request = self.request_patcher.start()
예제 #12
0
class SessionResourceTestCase(TestCase):
    def setUp(self):
        self.schema_url = '/schema'

        self.response = Mock()
        self.response.headers = {
            'content-type': 'application/json; profile=%s' % self.schema_url
        }

        self.session = Session()

        patch.object(self.session, 'request').start()
        self.session.request.return_value = self.response

    def tearDown(self):
        patch.stopall()

    @patch('pluct.session.Resource.from_response')
    @patch('pluct.session.LazySchema')
    def test_creates_resource_from_response(self, LazySchema, from_response):
        LazySchema.return_value = 'fake schema'

        self.session.resource('/')

        LazySchema.assert_called_with(href=self.schema_url,
                                      session=self.session)

        from_response.assert_called_with(response=self.response,
                                         session=self.session,
                                         schema='fake schema')

    @patch('pluct.session.Schema')
    def test_creates_schema_from_response(self, Schema):
        self.session.schema('/')
        Schema.assert_called_with('/',
                                  raw_schema=self.response.json(),
                                  session=self.session)
예제 #13
0
 def test_uses_requests_session_as_default_client(self):
     with patch('pluct.session.RequestsSession') as client:
         Session()
         client.assert_called_with()
예제 #14
0
 def setUp(self):
     self.url = '/'
     self.session = Session()
     self.schema = Schema(self.url,
                          raw_schema=deepcopy(SCHEMA),
                          session=self.session)
예제 #15
0
 def setUp(self):
     self.session = Session()
     self.url = 'http://example.org/schema'
     self.pointer = ''
     self.href = '#'.join((self.url, self.pointer))
예제 #16
0
class SessionRequestsTestCase(TestCase):
    def setUp(self):
        self.response = Mock()
        self.client = Mock()
        self.client.request.return_value = self.response

        self.session = Session()
        self.session.client = self.client

    def test_delegates_request_to_client(self):
        self.session.request("/")
        self.client.request.assert_called_with(url="/", method="get", headers=ANY)

    def test_uses_default_timeout(self):
        self.session.timeout = 333
        self.session.request("/")
        self.client.request.assert_called_with(url="/", method="get", timeout=333, headers=ANY)

    def test_allows_custom_timeout_per_request(self):
        self.session.request("/", timeout=999)
        self.client.request.assert_called_with(url="/", method="get", timeout=999, headers=ANY)

    def test_applies_json_content_type_header(self):
        self.session.request("/")
        self.client.request.assert_called_with(url="/", method="get", headers={"content-type": "application/json"})

    def test_allows_custom_content_type_header(self):
        custom_headers = {"content-type": "application/yaml"}
        self.session.request("/", headers=custom_headers)
        self.client.request.assert_called_with(url="/", method="get", headers=custom_headers)

    def test_returns_response(self):
        response = self.session.request("/")
        self.assertIs(response, self.response)

    def test_checks_for_bad_response(self):
        self.session.request("/")
        self.response.raise_for_status.assert_called_once_with()
예제 #17
0
 def setUp(self):
     self.session = Session()
예제 #18
0
 def test_keeps_timeout(self):
     session = Session(timeout=999)
     self.assertEqual(session.timeout, 999)
예제 #19
0
class SessionRequestsTestCase(TestCase):
    def setUp(self):
        self.response = Mock()
        self.client = Mock()
        self.client.request.return_value = self.response

        self.session = Session()
        self.session.client = self.client

    def test_delegates_request_to_client(self):
        self.session.request('/')
        self.client.request.assert_called_with(url='/',
                                               method='get',
                                               headers=ANY)

    def test_uses_default_timeout(self):
        self.session.timeout = 333
        self.session.request('/')
        self.client.request.assert_called_with(url='/',
                                               method='get',
                                               timeout=333,
                                               headers=ANY)

    def test_allows_custom_timeout_per_request(self):
        self.session.request('/', timeout=999)
        self.client.request.assert_called_with(url='/',
                                               method='get',
                                               timeout=999,
                                               headers=ANY)

    def test_applies_json_content_type_header(self):
        self.session.request('/')
        self.client.request.assert_called_with(
            url='/',
            method='get',
            headers={'content-type': 'application/json'})

    def test_allows_custom_content_type_header(self):
        custom_headers = {'content-type': 'application/yaml'}
        self.session.request('/', headers=custom_headers)
        self.client.request.assert_called_with(url='/',
                                               method='get',
                                               headers=custom_headers)

    def test_returns_response(self):
        response = self.session.request('/')
        self.assertIs(response, self.response)

    def test_checks_for_bad_response(self):
        self.session.request('/')
        self.response.raise_for_status.assert_called_once_with()
예제 #20
0
 def test_allows_custom_client(self):
     custom_client = Mock()
     session = Session(client=custom_client)
     self.assertEqual(session.client, custom_client)