116 lines
4.0 KiB
Python
116 lines
4.0 KiB
Python
from django.contrib.auth.models import User
|
|
from snipts.models import Snipt
|
|
from tastypie.models import ApiKey
|
|
from tastypie.test import ResourceTestCase
|
|
|
|
|
|
class SniptResourceTest(ResourceTestCase):
|
|
fixtures = ["test_entries.json"]
|
|
|
|
def setUp(self):
|
|
super(SniptResourceTest, self).setUp()
|
|
|
|
# Johnny
|
|
self.johnny = User.objects.create_user('johnny', 'johnny@snipt.net',
|
|
'password')
|
|
ApiKey.objects.get_or_create(user=self.johnny)
|
|
self.johnny_auth = self.create_apikey(self.johnny,
|
|
self.johnny.api_key.key)
|
|
self.johnny_private = Snipt(title='Private snipt for Johnny',
|
|
lexer='text',
|
|
public=False,
|
|
user=self.johnny)
|
|
self.johnny_public = Snipt(title='Public snipt for Johnny',
|
|
lexer='text',
|
|
public=True,
|
|
user=self.johnny)
|
|
self.johnny_private.save()
|
|
self.johnny_public.save()
|
|
|
|
# Bob
|
|
self.bob = User.objects.create_user('bob', 'bob@snipt.net', 'password')
|
|
ApiKey.objects.get_or_create(user=self.bob)
|
|
self.bob_auth = self.create_apikey(self.bob, self.bob.api_key.key)
|
|
self.bob_private = Snipt(title='Private snipt for Bob',
|
|
lexer='text',
|
|
public=False,
|
|
user=self.bob)
|
|
self.bob_public = Snipt(title='Public snipt for Bob',
|
|
lexer='text',
|
|
public=True,
|
|
user=self.bob)
|
|
self.bob_private.save()
|
|
self.bob_public.save()
|
|
|
|
def test_get_private_list(self):
|
|
|
|
resp = self.api_client.get(
|
|
"/api/private/snipt/", format="json", authentication=self.johnny_auth
|
|
)
|
|
|
|
self.assertHttpOK(resp)
|
|
self.assertValidJSONResponse(resp)
|
|
self.assertEqual(len(self.deserialize(resp)["objects"]), 2)
|
|
|
|
def test_get_private_detail(self):
|
|
|
|
resp = self.api_client.get(
|
|
"/api/private/snipt/{}/".format(self.johnny_private.pk),
|
|
format="json",
|
|
authentication=self.johnny_auth,
|
|
)
|
|
|
|
self.assertHttpOK(resp)
|
|
self.assertValidJSONResponse(resp)
|
|
self.assertEqual(self.deserialize(resp)["key"], self.johnny_private.key)
|
|
|
|
# Unauthenticated request.
|
|
resp = self.api_client.get(
|
|
"/api/private/snipt/{}/".format(self.johnny_private.pk), format="json"
|
|
)
|
|
self.assertHttpUnauthorized(resp)
|
|
|
|
# Unauthorized request.
|
|
resp = self.api_client.get(
|
|
"/api/private/snipt/{}/".format(self.johnny_private.pk),
|
|
format="json",
|
|
authentication=self.bob_auth,
|
|
)
|
|
self.assertHttpUnauthorized(resp)
|
|
|
|
def test_post_private_list(self):
|
|
|
|
new_snipt = {
|
|
'title': 'A new private snipt.',
|
|
'lexer': 'text',
|
|
'public': False,
|
|
}
|
|
|
|
resp = self.api_client.post(
|
|
"/api/private/snipt/",
|
|
data=new_snipt,
|
|
format="json",
|
|
authentication=self.johnny_auth,
|
|
)
|
|
|
|
self.assertHttpCreated(resp)
|
|
self.assertEqual(Snipt.objects.count(), 5)
|
|
|
|
resp = self.api_client.get(
|
|
"/api/private/snipt/", format="json", authentication=self.johnny_auth
|
|
)
|
|
self.assertEqual(len(self.deserialize(resp)["objects"]), 3)
|
|
|
|
resp = self.api_client.get("/api/public/snipt/", format="json")
|
|
self.assertEqual(len(self.deserialize(resp)["objects"]), 2)
|
|
|
|
def test_get_public_list(self):
|
|
|
|
self.assertEqual(Snipt.objects.count(), 4)
|
|
|
|
resp = self.api_client.get("/api/public/snipt/", format="json")
|
|
|
|
self.assertHttpOK(resp)
|
|
self.assertValidJSONResponse(resp)
|
|
self.assertEqual(len(self.deserialize(resp)["objects"]), 2)
|