regluit/api/tests.py

101 lines
3.9 KiB
Python
Executable File

import json
import datetime
from decimal import Decimal
from django.test import TestCase
from django.test.client import Client
from django.contrib.auth.models import User
from regluit.core import bookloader, models
import regluit.core.isbn
class ApiTests(TestCase):
def setUp(self):
edition = bookloader.add_by_isbn_from_google(isbn='0441012035')
campaign = models.Campaign.objects.create(
name=edition.work.title,
work=edition.work,
description='Test Campaign',
deadline=datetime.datetime.now(),
target=Decimal('1000.00'),
)
self.user = User.objects.create_user('test', 'test@example.com', 'testpass')
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):
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
})
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/1/')
def test_campaign(self):
r = self.client.get('/api/v1/campaign/1/', data={
'format': 'json',
'username': self.user.username,
'api_key': self.user.api_key.key
})
self.assertEqual(r.status_code, 200)
j = json.loads(r.content)
self.assertEqual(j['name'], 'Neuromancer')
self.assertEqual(j['work'], '/api/v1/work/1/')
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('0441012035'),
'work__identifiers__type': 'isbn',
'username': self.user.username,
'api_key': self.user.api_key.key
})
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_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('0441012035'),
'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('0441012035'), 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('0441012035'),
'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)