import datetime import copy from django.core.urlresolvers import reverse from django.test import TestCase, Client from representatives.models import Representative from representatives_positions.models import Position class PositionTest(TestCase): fixtures = ['one_representative'] def setUp(self): self.client = Client() self.tags = [u'foo', u'bar'] self.create_url = reverse('representatives_positions:position-create') self.mep = Representative.objects.get(pk=160) self.fixture = { 'tags': ','.join(self.tags), 'datetime': '2015-12-11', 'text': '%stext' % self.id(), 'link': 'http://example.com/%slink' % self.id(), 'representative': self.mep.pk, } def test_create_position(self): response = self.client.post(self.create_url, self.fixture) assert response.status_code == 302 mep_url = reverse('representative-detail', args=(self.mep.slug,)) expected = 'http://testserver%s' % mep_url assert response['Location'] == expected result = Position.objects.get(text='%stext' % self.id()) assert list(result.tags.values_list('name', flat=True)) == self.tags assert result.datetime == datetime.date(2015, 12, 11) assert result.link == self.fixture['link'] assert result.representative.pk == self.mep.pk assert result.published is False def test_position_publishing(self): response = self.client.post(self.create_url, self.fixture) assert response.status_code == 302 position = Position.objects.get(text='%stext' % self.id()) get_response = self.client.get(position.get_absolute_url()) assert get_response.status_code == 404 position.published = True position.save() get_response = self.client.get(position.get_absolute_url()) assert get_response.status_code == 200 def test_create_position_without_field(self): for key in self.fixture.keys(): fixture = copy.copy(self.fixture) fixture.pop(key) response = self.client.post(self.create_url, fixture) assert response.context['form'].is_valid() is False, \ 'Could submit form without %s' % key def test_position_detail(self): position = Position.objects.create( published=True, datetime=self.fixture['datetime'], text=self.fixture['text'], link=self.fixture['link'], representative=self.mep ) position.tags.add('%stag' % self.id()) # Trigger irrelevant queries that happen only once ie. constance before # testing actual page queries. self.client.get(position.get_absolute_url()) with self.assertNumQueries(4): # One for position and rep and score # One for rep mandates # One for rep chamber # One for position tags response = self.client.get(position.get_absolute_url()) assert 'Dec. 11, 2015' in response.content assert '%stag' % self.id() in response.content assert self.fixture['link'] in response.content assert self.fixture['text'] in response.content assert self.mep.full_name in response.content