diff --git a/opentech/apply/users/tests/test_forms.py b/opentech/apply/users/tests/test_forms.py new file mode 100644 index 0000000000000000000000000000000000000000..76b65bddb8ef058e908b6873635b8a5bf6f5a3d1 --- /dev/null +++ b/opentech/apply/users/tests/test_forms.py @@ -0,0 +1,87 @@ +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) diff --git a/opentech/apply/users/tests/test_views.py b/opentech/apply/users/tests/test_views.py index 271ea1a31a3ad67d28dce5eb96354b8600c7be41..b1f6bffa56b4bea57c47e809272d60fb67034b88 100644 --- a/opentech/apply/users/tests/test_views.py +++ b/opentech/apply/users/tests/test_views.py @@ -37,29 +37,9 @@ class TestProfileView(BaseTestProfielView): response = self.client.get(self.url) 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): response = self.client.get(self.url) - 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) + self.assertNotContains(response, 'Slack name') class TestStaffProfileView(BaseTestProfielView): @@ -68,41 +48,5 @@ class TestStaffProfileView(BaseTestProfielView): self.client.force_login(self.staff) def test_can_set_slack_name(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_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) + response = self.client.get(self.url) + self.assertContains(response, 'Slack name')