Skip to content

Commit

Permalink
Merge pull request #611 from CTPUG/schedule-test-cleanup
Browse files Browse the repository at this point in the history
Tests: Use common test and user creation fixture functions
  • Loading branch information
stefanor committed Jul 23, 2021
2 parents 378776f + ef42117 commit db5b16f
Show file tree
Hide file tree
Showing 10 changed files with 130 additions and 211 deletions.
49 changes: 20 additions & 29 deletions wafer/kv/tests/test_kv_api.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
"""Tests for wafer.kv api views."""

from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from django.test import Client, TestCase

from rest_framework.test import APIClient

from wafer.kv.models import KeyValue
from wafer.tests.utils import create_user


def get_group(group):
Expand All @@ -15,17 +17,6 @@ def create_group(group):
return Group.objects.create(name=group)


def create_user(username, groups):
create = get_user_model().objects.create_user
user = create(
username, '%s@example.com' % username, 'password')
for the_group in groups:
grp = get_group(the_group)
user.groups.add(grp)
user.save()
return user


def create_kv_pair(name, value, group):
group = get_group(group)
return KeyValue.objects.create(key=name, value=value, group=group)
Expand All @@ -37,10 +28,10 @@ class KeyValueViewSetTests(TestCase):
def setUp(self):
for grp in ['group_1', 'group_2', 'group_3', 'group_4']:
create_group(grp)
self.user1 = create_user("user1", ["group_1", "group_2"])
self.user2 = create_user("user2", ["group_1"]),
self.user3 = create_user("user3", ["group_4"]),
self.user4 = create_user("user4", ["group_3"]),
self.user1 = create_user("user1", groups=["group_1", "group_2"])
self.user2 = create_user("user2", groups=["group_1"]),
self.user3 = create_user("user3", groups=["group_4"]),
self.user4 = create_user("user4", groups=["group_3"]),
self.kv_1_grp1 = create_kv_pair("Val 1.1", '{"key": "Data"}', "group_1")
self.kv_2_grp2 = create_kv_pair("Val 2.1", '{"key2": "False"}', "group_2")
self.kv_2_grp1 = create_kv_pair("Val 1.2", '{"key3": "True"}', "group_1")
Expand All @@ -56,7 +47,7 @@ def test_unauthorized_users(self):
self.assertEqual(response.status_code, 404)

def test_group_1_member(self):
self.client.login(username='user2', password='password')
self.client.login(username='user2', password='user2_password')
response = self.client.get('/kv/api/kv/')
self.assertEqual(response.data['count'], 3)
pairs = [x['key'] for x in response.data['results']]
Expand All @@ -71,7 +62,7 @@ def test_group_1_member(self):
self.assertEqual(response.status_code, 404)

def test_group_1_2_member(self):
self.client.login(username='user1', password='password')
self.client.login(username='user1', password='user1_password')
response = self.client.get('/kv/api/kv/')
self.assertEqual(response.data['count'], 4)
pairs = [x['key'] for x in response.data['results']]
Expand All @@ -89,7 +80,7 @@ def test_group_1_2_member(self):
self.assertEqual(response.status_code, 404)

def test_group_4_member(self):
self.client.login(username='user3', password='password')
self.client.login(username='user3', password='user3_password')
response = self.client.get('/kv/api/kv/')
self.assertEqual(response.data['count'], 0)
response = self.client.get('/kv/api/kv/%d/' % self.kv_1_grp1.pk)
Expand All @@ -100,7 +91,7 @@ def test_group_4_member(self):
self.assertEqual(response.status_code, 404)

def test_group_3_member(self):
self.client.login(username='user4', password='password')
self.client.login(username='user4', password='user4_password')
response = self.client.get('/kv/api/kv/')
self.assertEqual(response.data['count'], 2)
pairs = [x['key'] for x in response.data['results']]
Expand All @@ -120,16 +111,16 @@ class KeyValueAPITests(TestCase):
def setUp(self):
for grp in ['group_1', 'group_2']:
create_group(grp)
self.user1 = create_user("user1", ["group_1", "group_2"])
self.user2 = create_user("user2", ["group_1"]),
self.user3 = create_user("user3", ["group_2"]),
self.user1 = create_user("user1", groups=["group_1", "group_2"])
self.user2 = create_user("user2", groups=["group_1"]),
self.user3 = create_user("user3", groups=["group_2"]),
self.kv_1_grp1 = create_kv_pair("Val 1.1", '{"key": "Data"}', "group_1")
self.kv_2_grp2 = create_kv_pair("Val 2.1", '{"key2": "False"}', "group_2")
self.kv_3_grp1 = create_kv_pair("Val 1.3", '{"key1": "Data"}', "group_1")
self.client = APIClient()

