diff --git a/smash/web/tests/test_api.py b/smash/web/tests/test_api.py
index 56aea99bf571e4dc3c88f32acb80c9811a8d2b38..762001b13da911d651779e672295d8af52313e7a 100644
--- a/smash/web/tests/test_api.py
+++ b/smash/web/tests/test_api.py
@@ -9,7 +9,8 @@ from django.urls import reverse
 from web.tests.functions import create_subject, create_worker, create_appointment_type, create_location, \
     create_get_suffix
 from web.views.subject import SUBJECT_LIST_GENERIC, SUBJECT_LIST_NO_VISIT, SUBJECT_LIST_REQUIRE_CONTACT
-from web.api_views import get_subjects_order
+from web.api_views import get_subjects_order, get_subjects_filtered, serialize_subject
+
 from web.models import Subject
 
 
@@ -188,6 +189,24 @@ class TestApi(TestCase):
         self.assertEqual(response.status_code, 200)
         self.assertTrue(name in response.content)
 
+    def check_subject_filtered(self, filters, result):
+        subjects = get_subjects_filtered(Subject.objects.all(), filters)
+        self.assertEqual(len(result), subjects.count())
+        for index in range(len(result)):
+            self.assertEqual(result[index], subjects[index])
+
+    def check_subject_ordered(self, order, result):
+        subjects = get_subjects_order(Subject.objects.all(), order, "asc")
+        self.assertEqual(len(result), subjects.count())
+        for index in range(len(result)):
+            self.assertEqual(result[index], subjects[index])
+
+        subjects = get_subjects_order(Subject.objects.all(), order, "desc")
+        length = len(result)
+        self.assertEqual(length, subjects.count())
+        for index in range(length):
+            self.assertEqual(result[length - index - 1], subjects[index])
+
     def test_subjects_sort_nd_number(self):
         subject = self.subject
         subject.nd_number = "PPP"
@@ -197,10 +216,12 @@ class TestApi(TestCase):
         subject2.nd_number = "QQQ"
         subject2.save()
 
-        subjects = get_subjects_order(Subject.objects.all(), "nd_number", "desc")
+        self.check_subject_ordered("nd_number", [subject, subject2])
 
-        self.assertEqual(subject2, subjects[0])
-        self.assertEqual(subject, subjects[1])
+    def test_subjects_sort_default_location(self):
+        subject = self.subject
+
+        self.check_subject_ordered("default_location", [subject])
 
     def test_subjects_sort_screening_number(self):
         subject = self.subject
@@ -211,10 +232,7 @@ class TestApi(TestCase):
         subject2.screening_number = "QQQ"
         subject2.save()
 
-        subjects = get_subjects_order(Subject.objects.all(), "screening_number", "asc")
-
-        self.assertEqual(subject, subjects[0])
-        self.assertEqual(subject2, subjects[1])
+        self.check_subject_ordered("screening_number", [subject, subject2])
 
     def test_subjects_sort_last_name(self):
         subject = self.subject
@@ -225,10 +243,7 @@ class TestApi(TestCase):
         subject2.last_name = "YYY"
         subject2.save()
 
-        subjects = get_subjects_order(Subject.objects.all(), "last_name", "desc")
-
-        self.assertEqual(subject2, subjects[0])
-        self.assertEqual(subject, subjects[1])
+        self.check_subject_ordered("last_name", [subject, subject2])
 
     def test_subjects_sort_dead(self):
         subject = self.subject
@@ -239,13 +254,7 @@ class TestApi(TestCase):
         subject2.dead = False
         subject2.save()
 
-        subjects = get_subjects_order(Subject.objects.all(), "dead", "asc")
-        self.assertEqual(subject2, subjects[0])
-        self.assertEqual(subject, subjects[1])
-
-        subjects = get_subjects_order(Subject.objects.all(), "dead", "desc")
-        self.assertEqual(subject, subjects[0])
-        self.assertEqual(subject2, subjects[1])
+        self.check_subject_ordered("dead", [subject2, subject])
 
     def test_subjects_sort_resigned(self):
         subject = self.subject
