From 8486af9e2622984b57a9048a2fb0e04aeb05ce9f Mon Sep 17 00:00:00 2001
From: Todd Dembrey <todd.dembrey@torchbox.com>
Date: Wed, 18 Jul 2018 17:32:21 +0100
Subject: [PATCH] Add tests to cover the new profile usecases

---
 opentech/apply/users/tests/factories.py  |  5 ++++
 opentech/apply/users/tests/test_views.py | 37 ++++++++++++++++++++++++
 2 files changed, 42 insertions(+)
 create mode 100644 opentech/apply/users/tests/test_views.py

diff --git a/opentech/apply/users/tests/factories.py b/opentech/apply/users/tests/factories.py
index e0aa38ba2..bbeead335 100644
--- a/opentech/apply/users/tests/factories.py
+++ b/opentech/apply/users/tests/factories.py
@@ -20,6 +20,7 @@ class UserFactory(factory.DjangoModelFactory):
 
     email = factory.Sequence('email{}@email.com'.format)
     full_name = factory.Faker('name')
+    password = factory.PostGenerationMethodCall('set_password', 'defaultpassword')
 
     @factory.post_generation
     def groups(self, create, extracted, **kwargs):
@@ -32,6 +33,10 @@ class UserFactory(factory.DjangoModelFactory):
             self.groups.add(groups)
 
 
+class OAuthUserFactory(UserFactory):
+    password = factory.PostGenerationMethodCall('set_unusable_password')
+
+
 class AdminFactory(UserFactory):
     is_admin = True
 
diff --git a/opentech/apply/users/tests/test_views.py b/opentech/apply/users/tests/test_views.py
new file mode 100644
index 000000000..c0531535e
--- /dev/null
+++ b/opentech/apply/users/tests/test_views.py
@@ -0,0 +1,37 @@
+from django.test import TestCase
+from django.urls import reverse
+
+from .factories import OAuthUserFactory, UserFactory
+
+
+class TestProfileView(TestCase):
+    def setUp(self):
+        self.user = UserFactory()
+        self.url = reverse('users:account')
+
+    def test_cant_acces_if_not_logged_in(self):
+        response = self.client.get(self.url)
+        self.assertRedirects(response, reverse('users:login') + '?next=' + self.url)
+
+    def test_includes_change_password(self):
+        self.client.force_login(self.user)
+        response = self.client.get(self.url)
+        self.assertContains(response, reverse('users:password_change'))
+
+    def test_doesnt_includes_change_password_for_oauth(self):
+        self.client.force_login(OAuthUserFactory())
+        response = self.client.get(self.url)
+        self.assertNotContains(response, reverse('users:password_change'))
+
+    def test_email_unique(self):
+        other_user = UserFactory()
+        self.client.post(self.url, data={'email': other_user.email})
+        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.client.force_login(self.user)
+        self.client.post(self.url, data={'email': new_email})
+        self.user.refresh_from_db()
+        self.assertEqual(self.user.email, new_email)
-- 
GitLab