def test_group_1_actions(self):
self.client.login(username='user2', password='password')
self.client.login(username='user2', password='user2_password')
# Test creation
data = {'key': 'new',
'value': "{'mykey': 'Value'}",
Expand All @@ -147,7 +138,7 @@ def test_group_1_actions(self):
kv = KeyValue.objects.get(key='new')
self.assertEqual(kv.value, "{'mykey': 'Value 2'}")

self.client.login(username='user1', password='password')
self.client.login(username='user1', password='user1_password')
# Test that changing group ownership fails
data = {'group': get_group("group_2").pk}
response = self.client.patch('/kv/api/kv/%d/' % kv.pk, data,
Expand All @@ -159,7 +150,7 @@ def test_group_1_actions(self):
self.assertFalse(KeyValue.objects.filter(key="new").exists())

# Test non-group member
self.client.login(username='user3', password='password')
self.client.login(username='user3', password='user3_password')
response = self.client.delete('/kv/api/kv/%d/' % self.kv_1_grp1.pk)
self.assertEqual(response.status_code, 404)
data = {'key': 'foobar'}
Expand All @@ -177,7 +168,7 @@ def test_group_2_actions(self):
# Same tests as above, but with group_2 and a different ordering
# of users belonging to 1 or both groups
# Multi-group user
self.client.login(username='user1', password='password')
self.client.login(username='user1', password='user1_password')
data = {'key': 'new',
'value': "{'mykey': 'Value'}",
'group': get_group("group_2").pk}
Expand All @@ -187,7 +178,7 @@ def test_group_2_actions(self):
kv = KeyValue.objects.get(key='new')
self.assertEqual(kv.value, "{'mykey': 'Value'}")
# Single group user
self.client.login(username='user3', password='password')
self.client.login(username='user3', password='user3_password')
data = {'value': "{'mykey': 'Value 2'}"}
response = self.client.patch('/kv/api/kv/%d/' % kv.pk, data,
format='json')
Expand All @@ -198,7 +189,7 @@ def test_group_2_actions(self):
self.assertEqual(response.status_code, 204)
self.assertFalse(KeyValue.objects.filter(key="new").exists())

self.client.login(username='user2', password='password')
self.client.login(username='user2', password='user2_password')
response = self.client.delete('/kv/api/kv/%d/' % self.kv_2_grp2.pk)
self.assertEqual(response.status_code, 404)
data = {'key': 'foobar'}
Expand Down
48 changes: 10 additions & 38 deletions wafer/pages/tests/test_pages.py
Original file line number Diff line number Diff line change
@@ -1,62 +1,34 @@
# Simple test of the edit logic around pages

from django.test import Client, TestCase, override_settings
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
from django.core.cache import caches

from wafer.pages.models import Page
from wafer.tests.utils import create_user


class PageEditTests(TestCase):

def _make_users(self):
# utiltiy function for tests
UserModel = get_user_model()

# Make user without edit permissions
try:
no_edit_user = UserModel.objects.filter(username='no_edit').get()
except UserModel.DoesNotExist:
no_edit_user = UserModel.objects.create_user('no_edit',
'test@test',
'aaaa')
no_edit_user.save()

# Make user with edit permissions
try:
edit_user = UserModel.objects.filter(username='can_edit').get()
except UserModel.DoesNotExist:
edit_user = UserModel.objects.create_user('can_edit',
'test@test',
'aaaa')
# Is there a better way to do this?
page_content_type = ContentType.objects.get_for_model(Page)
change_page = Permission.objects.get(
content_type=page_content_type, codename='change_page')

edit_user.user_permissions.add(change_page)
edit_user.save()

return no_edit_user, edit_user
def setUp(self):
self.no_edit_user = create_user('no_edit')
self.edit_user = create_user('can_edit', perms=('change_page',))

def test_simple_page(self):
# Test editing a page we create
no_edit_user, edit_user = self._make_users()
page = Page.objects.create(name="test edit page", slug="test_edit")
page.save()
c = Client()
# Test without edit permission
c.login(username=no_edit_user.username, password='aaaa')
c.login(username=self.no_edit_user.username,
password='no_edit_password')
response = c.get('/test_edit/')
templates = [x.name for x in response.templates]
self.assertTrue('wafer.pages/page.html' in templates)
response = c.get('/test_edit/', {'edit': ''})
self.assertEqual(response.status_code, 403)
c.logout()
# Test with edit permission
c.login(username=edit_user.username, password='aaaa')
c.login(username=self.edit_user.username, password='can_edit_password')
response = c.get('/test_edit/')
templates = [x.name for x in response.templates]
self.assertTrue('wafer.pages/page.html' in templates)
Expand All @@ -67,12 +39,12 @@ def test_simple_page(self):

def test_root_page(self):
# Test editing /
no_edit_user, edit_user = self._make_users()
page = Page.objects.create(name="index", slug="index")
page.save()
c = Client()
# Test without edit permission
c.login(username=no_edit_user.username, password='aaaa')
c.login(username=self.no_edit_user.username,
password='no_edit_password')
response = c.get('/index', follow=True)
templates = [x.name for x in response.templates]
self.assertTrue('wafer.pages/page.html' in templates)
Expand All @@ -81,7 +53,7 @@ def test_root_page(self):
self.assertEqual(response.status_code, 403)
c.logout()
# Test with edit permission
c.login(username=edit_user.username, password='aaaa')
c.login(username=self.edit_user.username, password='can_edit_password')
response = c.get('/index', follow=True)
templates = [x.name for x in response.templates]
self.assertTrue('wafer.pages/page.html' in templates)
Expand Down
21 changes: 6 additions & 15 deletions wafer/schedule/tests/test_admin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import datetime as D

from django.contrib.auth import get_user_model
from django.test import TestCase
from django.http import HttpRequest
from django.utils import timezone
Expand All @@ -12,8 +11,9 @@
find_invalid_venues, find_non_contiguous, prefetch_schedule_items,
validate_items, validate_schedule)
from wafer.schedule.models import ScheduleBlock, Venue, Slot, ScheduleItem
from wafer.talks.models import (Talk, ACCEPTED, REJECTED, CANCELLED,
SUBMITTED, UNDER_CONSIDERATION)
from wafer.talks.models import (ACCEPTED, REJECTED, CANCELLED, SUBMITTED,
UNDER_CONSIDERATION)
from wafer.talks.tests.fixtures import create_talk


class DummyForm(object):
Expand Down Expand Up @@ -486,10 +486,7 @@ def test_validation(self):
slot1 = Slot.objects.create(start_time=start1, end_time=start2)
slot2 = Slot.objects.create(start_time=start1, end_time=end)

user = get_user_model().objects.create_user('john', 'best@wafer.test',
'johnpassword')
talk = Talk.objects.create(title="Test talk", status=ACCEPTED,
corresponding_author_id=user.id)
talk = create_talk('Test talk', status=ACCEPTED, username='john')
page = Page.objects.create(name="test page", slug="test")

item1 = ScheduleItem.objects.create(venue=venue1,
Expand Down Expand Up @@ -564,10 +561,7 @@ def test_non_contiguous(self):
slot2 = Slot.objects.create(start_time=start2, end_time=start3)
slot3 = Slot.objects.create(start_time=start3, end_time=end)

user = get_user_model().objects.create_user('john', 'best@wafer.test',
'johnpassword')
talk = Talk.objects.create(title="Test talk", status=ACCEPTED,
corresponding_author_id=user.id)
talk = create_talk('Test Talk', status=ACCEPTED, username='john')
page = Page.objects.create(name="test page", slug="test")

item1 = ScheduleItem.objects.create(venue=venue1,
Expand Down Expand Up @@ -617,10 +611,7 @@ def test_duplicates(self):
slot1 = Slot.objects.create(start_time=start1, end_time=start2)
slot2 = Slot.objects.create(start_time=start1, end_time=end)

user = get_user_model().objects.create_user('john', 'best@wafer.test',
'johnpassword')
talk = Talk.objects.create(title="Test talk", status=ACCEPTED,
corresponding_author_id=user.id)
talk = create_talk('Test talk', status=ACCEPTED, username='john')
page1 = Page.objects.create(name="test page", slug="test")
page2 = Page.objects.create(name="test page 2", slug="test2")

Expand Down
34 changes: 8 additions & 26 deletions wafer/schedule/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,16 @@
from xml.etree import ElementTree

from django.test import Client, TestCase
from django.contrib.auth import get_user_model
from django.utils import timezone

import icalendar
import lxml.etree

from wafer.talks.models import Talk, ACCEPTED
from wafer.pages.models import Page
from wafer.schedule.models import ScheduleBlock, Venue, Slot, ScheduleItem
from wafer.talks.models import ACCEPTED
from wafer.talks.tests.fixtures import create_talk
from wafer.tests.utils import create_user
from wafer.utils import QueryTracker


Expand Down Expand Up @@ -63,13 +64,8 @@ def make_slot():
def create_client(username=None, superuser=False):
client = Client()
if username:
email = '%s@example.com' % (username,)
create_user(username, superuser=superuser)
password = '%s_password' % (username,)
if superuser:
create = get_user_model().objects.create_superuser
else:
create = get_user_model().objects.create_user
create(username, email, password)
client.login(username=username, password=password)
return client

Expand Down Expand Up @@ -1427,10 +1423,7 @@ def test_current_view_invalid(self):
slot1 = Slot.objects.create(start_time=start1, end_time=start2)
slot2 = Slot.objects.create(start_time=start1, end_time=end)

user = get_user_model().objects.create_user('john', 'best@wafer.test',
'johnpassword')
talk = Talk.objects.create(title="Test talk", status=ACCEPTED,
corresponding_author_id=user.id)
talk = create_talk('Test talk', status=ACCEPTED, username='john')

item1 = ScheduleItem.objects.create(venue=venue1,
talk_id=talk.pk)
Expand Down Expand Up @@ -1492,10 +1485,7 @@ def setUp(self):
for index, item in enumerate(items):
item.slots.add(slots[index // 2])

user = get_user_model().objects.create_user('john', 'best@wafer.test',
'johnpassword')
talk = Talk.objects.create(title="Test talk", status=ACCEPTED,
corresponding_author_id=user.id)
talk = create_talk('Test talk', status=ACCEPTED, username='john')
talk_item = ScheduleItem.objects.create(venue=venue1, talk_id=talk.pk)
talk_item.slots.add(slots[4])

Expand Down Expand Up @@ -1602,16 +1592,8 @@ def setUp(self):
for index, item in enumerate(items):
item.slots.add(slots[(index + 1) // 2])

user = get_user_model().objects.create_user('jimbob', 'best@wafer.test',
'johnpassword')

talk1 = Talk.objects.create(title="Test talk", status=ACCEPTED,
corresponding_author_id=user.id)
talk1.authors.add(user)

talk2 = Talk.objects.create(title="Test 2 talk", status=ACCEPTED,
corresponding_author_id=user.id)
talk2.authors.add(user)
talk1 = create_talk('Test talk', status=ACCEPTED, username='jimbob')
talk2 = create_talk('Test 2 talk', status=ACCEPTED, username='jimbob2')

item1 = ScheduleItem.objects.create(venue=venue1,
talk_id=talk1.pk)
Expand Down
24 changes: 24 additions & 0 deletions wafer/talks/tests/fixtures.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from wafer.talks.models import Talk, TalkType
from wafer.tests.utils import create_user


def create_talk_type(name):
"""Create a talk type"""
return TalkType.objects.create(name=name)


def create_talk(title, status, username=None, user=None, talk_type=None):
if sum((user is None, username is None)) != 1:
raise ValueError('One of user OR username must be specified')
if username:
user = create_user(username)
talk = Talk.objects.create(
title=title, status=status, corresponding_author_id=user.id)
talk.authors.add(user)
talk.notes = "Some notes for talk %s" % title
talk.private_notes = "Some private notes for talk %s" % title
talk.save()
if talk_type:
talk.talk_type = talk_type
talk.save()
return talk

0 comments on commit db5b16f

Please sign in to comment.