Commit 22067420 authored by Jamesie Pic's avatar Jamesie Pic

Test positions

parent a9d59b66
......@@ -13,6 +13,7 @@ script:
- ! lesscpy -N static/less/base.less 2>&1 | grep Error
- pep8 . --exclude '*/migrations,docs,static' --ignore E128
- flake8 . --exclude '*/migrations,docs,static' --ignore E128
- django-admin test positions votes core legislature
- django-admin migrate
- django-admin update_score
deploy:
......
# coding: utf-8
# This file is part of memopol.
#
# memopol is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of
# the License, or any later version.
#
# memopol is distributed in the hope that it will
# be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU General Affero Public
# License along with django-representatives.
# If not, see <http://www.gnu.org/licenses/>.
#
# Copyright (C) 2015 Arnaud Fabre <af@laquadrature.net>
from django.conf.urls import include, patterns, url
from django.contrib import admin
......
# coding: utf-8
# This file is part of memopol.
#
# memopol is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of
# the License, or any later version.
#
# memopol is distributed in the hope that it will
# be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU General Affero Public
# License along with django-representatives.
# If not, see <http://www.gnu.org/licenses/>.
#
# Copyright (C) 2015 Arnaud Fabre <af@laquadrature.net>
from django.db import models
from django.template.defaultfilters import truncatewords
from django.core.urlresolvers import reverse
from taggit.managers import TaggableManager
from legislature.models import MemopolRepresentative
......@@ -55,3 +37,6 @@ class Position(models.Model):
def unpublish(self):
self.published = False
def get_absolute_url(self):
return reverse('positions:position-detail', args=(self.pk,))
......@@ -7,7 +7,7 @@
.quote
%p.quote-header
{{object.datetime|naturalday:"The d/m/Y"}}, {{object.representative.full_name}} declared :
{{object.datetime|naturalday}}, {{object.representative.full_name}} declared :
.long-quote
= object.text|linebreaks
......
import datetime
import copy
# Create your tests here.
from django.test import TestCase, Client
from legislature.models import MemopolRepresentative
from positions.models import Position
class PositionTest(TestCase):
def setUp(self):
self.client = Client()
self.tags = [u'foo', u'bar']
self.mep = MemopolRepresentative.objects.create(
full_name='%sfull' % self.id(), slug='slug')
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('/positions/create', self.fixture)
expected = 'http://testserver/legislature/slug'
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.representative_ptr_id == self.mep.pk
assert result.published is False
def test_position_publishing(self):
self.client.post('/positions/create', self.fixture)
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('/positions/create', fixture)
assert response.context['form'].is_valid() is False
def test_position_detail(self):
fixture = copy.copy(self.fixture)
fixture['representative'] = self.mep
fixture.pop('tags')
position = Position.objects.create(published=True, **fixture)
position.tags.add('%stag' % self.id())
response = self.client.get(position.get_absolute_url())
assert 'Dec. 11, 2015' in response.content
assert '%stag' % self.id() in response.content
assert fixture['link'] in response.content
assert fixture['text'] in response.content
assert self.mep.full_name in response.content
# coding: utf-8
# This file is part of memopol.
#
# memopol is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of
# the License, or any later version.
#
# memopol is distributed in the hope that it will
# be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU General Affero Public
# License along with django-representatives.
# If not, see <http://www.gnu.org/licenses/>.
#
# Copyright (C) 2015 Arnaud Fabre <af@laquadrature.net>
from django.conf.urls import url
from views import PositionCreate, PositionDetail
urlpatterns = [
# Create a Position
url(
r'^create',
PositionCreate.as_view(),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment