From 0c0cfb4111c4721c04e98803648259312287af8e Mon Sep 17 00:00:00 2001
From: Yirou Qiu <y2qiu@uwaterloo.ca>
Date: Sat, 8 Apr 2023 16:09:59 -0400
Subject: [PATCH] add tests for billSearch

---
 core/tests/test_bill.py        |  14 +--
 core/tests/test_bill_search.py | 170 +++++++++++++++++++++++++++++++++
 2 files changed, 177 insertions(+), 7 deletions(-)
 create mode 100644 core/tests/test_bill_search.py

diff --git a/core/tests/test_bill.py b/core/tests/test_bill.py
index 1a1946d..2593b94 100644
--- a/core/tests/test_bill.py
+++ b/core/tests/test_bill.py
@@ -7,14 +7,14 @@ from core.models.bill import Bill
 endpoint = "/api/bill/"
 
 data_1 = {
-    "title": "water",
+    "wallet": 3,
     "price": "0.85",
     "comment": "discount",
     "categories": 8
 }
 
 data_2 = {
-    "title": "mattress",
+    "wallet": 1,
     "price": "99.65",
     "comment": "None",
     "categories": 2
@@ -56,7 +56,7 @@ class BillTests(APITestCase):
         get_response = self.client.get(endpoint)
         # print(get_response.json())
         self.assertEqual(get_response.status_code, 200)
-        self.assertEqual(get_response.json()["title"],data_1["title"])
+        self.assertEqual(get_response.json()["wallet"],data_1["wallet"])
         self.assertEqual(get_response.json()["price"],data_1["price"])
         self.assertEqual(get_response.json()["categories"],data_1["categories"])
         self.assertEqual(get_response.json()["comment"],data_1["comment"])
@@ -68,7 +68,7 @@ class BillTests(APITestCase):
 
         endpoint = f"/api/bill/{Bill.objects.all()[0].id}/"
         data_updated = {
-            "title": "buttersquash",
+            "wallet": 2,
             "price": "0.01",
             "comment": "juicy",
             "categories": 4
@@ -76,21 +76,21 @@ class BillTests(APITestCase):
         get_response = self.client.put(endpoint, data_updated, format='json')
         # print(get_response.json())
         self.assertEqual(get_response.status_code, 200)
-        self.assertEqual(get_response.json()["title"],data_updated["title"])
+        self.assertEqual(get_response.json()["wallet"],data_updated["wallet"])
         self.assertEqual(get_response.json()["price"],data_updated["price"])
         self.assertEqual(get_response.json()["categories"],data_updated["categories"])
         self.assertEqual(get_response.json()["comment"],data_updated["comment"])
 
         ## partial update
         data_updated_2 = {
-            "title": "buttersquash",
+            "wallet": 2,
             "price": "56.60",
             "comment": "juicy",
             "categories": 4
         }
         get_response = self.client.put(endpoint, data_updated_2, format='json')
         self.assertEqual(get_response.status_code, 200)
-        self.assertEqual(get_response.json()["title"],data_updated_2["title"])
+        self.assertEqual(get_response.json()["wallet"],data_updated_2["wallet"])
         self.assertEqual(get_response.json()["price"],data_updated_2["price"])
         self.assertEqual(get_response.json()["categories"],data_updated_2["categories"])
         self.assertEqual(get_response.json()["comment"],data_updated_2["comment"])
diff --git a/core/tests/test_bill_search.py b/core/tests/test_bill_search.py
new file mode 100644
index 0000000..5e57625
--- /dev/null
+++ b/core/tests/test_bill_search.py
@@ -0,0 +1,170 @@
+from django.contrib.auth.models import User
+from rest_framework.test import APITestCase
+from knox.models import AuthToken
+
+from core.models.bill import Bill
+
+from datetime import date
+
+endpoint = "/api/bill/"
+
+data_1 = {
+    "wallet": 3,
+    "price": "0.85",
+    "comment": "discount",
+    "categories": 8
+}
+
+data_2 = {
+    "wallet": 1,
+    "price": "99.65",
+    "comment": "None",
+    "categories": 2
+}
+
+
+class BillTests(APITestCase):
+    def setUp(self):
+        username = "xjhmlcy"
+        email = "xjhmlcy123@gmail.com"
+        password = "abcdefg123"
+        user = User.objects.create_user(username=username, email=email, password=password)
+        token, token_key = AuthToken.objects.create(user)
+        self.client.credentials(HTTP_AUTHORIZATION='Token ' + token_key)
+
+    def test_categories_search(self):
+
+        endpoint = "/api/bill/"
+
+        get_response_create_1 = self.client.post(endpoint, data_1, format='json')
+        get_response_create_2 = self.client.post(endpoint, data_2, format='json')
+
+        self.assertEqual(get_response_create_1.status_code, 201)
+        self.assertEqual(get_response_create_2.status_code, 201)
+
+        endpoint = "/api/bill/search/?item=categories&keyword=8"
+
+        get_response = self.client.get(endpoint)
+        self.assertEqual(get_response.status_code, 200)
+        self.assertEqual(get_response.json()[0]["wallet"],data_1["wallet"])
+        self.assertEqual(get_response.json()[0]["price"],data_1["price"])
+        self.assertEqual(get_response.json()[0]["categories"],data_1["categories"])
+        self.assertEqual(get_response.json()[0]["comment"],data_1["comment"])
+
+
+
+        endpoint = "/api/bill/search/?item=categories&keyword=2"
+
+        get_response = self.client.get(endpoint)
+        self.assertEqual(get_response.status_code, 200)
+        self.assertEqual(get_response.json()[0]["wallet"],data_2["wallet"])
+        self.assertEqual(get_response.json()[0]["price"],data_2["price"])
+        self.assertEqual(get_response.json()[0]["categories"],data_2["categories"])
+        self.assertEqual(get_response.json()[0]["comment"],data_2["comment"])
+
+
+    def test_price_search(self):
+
+        endpoint = "/api/bill/"
+
+        get_response_create_1 = self.client.post(endpoint, data_1, format='json')
+        get_response_create_2 = self.client.post(endpoint, data_2, format='json')
+
+        self.assertEqual(get_response_create_1.status_code, 201)
+        self.assertEqual(get_response_create_2.status_code, 201)
+
+        endpoint = "/api/bill/search/?item=price&keyword=0.85"
+
+        get_response = self.client.get(endpoint)
+        self.assertEqual(get_response.status_code, 200)
+        self.assertEqual(get_response.json()[0]["wallet"],data_1["wallet"])
+        self.assertEqual(get_response.json()[0]["price"],data_1["price"])
+        self.assertEqual(get_response.json()[0]["categories"],data_1["categories"])
+        self.assertEqual(get_response.json()[0]["comment"],data_1["comment"])
+
+
+
+        endpoint = "/api/bill/search/?item=price&keyword=99.65"
+
+        get_response = self.client.get(endpoint)
+        self.assertEqual(get_response.status_code, 200)
+        self.assertEqual(get_response.json()[0]["wallet"],data_2["wallet"])
+        self.assertEqual(get_response.json()[0]["price"],data_2["price"])
+        self.assertEqual(get_response.json()[0]["categories"],data_2["categories"])
+        self.assertEqual(get_response.json()[0]["comment"],data_2["comment"])
+
+
+    def test_date_search(self):
+
+        # date: today
+        data_1 = {
+            "wallet": 3,
+            "price": "0.85",
+            "comment": "discount",
+            "categories": 8,
+        }
+
+        # date: this month
+        data_2 = {
+            "wallet": 1,
+            "price": "99.65",
+            "comment": "None",
+            "categories": 2,
+            "date": date( date.today().year, date.today().month, 2)
+        }
+
+        # date: this year
+        data_3 = {
+            "wallet": 2,
+            "price": "8.88",
+            "comment": "",
+            "categories": 1,
+            "date": date( date.today().year, 2, date.today().day)
+        }
+
+        endpoint = "/api/bill/"
+
+        get_response_create_1 = self.client.post(endpoint, data_3, format='json')
+
+        self.assertEqual(get_response_create_1.status_code, 201)
+
+        endpoint = "/api/bill/search/?item=date&keyword=year"
+
+        get_response = self.client.get(endpoint)
+        self.assertEqual(get_response.status_code, 200)
+        self.assertEqual(get_response.json()[0]["wallet"],data_3["wallet"])
+        self.assertEqual(get_response.json()[0]["price"],data_3["price"])
+        self.assertEqual(get_response.json()[0]["categories"],data_3["categories"])
+        self.assertEqual(get_response.json()[0]["comment"],data_3["comment"])
+
+
+        endpoint = "/api/bill/"
+
+        get_response_create_2 = self.client.post(endpoint, data_2, format='json')
+
+        self.assertEqual(get_response_create_2.status_code, 201)
+
+        endpoint = "/api/bill/search/?item=date&keyword=month"
+
+        get_response = self.client.get(endpoint)
+        self.assertEqual(get_response.status_code, 200)
+        self.assertEqual(get_response.json()[0]["wallet"],data_2["wallet"])
+        self.assertEqual(get_response.json()[0]["price"],data_2["price"])
+        self.assertEqual(get_response.json()[0]["categories"],data_2["categories"])
+        self.assertEqual(get_response.json()[0]["comment"],data_2["comment"])
+
+
+        endpoint = "/api/bill/"
+
+        get_response_create_3 = self.client.post(endpoint, data_1, format='json')
+
+        self.assertEqual(get_response_create_3.status_code, 201)
+
+        endpoint = "/api/bill/search/?item=date&keyword=day"
+
+        get_response = self.client.get(endpoint)
+        self.assertEqual(get_response.status_code, 200)
+        self.assertEqual(get_response.json()[0]["wallet"],data_1["wallet"])
+        self.assertEqual(get_response.json()[0]["price"],data_1["price"])
+        self.assertEqual(get_response.json()[0]["categories"],data_1["categories"])
+        self.assertEqual(get_response.json()[0]["comment"],data_1["comment"])
-- 
GitLab