Skip to content

Commit

Permalink
added tests.
Browse files Browse the repository at this point in the history
fixed field filtering.
  • Loading branch information
aehlke committed Mar 2, 2011
1 parent 000afe1 commit 6964447
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 10 deletions.
12 changes: 8 additions & 4 deletions catnap/restresources.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@


class RestResource(object): class RestResource(object):
def get_data(self): def get_data(self):
'''
Adds a `url` field if this class has a `get_url` method.
'''
data = {} data = {}
if hasattr(self, 'get_url'): if hasattr(self, 'get_url'):
data['url'] = self.get_url() data['url'] = self.get_url()
Expand All @@ -13,6 +16,7 @@ class RestModelResource(RestResource):
''' '''
Represents a single object, in a queryset. Represents a single object, in a queryset.
''' '''
# If left as None, it will not filter the fields.
fields = None fields = None


def __init__(self, obj): def __init__(self, obj):
Expand All @@ -24,23 +28,23 @@ def _model_to_dict(self, obj):
ret = {} ret = {}
# If we only have a model, we only want to encode the fields. # If we only have a model, we only want to encode the fields.
for f in obj._meta.fields: for f in obj._meta.fields:
if f.attname in self.fields: if not self.fields or f.attname in self.fields:
#ret[f.attname] = _any(getattr(obj, f.attname)) #ret[f.attname] = _any(getattr(obj, f.attname))
ret[f.attname] = getattr(obj, f.attname) ret[f.attname] = getattr(obj, f.attname)
# And additionally encode arbitrary properties # And additionally encode arbitrary properties
# that had been added. # that had been added.
fields = dir(obj.__class__) + ret.keys() fields = dir(obj.__class__) + ret.keys()
add_ons = [k for k in dir(obj) if k not in fields] add_ons = [k for k in dir(obj) if k not in fields]
for k in add_ons: for k in add_ons:
if f.attname in self.fields: if not self.fields or k in self.fields:
#ret[k] = _any(getattr(obj, k)) #ret[k] = _any(getattr(obj, k))
ret[k] = getattr(obj, k) ret[k] = getattr(obj, k)
#import pdb;pdb.set_trace()
return ret return ret


def get_data(self): def get_data(self):
data = super(RestModelResource, self).get_data() data = super(RestModelResource, self).get_data()

data.update(self._model_to_dict(self.obj)) data.update(self._model_to_dict(self.obj))

return data return data



1 change: 1 addition & 0 deletions catnap/restviews.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -154,6 +154,7 @@ def get_context_data(self, object_list=None, **kwargs):
% self.__class__.__name__) % self.__class__.__name__)


context_object_name = self.get_context_object_name(self.get_queryset()) context_object_name = self.get_context_object_name(self.get_queryset())
#import pdb;pdb.set_trace()
context[context_object_name] = list( context[context_object_name] = list(
self.resource(_).get_data() self.resource(_).get_data()
for _ in context[context_object_name]) for _ in context[context_object_name])
Expand Down
File renamed without changes.
3 changes: 2 additions & 1 deletion catnap/tests/api/restresources.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class UserResource(RestModelResource):
'is_superuser', 'is_active', 'date_joined',) 'is_superuser', 'is_active', 'date_joined',)


def get_data(self): def get_data(self):
data = super(UserResource, self).get_data() return super(UserResource, self).get_data()






Expand All @@ -21,6 +21,7 @@ def get_url(self):
def get_data(self): def get_data(self):
data = super(DeckResource, self).get_data() data = super(DeckResource, self).get_data()
data['owner'] = UserResource(self.obj.owner).get_data() data['owner'] = UserResource(self.obj.owner).get_data()
return data






Expand Down
33 changes: 31 additions & 2 deletions catnap/tests/api/tests.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -7,12 +7,19 @@


from django.test import TestCase from django.test import TestCase
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse

from django.utils import simplejson as json
from models import Deck
from restresources import DeckResource, UserResource
from catnap.restresources import RestModelResource


USERNAME = 'alex' USERNAME = 'alex'
PASSWORD = 'f' PASSWORD = 'f'


class RestResourcesIntegrationsTest(TestCase): def res_to_json(http_res):
return json.loads(http_res.content)


class RestResourceIntegrationsTest(TestCase):
fixtures = ['testdata.json'] fixtures = ['testdata.json']


def setUp(self): def setUp(self):
Expand All @@ -22,9 +29,31 @@ def test_entry_point(self):
res = self.client.get(reverse('api-entry_point')) res = self.client.get(reverse('api-entry_point'))
self.assertEqual(res.status_code, 200) self.assertEqual(res.status_code, 200)


data = res_to_json(res)
self.assertTrue('deck_list_url' in data.keys())
self.assertEqual(data['deck_list_url'], reverse('api-deck_list'))

def test_deck_list(self): def test_deck_list(self):
res = self.client.get(reverse('api-deck_list')) res = self.client.get(reverse('api-deck_list'))
self.assertEqual(res.status_code, 200) self.assertEqual(res.status_code, 200)


data = res_to_json(res)
self.assertTrue('deck_list' in data.keys())
deck_list = data['deck_list']
self.assertTrue(len(deck_list) >= 1)
self.assertTrue('name' in deck_list[0].keys())

owner = deck_list[0]['owner']
self.assertTrue('password' not in owner.keys())


class RestResourcesTest(TestCase):
fixtures = ['testdata.json']

def test_deck_resource(self):
deck = Deck.objects.get(id=1)
resource = DeckResource(deck)






4 changes: 1 addition & 3 deletions catnap/tests/api/views.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def get(self, request):
List the available top-level resource URLs. List the available top-level resource URLs.
''' '''
context = { context = {
'decks_url': reverse('api-deck_list'), 'deck_list_url': reverse('api-deck_list'),
#'users': reverse('rest-users'), #'users': reverse('rest-users'),
} }
return self.render_to_response(context) return self.render_to_response(context)
Expand All @@ -64,8 +64,6 @@ class Deck(DetailView, MyRestView):


def get_object(self): def get_object(self):
return get_object_or_404(pk=self.kwargs.get('pk')) return get_object_or_404(pk=self.kwargs.get('pk'))
#deck.url = reverse('api-deck', args=[deck.id])
#return deck






0 comments on commit 6964447

Please sign in to comment.