@@ -256,13 +265,7 @@ class TestApi(TestCase):
         subject2.resigned = False
         subject2.save()
 
-        subjects = get_subjects_order(Subject.objects.all(), "resigned", "asc")
-        self.assertEqual(subject2, subjects[0])
-        self.assertEqual(subject, subjects[1])
-
-        subjects = get_subjects_order(Subject.objects.all(), "resigned", "desc")
-        self.assertEqual(subject, subjects[0])
-        self.assertEqual(subject2, subjects[1])
+        self.check_subject_ordered("resigned", [subject2, subject])
 
     def test_subjects_sort_postponed(self):
         subject = self.subject
@@ -273,12 +276,92 @@ class TestApi(TestCase):
         subject2.postponed = False
         subject2.save()
 
-        subjects = get_subjects_order(Subject.objects.all(), "postponed", "asc")
-        self.assertEqual(subject2, subjects[0])
-        self.assertEqual(subject, subjects[1])
+        self.check_subject_ordered("postponed", [subject2, subject])
+
+    def test_subjects_filter_dead(self):
+        subject = self.subject
+        subject.dead = True
+        subject.save()
+
+        subject2 = create_subject(2)
+        subject2.dead = False
+        subject2.save()
+
+        self.check_subject_filtered([["dead", "true"]], [subject])
+        self.check_subject_filtered([["dead", "false"]], [subject2])
+
+    def test_subjects_filter_nd_number(self):
+        subject = self.subject
+        subject.nd_number = "PPP"
+        subject.save()
+
+        subject2 = create_subject(2)
+        subject2.nd_number = "QQQ"
+        subject2.save()
+
+        self.check_subject_filtered([["nd_number", "P"]], [subject])
+
+    def test_subjects_filter_screening_number(self):
+        subject = self.subject
+        subject.screening_number = "PPP"
+        subject.save()
+
+        subject2 = create_subject(2)
+        subject2.screening_number = "QQQ"
+        subject2.save()
 
-        subjects = get_subjects_order(Subject.objects.all(), "postponed", "desc")
-        self.assertEqual(subject, subjects[0])
-        self.assertEqual(subject2, subjects[1])
+        self.check_subject_filtered([["screening_number", "Q"]], [subject2])
 
+    def test_subjects_filter_last_name(self):
+        subject = self.subject
+        subject.last_name = "XXX"
+        subject.save()
+
+        subject2 = create_subject(2)
+        subject2.last_name = "YYY"
+        subject2.save()
+
+        self.check_subject_filtered([["last_name", "Q"]], [])
+
+    def test_subjects_filter_resigned(self):
+        subject = self.subject
+        subject.resigned = True
+        subject.save()
+
+        subject2 = create_subject(2)
+        subject2.resigned = False
+        subject2.save()
+
+        self.check_subject_filtered([["resigned", "true"]], [subject])
+        self.check_subject_filtered([["resigned", "false"]], [subject2])
+
+    def test_subjects_filter_postponed(self):
+        subject = self.subject
+        subject.postponed = True
+        subject.save()
+
+        subject2 = create_subject(2)
+        subject2.postponed = False
+        subject2.save()
+
+        self.check_subject_filtered([["postponed", "true"]], [subject])
+        self.check_subject_filtered([["postponed", "false"]], [subject2])
+
+    def test_subjects_filter_default_location(self):
+        subject = self.subject
+
+        self.check_subject_filtered([["default_location", str(subject.default_location.id)]], [subject])
+        self.check_subject_filtered([["default_location", "-1"]], [])
+
+    def test_subjects_filter_unknown(self):
+        subject = self.subject
+
+        self.check_subject_filtered([["some_unknown", "zxczxc"]], [subject])
+        self.check_subject_filtered([["", ""]], [subject])
+
+    def test_serialize_subject(self):
+        subject = self.subject
+        subject.dead = True
 
+        subject_json = serialize_subject(subject);
+        self.assertEqual("YES", subject_json["dead"]);