Skip to content

Commit d806826

Browse files
committed
Improve test coverage of users and events apps
Also, tweak coverage.py settings to produce better coverage reports.
1 parent b0cb705 commit d806826

File tree

9 files changed

+78
-16
lines changed

9 files changed

+78
-16
lines changed

.coveragerc

+21-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,24 @@
11
[run]
22
branch = True
33
source = .
4-
omit = manage.py,*/migrations/*,*/tests/*,*/tests.py,pydotorg/wsgi.py,*venv*,pydotorg/settings/*,pydotorg/compilers.py,*/factories.py
4+
omit =
5+
*venv*
6+
manage.py
7+
pydotorg/wsgi.py
8+
pydotorg/settings/*
9+
pydotorg/compilers.py
10+
*/migrations/*
11+
*/tests/*
12+
*/tests.py
13+
*/actions.py
14+
*/admin.py
15+
*/factories.py
16+
*/search_indexes.py
17+
18+
[report]
19+
exclude_lines =
20+
def get_absolute_url
21+
def __repr__
22+
def __str__
23+
if settings.DEBUG
24+
if __name__ == .__main__.:

.travis.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ before_script:
1414
- psql -c 'create database "python.org";' -U postgres
1515
script:
1616
- python -Wd -m coverage run manage.py test -v2
17-
- coverage report --fail-under=75
17+
- coverage report -m --fail-under=75
1818
notifications:
1919
irc:
2020
channels:

events/tests/test_views.py

+7
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ def setUpTestData(cls):
3333
finish=cls.now - datetime.timedelta(days=1),
3434
)
3535

36+
def test_events_homepage(self):
37+
url = reverse('events:events')
38+
response = self.client.get(url)
39+
self.assertEqual(response.status_code, 200)
40+
self.assertEqual(len(response.context['object_list']), 1)
41+
3642
def test_calendar_list(self):
3743
calendars_count = Calendar.objects.count()
3844
url = reverse('events:calendar_list')
@@ -143,6 +149,7 @@ def test_event_detail(self):
143149

144150
def test_upcoming_tag(self):
145151
self.assertEqual(len(get_events_upcoming()), 1)
152+
self.assertEqual(len(get_events_upcoming(only_featured=True)), 1)
146153
self.rule.begin = self.now - datetime.timedelta(days=3)
147154
self.rule.finish = self.now - datetime.timedelta(days=2)
148155
self.rule.save()

membership/models.py

-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
1-
from django.db import models
2-
31
# Create your models here.

users/tests/test_forms.py

+18-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from allauth.account.forms import SignupForm
55

6-
from users.forms import UserProfileForm
6+
from users.forms import UserProfileForm, MembershipForm
77

88
User = get_user_model()
99

@@ -100,6 +100,23 @@ def test_non_ascii_username(self):
100100
]
101101
)
102102

103+
def test_user_membership(self):
104+
form = MembershipForm({
105+
'legal_name': 'Some Name',
106+
'preferred_name': 'Sommy',
107+
'email_address': '[email protected]',
108+
'city': 'Lawrence',
109+
'region': 'Kansas',
110+
'country': 'USA',
111+
'postal_code': '66044',
112+
'psf_announcements': True,
113+
})
114+
self.assertFalse(form.is_valid())
115+
self.assertEqual(
116+
form.errors['psf_code_of_conduct'],
117+
['Agreeing to the code of conduct is required.']
118+
)
119+
103120

104121
class UserProfileFormTestCase(TestCase):
105122

users/tests/test_templatetags.py

+4
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ def test_parse_location(self):
2424
rendered = self.render_string(template, {'user': user})
2525
self.assertEqual(rendered, "Lawrence, KS")
2626

27+
user = UserFactory(membership__region='KS', membership__country='USA')
28+
rendered = self.render_string(template, {'user': user})
29+
self.assertEqual(rendered, 'KS USA')
30+
2731
user = UserFactory(
2832
membership__city='Lawrence',
2933
membership__region='KS',

users/tests/test_views.py

+24-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ def setUp(self):
2121
self.user2 = UserFactory(
2222
username='spameggs',
2323
password='password',
24-
search_visibility=0,
25-
email_privacy=1,
24+
search_visibility=User.SEARCH_PRIVATE,
25+
email_privacy=User.EMAIL_PRIVATE,
2626
public_profile=False,
2727
)
2828

@@ -95,6 +95,22 @@ def test_membership_update(self):
9595
response = self.client.post(url, post_data)
9696
self.assertEqual(response.status_code, 302)
9797

98+
def test_membership_update_404(self):
99+
url = reverse('users:user_membership_edit')
100+
self.assertFalse(self.user.has_membership)
101+
self.client.login(username=self.user, password='password')
102+
response = self.client.get(url)
103+
self.assertEqual(response.status_code, 404)
104+
105+
def test_user_has_already_have_membership(self):
106+
# Should redirect to /membership/edit/ if user already
107+
# has membership.
108+
url = reverse('users:user_membership_create')
109+
self.assertTrue(self.user2.has_membership)
110+
self.client.login(username=self.user2, password='password')
111+
response = self.client.get(url)
112+
self.assertRedirects(response, reverse('users:user_membership_edit'))
113+
98114
def test_user_update(self):
99115
self.client.login(username='username', password='password')
100116
url = reverse('users:user_profile_edit')
@@ -267,3 +283,9 @@ def test_is_active_login(self):
267283
response,
268284
'{}?next={}'.format(reverse('account_login'), url)
269285
)
286+
287+
def test_user_list(self):
288+
url = reverse('users:user_list')
289+
response = self.client.get(url)
290+
self.assertEqual(response.status_code, 200)
291+
self.assertEqual(len(response.context['user_list']), 1)

users/views.py

+3-7
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,12 @@ def dispatch(self, *args, **kwargs):
3535

3636
def get_form_kwargs(self):
3737
kwargs = super().get_form_kwargs()
38-
if self.request.user.email:
39-
kwargs['initial'] = {'email_address': self.request.user.email}
40-
38+
kwargs['initial'] = {'email_address': self.request.user.email}
4139
return kwargs
4240

4341
def form_valid(self, form):
4442
self.object = form.save(commit=False)
45-
if self.request.user.is_authenticated:
46-
self.object.creator = self.request.user
43+
self.object.creator = self.request.user
4744
self.object.save()
4845

4946
# Send subscription email to mailing lists
@@ -77,8 +74,7 @@ def get_object(self):
7774

7875
def form_valid(self, form):
7976
self.object = form.save(commit=False)
80-
if self.request.user.is_authenticated:
81-
self.object.creator = self.request.user
77+
self.object.creator = self.request.user
8278
self.object.save()
8379
return super().form_valid(form)
8480

work_groups/views.py

-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
1-
from django.shortcuts import render
2-
31
# Create your views here.

0 commit comments

Comments
 (0)