Skip to content
This repository has been archived by the owner on Jan 25, 2018. It is now read-only.

Commit

Permalink
Merge pull request #161 from davidbgk/932583-zippy-product
Browse files Browse the repository at this point in the history
Adding support for creating zippy products (bug 932583)
  • Loading branch information
davidbgk committed Nov 14, 2013
2 parents 57eb03a + c96b112 commit ae20741
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 36 deletions.
26 changes: 17 additions & 9 deletions lib/zippy/client.py
@@ -1,8 +1,10 @@
from collections import defaultdict

from django.conf import settings

from curling.lib import API

mock_data = {}
mock_data = defaultdict(dict)


class Client(object):
Expand All @@ -28,27 +30,29 @@ def __call__(self, uuid):

def get(self):
if self.uuid:
return mock_data[self.uuid]
return mock_data[self.resource_name][self.uuid]
else:
return mock_data and mock_data.values() or []
return (mock_data[self.resource_name] and
mock_data[self.resource_name].values() or [])

def post(self, data):
pk = self.last_pk + 1
id = data.get('uuid', data.get('external_id'))
data['resource_pk'] = str(pk)
data['resource_uri'] = '/{resource_name}/{pk}'.format(pk=pk,
resource_name=self.resource_name)
self.last_pk += 1
mock_data[data['uuid']] = data
return mock_data[data['uuid']]
mock_data[self.resource_name][id] = data
return mock_data[self.resource_name][id]

def put(self, data):
initial_data = mock_data[self.uuid]
initial_data = mock_data[self.resource_name][self.uuid]
initial_data.update(data)
mock_data[self.uuid] = initial_data
return mock_data[self.uuid]
mock_data[self.resource_name][self.uuid] = initial_data
return mock_data[self.resource_name][self.uuid]

def delete(self):
del mock_data[self.uuid]
del mock_data[self.resource_name][self.uuid]


class APIMock(object):
Expand All @@ -57,6 +61,10 @@ class APIMock(object):
def sellers(self, *args, **kwargs):
return APIMockObject('sellers')

@property
def products(self, *args, **kwargs):
return APIMockObject('products')


class ClientMock(object):

Expand Down
70 changes: 43 additions & 27 deletions lib/zippy/tests/test_views.py
Expand Up @@ -32,75 +32,91 @@ def test_no_reference(self):
resource_name='sellers').status_code, 404)


class TestListViews(TestCase):
class TestViews(TestCase):

def setUp(self):
self.client = Client()
self.url = reverse('zippy.api_view',
args=['reference', 'sellers'])
self.seller_uuid = 'zippy-seller-uuid'
self.product_uuid = 'zippy-product-uuid'

def test_retrieve_sellers_empty(self):
resp = self.client.get(self.url)
ok_(resp['Content-Type'].startswith('application/json'))
def url_list(self, resource_name):
return reverse('zippy.api_view', args=['reference', resource_name])

def test_create_seller(self):
uuid = 'zippy-uuid'
def url_item(self, resource_name, pk):
return reverse('zippy.api_view', args=['reference', resource_name, pk])

def create_seller(self):
seller = {
'uuid': uuid,
'uuid': self.seller_uuid,
'status': 'ACTIVE',
'name': 'John',
'email': 'jdoe@example.org',
}
resp = self.client.post(self.url, seller)
self.client.post(self.url_list('sellers'), seller)
seller.update({
'resource_pk': '1',
'resource_uri': '/sellers/1',
})
eq_(json.loads(resp.content), seller)
return seller

def delete_seller(self):
self.client.delete(self.url_item('sellers', self.seller_uuid))

class TestItemViews(TestCase):

def setUp(self):
self.client = Client()
self.uuid = 'zippy-uuid'
self.url_list = reverse('zippy.api_view',
args=['reference', 'sellers'])
class TestSellerViews(TestViews):

def url(self, pk):
return reverse('zippy.api_view',
args=['reference', 'sellers', pk])
def test_retrieve_sellers_empty(self):
self.delete_seller()
resp = self.client.get(self.url_list('sellers'))
ok_(resp['Content-Type'].startswith('application/json'))
eq_(json.loads(resp.content), [])

def create_seller(self):
def test_create_seller(self):
seller = {
'uuid': self.uuid,
'uuid': self.seller_uuid,
'status': 'ACTIVE',
'name': 'John',
'email': 'jdoe@example.org',
}
self.client.post(self.url_list, seller)
resp = self.client.post(self.url_list('sellers'), seller)
seller.update({
'resource_pk': '1',
'resource_uri': '/sellers/1',
})
return seller
eq_(json.loads(resp.content), seller)

def test_retrieve_seller(self):
seller = self.create_seller()
resp = self.client.get(self.url(self.uuid))
resp = self.client.get(self.url_item('sellers', self.seller_uuid))
eq_(json.loads(resp.content), seller)
ok_(resp['Content-Type'].startswith('application/json'))

def test_update_seller(self):
seller = self.create_seller()
new_name = 'Jack'
resp = self.client.put(self.url(self.uuid),
resp = self.client.put(self.url_item('sellers', self.seller_uuid),
json.dumps({'name': new_name}),
content_type='application/json')
seller.update({ 'name': new_name })
eq_(json.loads(resp.content), seller)

def test_delete_seller(self):
self.create_seller()
resp = self.client.delete(self.url(self.uuid))
resp = self.client.delete(self.url_item('sellers', self.seller_uuid))
eq_(resp.status_code, 200)


class TestProductViews(TestViews):

def test_create_product(self):
seller = self.create_seller()
product = {
'seller_id': seller['resource_pk'],
'external_id': self.product_uuid,
}
resp = self.client.post(self.url_list('products'), product)
product.update({
'resource_pk': '1',
'resource_uri': '/products/1',
})
eq_(json.loads(resp.content), product)
10 changes: 10 additions & 0 deletions samples/zippy-basic.py
Expand Up @@ -48,6 +48,7 @@ def __init__(self, reference_name):
}
res = client.api.sellers.post(seller)
print res
seller_id = res['resource_pk']

print 'Retrieving sellers.'
res = client.api.sellers.get()
Expand All @@ -61,6 +62,15 @@ def __init__(self, reference_name):
res = client.api.sellers(uid).put({'name': 'Jack'})
print res

external_id = str(uuid.uuid4())
print 'Creating seller product with external_id: ' + external_id
product = {
'seller_id': seller_id,
'external_id': external_id,
}
res = client.api.products.post(product)
print res

print 'Deleting the created seller.'
res = client.api.sellers(uid).delete()
print res
Expand Down

0 comments on commit ae20741

Please sign in to comment.