Skip to content
Snippets Groups Projects
Commit adccf061 authored by Todd Dembrey's avatar Todd Dembrey
Browse files

Refactor the tests to use use the form not the view

parent 6f578c28
No related branches found
No related tags found
No related merge requests found
from django import forms
from django.forms.models import model_to_dict
from django.test import TestCase
from django.urls import reverse
from ..forms import ProfileForm
from .factories import OAuthUserFactory, StaffFactory, UserFactory
class BaseTestProfileForm(TestCase):
def form_data(self, user, **values):
fields = ProfileForm.Meta.fields
data = model_to_dict(user, fields)
data.update(**values)
return data
def submit_form(self, instance, **extra_data):
form = ProfileForm(instance=instance, data=self.form_data(instance, **extra_data))
if form.is_valid():
form.save()
return form
class TestProfileForm(BaseTestProfileForm):
def setUp(self):
self.user = UserFactory()
def test_email_unique(self):
other_user = UserFactory()
form = self.submit_form(self.user, email=other_user.email)
self.assertFalse(form.is_valid())
self.user.refresh_from_db()
self.assertNotEqual(self.user.email, other_user.email)
def test_can_change_email(self):
new_email = 'me@another.com'
self.submit_form(self.user, email=new_email)
self.user.refresh_from_db()
self.assertEqual(self.user.email, new_email)
def test_cant_set_slack_name(self):
slack_name = '@foobar'
self.submit_form(self.user, slack=slack_name)
self.user.refresh_from_db()
self.assertNotEqual(self.user.slack, slack_name)
class TestStaffProfileView(BaseTestProfileForm):
def setUp(self):
self.staff = StaffFactory()
def test_can_set_slack_name(self):
slack_name = '@foobar'
self.submit_form(self.staff, slack=slack_name)
self.staff.refresh_from_db()
self.assertEqual(self.staff.slack, slack_name)
def test_can_set_slack_name_with_trailing_space(self):
slack_name = '@foobar'
self.submit_form(self.staff, slack=slack_name)
self.staff.refresh_from_db()
self.assertEqual(self.staff.slack, slack_name)
def test_cant_set_slack_name_with_space(self):
slack_name = '@ foobar'
form = self.submit_form(self.staff, slack=slack_name)
self.assertFalse(form.is_valid())
self.staff.refresh_from_db()
self.assertNotEqual(self.staff.slack, slack_name)
def test_auto_prepend_at(self):
slack_name = 'foobar'
self.submit_form(self.staff, slack=slack_name)
self.staff.refresh_from_db()
self.assertEqual(self.staff.slack, '@' + slack_name)
def test_can_clear_slack_name(self):
slack_name = ''
self.submit_form(self.staff, slack=slack_name)
self.staff.refresh_from_db()
self.assertEqual(self.staff.slack, slack_name)
...@@ -37,29 +37,9 @@ class TestProfileView(BaseTestProfielView): ...@@ -37,29 +37,9 @@ class TestProfileView(BaseTestProfielView):
response = self.client.get(self.url) response = self.client.get(self.url)
self.assertNotContains(response, reverse('users:password_change')) self.assertNotContains(response, reverse('users:password_change'))
def test_email_unique(self):
other_user = UserFactory()
data = self.form_data(self.user, email=other_user.email)
self.client.post(self.url, data=data)
self.user.refresh_from_db()
self.assertNotEqual(self.user.email, other_user.email)
def test_can_change_email(self):
new_email = 'me@another.com'
data = self.form_data(self.user, email=new_email)
self.client.post(self.url, data=data)
self.user.refresh_from_db()
self.assertEqual(self.user.email, new_email)
def test_cant_set_slack_name(self): def test_cant_set_slack_name(self):
response = self.client.get(self.url) response = self.client.get(self.url)
self.assertNotContains(response, 'Slack Name') self.assertNotContains(response, 'Slack name')
slack_name = '@foobar'
data = self.form_data(self.user, slack=slack_name)
self.client.post(self.url, data=data)
self.user.refresh_from_db()
self.assertNotEqual(self.user.slack, slack_name)
class TestStaffProfileView(BaseTestProfielView): class TestStaffProfileView(BaseTestProfielView):
...@@ -68,41 +48,5 @@ class TestStaffProfileView(BaseTestProfielView): ...@@ -68,41 +48,5 @@ class TestStaffProfileView(BaseTestProfielView):
self.client.force_login(self.staff) self.client.force_login(self.staff)
def test_can_set_slack_name(self): def test_can_set_slack_name(self):
slack_name = '@foobar' response = self.client.get(self.url)
data = self.form_data(self.staff, slack=slack_name) self.assertContains(response, 'Slack name')
self.client.post(self.url, data=data)
self.staff.refresh_from_db()
self.assertEqual(self.staff.slack, slack_name)
def test_can_set_slack_name_with_trailing_space(self):
slack_name = '@foobar'
data = self.form_data(self.staff, slack=slack_name + ' ')
self.client.post(self.url, data=data)
self.staff.refresh_from_db()
self.assertEqual(self.staff.slack, slack_name)
def test_cant_set_slack_name_with_space(self):
slack_name = '@ foobar'
data = self.form_data(self.staff, slack=slack_name)
self.client.post(self.url, data=data)
self.staff.refresh_from_db()
self.assertNotEqual(self.staff.slack, slack_name)
def test_auto_prepend_at(self):
slack_name = 'foobar'
data = self.form_data(self.staff, slack=slack_name)
self.client.post(self.url, data=data)
self.staff.refresh_from_db()
self.assertEqual(self.staff.slack, '@' + slack_name)
def test_can_clear_slack_name(self):
slack_name = ''
data = self.form_data(self.staff, slack=slack_name)
self.client.post(self.url, data=data)
self.staff.refresh_from_db()
self.assertEqual(self.staff.slack, slack_name)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment