diff --git a/core/tests/test_bill.py b/core/tests/test_bill.py
index 1a1946d1f8d3e450ee0d1dfee526f77135842336..2593b944ab0a93e02b2d74fd1d9ae921cd5a6f95 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 0000000000000000000000000000000000000000..5e57625593bfbea47e3d6bdca6cd9efe3a67dfb0
--- /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"])