def test_save(self): # Return an object with id for a post(save) request. self.http.respond_to('POST', '/stores.json', self.json_headers, util.to_json(self.general_store)) # Return an object for a put request. self.http.respond_to('PUT', '/stores/1.json', self.json_headers, util.to_json(self.store_update, root='store')) self.store.format = formats.JSONFormat store = self.store(self.store_new) store.save() self.assertEqual(self.general_store, store.attributes) store.manager_id = 3 store.save()
def test_find_by_id(self): # Return a single person for a find(id=<id>) call self.http.respond_to('GET', '/people/1.json', {}, util.to_json(self.arnold, root='person')) arnold = self.person.find(1) self.assertEqual(self.arnold, arnold.attributes)
def test_find_with_prefix_and_query_options(self): self.http.respond_to('GET', '/stores/1/people.json?name=Ralph', {}, util.to_json([], root='people')) # Query & prefix options self.person._site = 'http://localhost/stores/$store_id/' nobody = self.person.find(store_id=1, name='Ralph') self.assertEqual([], nobody)
def test_save_should_clear_errors(self): self.http.respond_to('POST', '/stores.json', self.json_headers, util.to_json(self.general_store)) store = self.store(self.store_new) store.errors.add_to_base('bad things!') store.save() self.assertEqual(0, store.errors.size)
def test_get(self): person = util.to_json({'id': 1, 'name': 'Matz'}, root='person') self.http.respond_to( 'GET', 'http://localhost/people/1.json', {}, person) self.connection.format = formats.JSONFormat response = self.connection.get('/people/1.json') self.assertEqual(response['name'], 'Matz')
def test_find_should_handle_long_query_args(self): self.http.respond_to( 'GET', '/people.json?employee_id=12345', {}, util.to_json([self.arnold], root='people')) for int_type in six.integer_types: arnold = self.person.find_first(employee_id=int_type(12345)) self.assertEqual(self.arnold, arnold.attributes)
def test_prefix_format(self): self.http.respond_to( 'GET', '/people.json?name=Ralph', {}, util.to_json([], root='people')) self.person.prefix_source = '/${store_id}/' nobody = self.person.find(name='Ralph') self.assertEqual([], nobody)
def test_find_should_handle_dictionary_query_args_with_array_value(self): query = urllib.parse.urlencode({'vars[key][]': ['val1', 'val2']}, True) self.http.respond_to( 'GET', '/people.json?%s' % query, {}, util.to_json([self.arnold], root='people')) arnold = self.person.find_first(vars={'key': ['val1', 'val2']}) self.assertEqual(self.arnold, arnold.attributes)
def test_find_should_handle_array_query_args(self): query = urllib.parse.urlencode({'vars[]': ['a', 'b', 'c']}, True) self.http.respond_to( 'GET', '/people.json?%s' % query, {}, util.to_json([self.arnold], root='people')) arnold = self.person.find_first(vars=['a', 'b', 'c']) self.assertEqual(self.arnold, arnold.attributes)
def test_reload(self): self.http.respond_to( 'GET', '/people/1.json', {}, util.to_json(self.arnold, root='person')) arnold = self.person.find(1) arnold.name = 'someone else' arnold.reload() self.assertEqual(self.arnold, arnold.attributes)
def test_find_by_id(self): # Return a single person for a find(id=<id>) call self.http.respond_to( 'GET', '/people/1.json', {}, util.to_json(self.arnold, root='person')) arnold = self.person.find(1) self.assertEqual(self.arnold, arnold.attributes)
def test_save(self): # Return an object with id for a post(save) request. self.http.respond_to( 'POST', '/stores.json', self.json_headers, util.to_json(self.general_store)) # Return an object for a put request. self.http.respond_to( 'PUT', '/stores/1.json', self.json_headers, util.to_json(self.store_update, root='store')) self.store.format = formats.JSONFormat store = self.store(self.store_new) store.save() self.assertEqual(self.general_store, store.attributes) store.manager_id = 3 store.save()
def test_get(self): person = util.to_json({'id': 1, 'name': 'Matz'}, root='person') self.http.respond_to('GET', 'http://localhost/people/1.json', {}, person) self.connection.format = formats.JSONFormat response = self.connection.get('/people/1.json') self.assertEqual(response['name'], 'Matz')
def test_reload(self): self.http.respond_to('GET', '/people/1.json', {}, util.to_json(self.arnold, root='person')) arnold = self.person.find(1) arnold.name = 'someone else' arnold.reload() self.assertEqual(self.arnold, arnold.attributes)
def test_set_prefix_source(self): self.http.respond_to( 'GET', '/stores/1/people.json?name=Ralph', {}, util.to_json([], root='people')) self.person.prefix_source = '/stores/${store_id}/' nobody = self.person.find(store_id=1, name='Ralph') self.assertEqual([], nobody)
def test_find_should_handle_dictionary_query_args_with_array_value(self): query = urllib.urlencode({'vars[key][]': ['val1', 'val2']}, True) self.http.respond_to( 'GET', '/people.json?%s' % query, {}, util.to_json([self.arnold], root='people')) arnold = self.person.find_first(vars={'key': ['val1', 'val2']}) self.assertEqual(self.arnold, arnold.attributes)
def test_find_should_handle_array_query_args(self): query = urllib.urlencode({'vars[]': ['a', 'b', 'c']}, True) self.http.respond_to( 'GET', '/people.json?%s' % query, {}, util.to_json([self.arnold], root='people')) arnold = self.person.find_first(vars=['a', 'b', 'c']) self.assertEqual(self.arnold, arnold.attributes)
def test_find_with_query_options(self): # Return a single-item people list for a find() call with kwargs self.http.respond_to('GET', '/people.json?name=Arnold', {}, util.to_json([self.arnold], root='people')) # Query options only arnold = self.person.find(name='Arnold')[0] self.assertEqual(self.arnold, arnold.attributes)
def test_find_with_prefix_and_query_options(self): self.http.respond_to( 'GET', '/stores/1/people.json?name=Ralph', {}, util.to_json([], root='people')) # Query & prefix options self.person._site = 'http://localhost/stores/$store_id/' nobody = self.person.find(store_id=1, name='Ralph') self.assertEqual([], nobody)
def test_find_with_query_options(self): # Return a single-item people list for a find() call with kwargs self.http.respond_to( 'GET', '/people.json?name=Arnold', {}, util.to_json([self.arnold], root='people')) # Query options only arnold = self.person.find(name='Arnold')[0] self.assertEqual(self.arnold, arnold.attributes)
def test_save_should_clear_errors(self): self.http.respond_to( 'POST', '/stores.json', self.json_headers, util.to_json(self.general_store)) store = self.store(self.store_new) store.errors.add_to_base('bad things!') store.save() self.assertEqual(0, store.errors.size)
def test_find_with_prefix_options(self): # Paths for prefix_options related requests self.http.respond_to('GET', '/stores/1/people.json', {}, util.to_json([self.sam], root='people')) # Prefix options only self.person._site = 'http://localhost/stores/$store_id/' sam = self.person.find(store_id=1)[0] self.assertEqual(self.sam, sam.attributes)
def test_find(self): # Return a list of people for a find method call self.http.respond_to( 'GET', '/people.json', {}, util.to_json([self.arnold, self.eb], root='people')) people = self.person.find() self.assertEqual([self.arnold, self.eb], [p.attributes for p in people])
def test_find_with_prefix_options(self): # Paths for prefix_options related requests self.http.respond_to( 'GET', '/stores/1/people.json', {}, util.to_json([self.sam], root='people')) # Prefix options only self.person._site = 'http://localhost/stores/$store_id/' sam = self.person.find(store_id=1)[0] self.assertEqual(self.sam, sam.attributes)
def test_find_one(self): # Return an object for a specific one-off url self.http.respond_to('GET', '/what_kind_of_soup.json', {}, util.to_json(self.soup, root='soup')) class Soup(activeresource.ActiveResource): _site = 'http://localhost' soup = Soup.find_one(from_='/what_kind_of_soup.json') self.assertEqual(self.soup, soup.attributes)
def test_find_one(self): # Return an object for a specific one-off url self.http.respond_to( 'GET', '/what_kind_of_soup.json', {}, util.to_json(self.soup, root='soup')) class Soup(activeresource.ActiveResource): _site = 'http://localhost' soup = Soup.find_one(from_='/what_kind_of_soup.json') self.assertEqual(self.soup, soup.attributes)
def setUp(self): '''Create test objects.''' matz = {'id': 1, 'name': 'Matz'} david = {'id': 2, 'name': 'David'} self.matz = util.to_json(matz, root='person') self.david = util.to_json(david, root='person') self.people = util.to_json([matz, david], root='people') self.people_single = util.to_json( [matz], root='people-single-elements') self.people_empty = util.to_json([], root='people-empty-elements') http_fake.initialize() self.http = http_fake.TestHandler self.http.site = 'http://localhost' self.http.set_response(Error('Bad request')) self.zero_length_content_headers = {'Content-Length': '0', 'Content-Type': 'application/json'} self.header = {'Key': 'value'} self.connection = connection.Connection(self.http.site)
def setUp(self): '''Create test objects.''' matz = {'id': 1, 'name': 'Matz'} david = {'id': 2, 'name': 'David'} self.matz = util.to_json(matz, root='person') self.david = util.to_json(david, root='person') self.people = util.to_json([matz, david], root='people') self.people_single = util.to_json([matz], root='people-single-elements') self.people_empty = util.to_json([], root='people-empty-elements') http_fake.initialize() self.http = http_fake.TestHandler self.http.site = 'http://localhost' self.http.set_response(Error('Bad request')) self.zero_length_content_headers = { 'Content-Length': '0', 'Content-Type': 'application/json' } self.header = {'Key': 'value'} self.connection = connection.Connection(self.http.site)
def setUp(self): """Create test objects.""" self.arnold = {'id': 1, 'name': 'Arnold Ziffel'} self.eb = {'id': 2, 'name': 'Eb Dawson'} self.sam = {'id': 3, 'name': 'Sam Drucker'} self.soup = {'id': 1, 'name': 'Hot Water Soup'} self.store_new = {'name': 'General Store'} self.general_store = {'id': 1, 'name': 'General Store'} self.store_update = {'manager_id': 3, 'id': 1, 'name': 'General Store'} self.xml_headers = {'Content-type': 'application/xml'} self.json_headers = {'Content-type': 'application/json'} self.matz = util.to_json({ 'id': 1, 'name': 'Matz' }, root='person').encode('utf-8') self.matz_deep = util.to_json( { 'id': 1, 'name': 'Matz', 'other': 'other' }, root='person').encode('utf-8') self.matz_array = util.to_json([{ 'id': 1, 'name': 'Matz' }], root='people').encode('utf-8') self.ryan = util.to_json({'name': 'Ryan'}, root='person') self.addy = util.to_json({ 'id': 1, 'street': '12345 Street' }, root='address') self.addy_deep = util.to_json( { 'id': 1, 'street': '12345 Street', 'zip': "27519" }, root='address') http_fake.initialize() # Fake all http requests self.http = http_fake.TestHandler self.http.set_response(Error('Bad request')) self.http.site = 'http://localhost' self.zero_length_content_headers = { 'Content-length': '0', 'Content-type': 'application/json' } class Person(activeresource.ActiveResource): _site = 'http://localhost' self.person = Person self.store = Store self.address = Address
def setUp(self): """Create test objects.""" self.arnold = {'id': 1, 'name': 'Arnold Ziffel'} self.eb = {'id': 2, 'name': 'Eb Dawson'} self.sam = {'id': 3, 'name': 'Sam Drucker'} self.soup = {'id': 1, 'name': 'Hot Water Soup'} self.store_new = {'name': 'General Store'} self.general_store = {'id': 1, 'name': 'General Store'} self.store_update = {'manager_id': 3, 'id': 1, 'name':'General Store'} self.xml_headers = {'Content-type': 'application/xml'} self.json_headers = {'Content-type': 'application/json'} self.matz = util.to_json( {'id': 1, 'name': 'Matz'}, root='person') self.matz_deep = util.to_json( {'id': 1, 'name': 'Matz', 'other': 'other'}, root='person') self.matz_array = util.to_json( [{'id': 1, 'name': 'Matz'}], root='people') self.ryan = util.to_json( {'name': 'Ryan'}, root='person') self.addy = util.to_json( {'id': 1, 'street': '12345 Street'}, root='address') self.addy_deep = util.to_json( {'id': 1, 'street': '12345 Street', 'zip': "27519" }, root='address') http_fake.initialize() # Fake all http requests self.http = http_fake.TestHandler self.http.set_response(Error('Bad request')) self.http.site = 'http://localhost' self.zero_length_content_headers = {'Content-length': '0', 'Content-type': 'application/json'} class Person(activeresource.ActiveResource): _site = 'http://localhost' self.person = Person self.store = Store self.address = Address
def encode(data): """Convert a dictionary to a resource string.""" log = logging.getLogger('pyactiveresource.format') log.debug('encoding resource: %r', data) return util.to_json(data).encode('utf-8')
def test_to_json_should_allow_utf8_encoded_strings(self): json = util.to_json({'data': u'\u00e9'.encode('utf-8')}) self.assert_('\u00e9' in json)
def test_to_json_should_allow_unicode(self): json = util.to_json({'data': u'\u00e9'}) self.assert_('\u00e9' in json or '\\u00e9' in json)
def to_json(self, root=True): """Convert the object to a json string.""" if root == True: root = self._singular return util.to_json(self.to_dict(), root=root).encode('utf-8')
def test_find_should_handle_unicode_query_args(self): self.http.respond_to('GET', '/people.json?name=%C3%83%C3%A9', {}, util.to_json([self.arnold], root='people')) arnold = self.person.find_first(name=u'\xc3\xe9') self.assertEqual(self.arnold, arnold.attributes)
def test_find_should_handle_unicode_query_args(self): self.http.respond_to( 'GET', '/people.json?name=%C3%83%C3%A9', {}, util.to_json([self.arnold], root='people')) arnold = self.person.find_first(name=u'\xc3\xe9') self.assertEqual(self.arnold, arnold.attributes)
def to_json(self, root=True): """Convert the object to a json string.""" if root == True: root = self._singular return util.to_json(self.to_dict(), root=root)
def encode(data): """Convert a dictionary to a resource string.""" log = logging.getLogger('pyactiveresource.format') log.debug('encoding resource: %r', data) return util.to_json(data)