import re from django.test import TestCase from django.test.client import Client from django.contrib.auth.models import User from django.core.urlresolvers import reverse from regluit.core.models import Work, Campaign from decimal import Decimal as D from regluit.utils.localdatetime import now from datetime import timedelta class WishlistTests(TestCase): def setUp(self): self.user = User.objects.create_user('test', 'test@example.org', 'test') self.client = Client() self.client.login(username='test', password='test') def test_add_remove(self): # add a book to the wishlist r = self.client.post("/wishlist/", {"googlebooks_id": "2NyiPwAACAAJ"}, HTTP_X_REQUESTED_WITH="XMLHttpRequest") self.assertEqual(r.status_code, 302) self.assertEqual(self.user.wishlist.works.all().count(), 1) wished= self.user.wishlist.works.all()[0] # test the work page r = self.client.get("/work/%s/" % wished.id) self.assertEqual(r.status_code, 200) anon_client = Client() r = anon_client.get("/work/%s/" % wished.id) self.assertEqual(r.status_code, 200) # remove the book r = self.client.post("/wishlist/", {"remove_work_id": wished.id}, HTTP_X_REQUESTED_WITH="XMLHttpRequest") self.assertEqual(self.user.wishlist.works.all().count(), 0) class PageTests(TestCase): def setUp(self): self.user = User.objects.create_user('test', 'test@example.org', 'test') self.user = User.objects.create_user('test_other', 'test@example.org', 'test_other') self.client = Client() self.client.login(username='test', password='test') def test_view_by_self(self): # logged in r = self.client.get("/supporter/test/") self.assertEqual(r.status_code, 200) r = self.client.get("/search/?q=sverige") self.assertEqual(r.status_code, 200) def test_view_by_other(self): # someone else's supporter page r = self.client.get("/supporter/test_other/") self.assertEqual(r.status_code, 200) def test_view_by_anonymous(self): # not logged in anon_client = Client() r = anon_client.get("/supporter/test/") self.assertEqual(r.status_code, 200) r = anon_client.get("/") self.assertEqual(r.status_code, 200) r = anon_client.get("/search/?q=sverige") self.assertEqual(r.status_code, 200) r = anon_client.get("/info/metrics.html") self.assertEqual(r.status_code, 200) class GoogleBooksTest(TestCase): def test_googlebooks_id(self): r = self.client.get("/googlebooks/wtPxGztYx-UC/") self.assertEqual(r.status_code, 302) work_url = r['location'] self.assertTrue(re.match('.*/work/\d+/$', work_url)) r = self.client.get("/googlebooks/wtPxGztYx-UC/") self.assertEqual(r.status_code, 302) self.assertEqual(r['location'], work_url) class CampaignUiTests(TestCase): def setUp(self): self.user = User.objects.create_user('test', 'test@example.org', 'test') self.client = Client() # load a Work and a Campaign to create a Pledge page self.work = Work(title="test Work") self.work.save() self.campaign = Campaign(target=D('1000.00'), deadline=now() + timedelta(days=180), work=self.work) self.campaign.save() self.campaign.activate() def test_login_required_for_pledge(self): """ Make sure that the user has to be logged in to be able to access a pledge page""" pledge_path = reverse("pledge", kwargs={'work_id': self.work.id}) r = self.client.get(pledge_path) self.assertEqual(r.status_code, 302) # now login and see whether the pledge page is accessible self.client.login(username='test', password='test') r = self.client.get(pledge_path) self.assertEqual(r.status_code, 200) def tearDown(self): pass