From 52afabc1e1db91c73e536ac82281f420680c055c Mon Sep 17 00:00:00 2001
From: Chris Li <c58li@uwaterloo.ca>
Date: Thu, 9 Mar 2023 02:52:35 -0500
Subject: [PATCH] Add coverage package for test report.

---
 core/tests/test_auth.py     | 39 +++++++++++++++++++++++++
 core/tests/test_password.py | 57 +++++++++++++++++++++++++++++++++++++
 requirements.txt            |  1 +
 3 files changed, 97 insertions(+)
 create mode 100644 core/tests/test_password.py

diff --git a/core/tests/test_auth.py b/core/tests/test_auth.py
index 4637c80..2920c63 100644
--- a/core/tests/test_auth.py
+++ b/core/tests/test_auth.py
@@ -128,3 +128,42 @@ class AuthTests(APITestCase):
         }
         response = self.client.post(url, data, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
+    
+    def test_validate_token_default(self):
+        username = "xjhmlcy"
+        email = "xjhmlcy123@gmail.com"
+        password = "abcdefg123"
+        token, token_key = self.add_test_person(username, email, password)
+        self.client.credentials(HTTP_AUTHORIZATION='Token ' + token_key)
+
+        url = "/api/auth/validate-token"
+        response = self.client.get(url)
+        self.assertEqual(response.status_code, status.HTTP_200_OK)
+        self.assertEqual(response.data['valid'], 'true')
+    
+    def test_validate_token_invalid(self):
+        username = "xjhmlcy"
+        email = "xjhmlcy123@gmail.com"
+        password = "abcdefg123"
+        token, token_key = self.add_test_person(username, email, password)
+        self.client.credentials(HTTP_AUTHORIZATION='Token ' + token_key[:-1] + "1")
+        token.user.is_active = True
+        token.user.save()
+
+        url = "/api/auth/validate-token"
+        response = self.client.get(url)
+        self.assertEqual(response.status_code, status.HTTP_200_OK)
+        self.assertEqual(response.data['valid'], 'false')
+
+    def test_varify_user_and_activate_default(self):
+        username = "xjhmlcy"
+        email = "xjhmlcy123@gmail.com"
+        password = "abcdefg123"
+        token, token_key = self.add_test_person(username, email, password)
+        token.user.is_active = False
+        token.user.save()
+
+        url = f"/api/auth/activate/{token.digest}"
+        response = self.client.get(url)
+        self.assertEqual(response.status_code, status.HTTP_200_OK)
+        self.assertTrue(User.objects.get().is_active)
\ No newline at end of file
diff --git a/core/tests/test_password.py b/core/tests/test_password.py
new file mode 100644
index 0000000..64683d0
--- /dev/null
+++ b/core/tests/test_password.py
@@ -0,0 +1,57 @@
+from django.contrib.auth.models import User
+from rest_framework.test import APITestCase
+from rest_framework import status
+from knox.models import AuthToken
+
+from core.models.profile import Profile
+
+
+class PasswordTests(APITestCase):
+
+    """
+    Test suite for Password
+    """
+    def add_test_person(self, username, email, password):
+        user = User.objects.create_user(username=username, email=email, password=password)
+        return AuthToken.objects.create(user)
+
+    def test_password_change_default(self):
+        username = "xjhmlcy"
+        email = "xjhmlcy123@gmail.com"
+        old_password = "abcdefg123"
+        new_password = "abcdefg123456"
+        token, token_key = self.add_test_person(username, email, old_password)
+        self.client.credentials(HTTP_AUTHORIZATION='Token ' + token_key)
+
+        url = "/api/change-password"
+        data = {
+            "old_password": old_password,
+            "new_password": new_password
+        }
+        response = self.client.patch(url, data, format='json')
+        self.assertEqual(response.status_code, status.HTTP_200_OK)
+
+        url = "/api/auth/login"
+        data = {
+            "username": email,
+            "password": new_password
+        }
+        response = self.client.post(url, data, format='json')
+        self.assertEqual(response.status_code, status.HTTP_200_OK)
+    
+    def test_password_change_wrong_old_password(self):
+        username = "xjhmlcy"
+        email = "xjhmlcy123@gmail.com"
+        old_password = "abcdefg123"
+        new_password = "abcdefg123456"
+        token, token_key = self.add_test_person(username, email, old_password)
+        self.client.credentials(HTTP_AUTHORIZATION='Token ' + token_key)
+
+        url = "/api/change-password"
+        data = {
+            "old_password": old_password + "123",
+            "new_password": new_password
+        }
+        response = self.client.patch(url, data, format='json')
+        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
+
diff --git a/requirements.txt b/requirements.txt
index faa0622..369acab 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,3 +1,4 @@
+coverage==6.3.2
 Django==4.1
 django_countries==7.5
 django_extensions==3.2.1
-- 
GitLab