regluit/api/tests.py

112 lines
4.4 KiB
Python
Raw Normal View History

2011-09-16 02:05:47 +00:00
import json
from regluit.utils.localdatetime import now
2011-10-10 19:39:25 +00:00
from decimal import Decimal
from django.test import TestCase
2011-09-16 02:05:47 +00:00
from django.test.client import Client
from django.contrib.auth.models import User
2011-09-16 02:05:47 +00:00
from regluit.core import bookloader, models
import regluit.core.isbn
2011-09-16 02:05:47 +00:00
class ApiTests(TestCase):
work_id=None
2011-09-16 02:05:47 +00:00
def setUp(self):
edition = bookloader.add_by_isbn_from_google(isbn='0441007465')
self.work_id=edition.work.id
2011-09-16 02:05:47 +00:00
campaign = models.Campaign.objects.create(
name=edition.work.title,
work=edition.work,
description='Test Campaign',
deadline=now(),
2011-10-10 19:39:25 +00:00
target=Decimal('1000.00'),
2011-09-16 02:05:47 +00:00
)
self.user = User.objects.create_user('test', 'test@example.com', 'testpass')
2011-09-16 02:05:47 +00:00
self.client = Client()
def test_user(self):
self.assertEqual(User.objects.all().count(), 1)
self.assertTrue(User.objects.all()[0].api_key.key)
def test_no_auth(self):
2011-09-16 02:05:47 +00:00
r = self.client.get('/api/v1/campaign/', data={'format': 'json'})
self.assertEqual(r.status_code, 401)
def test_campaigns(self):
r = self.client.get('/api/v1/campaign/', data={
'format': 'json',
'username': self.user.username,
'api_key': self.user.api_key.key
})
2011-09-16 02:05:47 +00:00
self.assertEqual(r.status_code, 200)
j = json.loads(r.content)
self.assertEqual(len(j['objects']), 1)
self.assertEqual(j['objects'][0]['name'], 'Neuromancer')
self.assertEqual(j['objects'][0]['work'], '/api/v1/work/%s/' % self.work_id)
resource_uri=j['objects'][0]['resource_uri']
r = self.client.get( resource_uri, data={
'format': 'json',
'username': self.user.username,
'api_key': self.user.api_key.key
})
2011-09-16 02:05:47 +00:00
self.assertEqual(r.status_code, 200)
j = json.loads(r.content)
self.assertEqual(j['name'], 'Neuromancer')
self.assertEqual(j['work'], '/api/v1/work/%s/' % self.work_id)
2011-09-16 02:05:47 +00:00
def test_campaign_lookup_by_isbn(self):
r = self.client.get('/api/v1/campaign/', data={
'format': 'json',
'work__identifiers__value': regluit.core.isbn.convert_10_to_13('0441007465'),
'work__identifiers__type': 'isbn',
'username': self.user.username,
'api_key': self.user.api_key.key
})
2011-09-16 02:05:47 +00:00
self.assertEqual(r.status_code, 200)
j = json.loads(r.content)
self.assertEqual(len(j['objects']), 1)
self.assertEqual(j['objects'][0]['name'], 'Neuromancer')
self.assertEqual(j['meta']['logged_in_username'], None)
self.assertEqual(j['objects'][0]['in_wishlist'], False)
def test_identifier_lookup(self):
r = self.client.get('/api/v1/identifier/', data={
'format': 'json',
'value': regluit.core.isbn.convert_10_to_13('0441007465'),
'type': 'isbn',
'username': self.user.username,
'api_key': self.user.api_key.key
})
self.assertEqual(r.status_code, 200)
def test_logged_in_user_info(self):
# login and see if adding a work to the users wishlist causes
# it to show up as in_wishlist in the campaign info
self.client.login(username='test', password='testpass')
r = self.client.get('/api/v1/campaign/', data={
'format': 'json',
'work__identifiers__value': regluit.core.isbn.convert_10_to_13('0441007465'),
'work__identifiers__type': 'isbn',
'username': self.user.username,
'api_key': self.user.api_key.key
})
j = json.loads(r.content)
self.assertEqual(j['meta']['logged_in_username'], 'test')
self.assertEqual(j['objects'][0]['in_wishlist'], False)
w = models.Work.objects.get(identifiers__value=regluit.core.isbn.convert_10_to_13('0441007465'), identifiers__type='isbn')
self.user.wishlist.add_work(w,'test')
r = self.client.get('/api/v1/campaign/', data={
'format': 'json',
'work__identifiers__value': regluit.core.isbn.convert_10_to_13('0441007465'),
'work__identifiers__type': 'isbn',
'username': self.user.username,
'api_key': self.user.api_key.key
})
j = json.loads(r.content)
self.assertEqual(j['meta']['logged_in_username'], 'test')
self.assertEqual(j['objects'][0]['in_wishlist'], True)