diff --git a/sizakat/mustahik/models.py b/sizakat/mustahik/models.py
index 18067f07da5fdae21f4334fe334540eddaf831a1..be83d10ae16495091cf70bfb39b9a99a10ab3ea3 100644
--- a/sizakat/mustahik/models.py
+++ b/sizakat/mustahik/models.py
@@ -49,6 +49,13 @@ class DataSource(models.Model):
         INSTITUSI = ('INSTITUSI', 'Institusi')
         PEKERJA = ('PEKERJA', 'Pekerja')
 
+    category = models.CharField(max_length=32, choices=Category.choices)
+
+
+class DataSourceDetail(models.Model):
+    class Meta:
+        abstract = True
+
     pic_name = models.CharField(max_length=150)
     pic_ktp = models.CharField(
         max_length=32,
@@ -59,13 +66,9 @@ class DataSource(models.Model):
         validators=[validate_numeric_character]
     )
     pic_position = models.CharField(max_length=50)
-    category = models.CharField(max_length=32, choices=Category.choices)
-
-    class Meta:
-        unique_together = ('pic_ktp', 'category',)
 
 
-class DataSourceWarga(models.Model):
+class DataSourceWarga(DataSourceDetail):
     province = models.CharField(max_length=50)
     regency = models.CharField(max_length=50)
     sub_district = models.CharField(max_length=50)
@@ -82,7 +85,7 @@ class DataSourceWarga(models.Model):
     )
 
 
-class DataSourceInstitusi(models.Model):
+class DataSourceInstitusi(DataSourceDetail):
     name = models.CharField(max_length=150)
     province = models.CharField(max_length=50)
     regency = models.CharField(max_length=50)
@@ -101,7 +104,7 @@ class DataSourceInstitusi(models.Model):
     )
 
 
-class DataSourcePekerja(models.Model):
+class DataSourcePekerja(DataSourceDetail):
     profession = models.CharField(max_length=50)
     location = models.CharField(max_length=50)
     data_source = models.OneToOneField(
diff --git a/sizakat/mustahik/tests.py b/sizakat/mustahik/tests.py
index fabe5d036a68e49297fa5e5a74a6b2a9f423f653..d85d0f8d3d464f7fc2dc93a9ac2072f4834b396d 100644
--- a/sizakat/mustahik/tests.py
+++ b/sizakat/mustahik/tests.py
@@ -12,29 +12,13 @@ from .models import DataSource, DataSourceInstitusi, DataSourcePekerja, DataSour
 
 class MustahikModelTestCase(TestCase):
     def setUp(self):
-        data_source_institusi = DataSource.objects.create(
-            pic_name='pic test',
-            pic_ktp='1234567890',
-            pic_phone='0812389120',
-            pic_position='test',
-            category=DataSource.Category.INSTITUSI
-        )
-        institusi_detail = DataSourceInstitusi.objects.create(
-            name='lembaga test',
-            address='jl test',
-            data_source=data_source_institusi,
-            province='jakarta',
-            regency='jakarta timur',
-            sub_district='makasar',
-            village='pinangranti',
-            rt='001',
-            rw='001'
-        )
+        data_source_detail = {
+            'pic_name': 'pic test',
+            'pic_ktp': '1234567890',
+            'pic_phone': '0812389120',
+            'pic_position': 'test',
+        }
         data_source_pekerja = DataSource.objects.create(
-            pic_name='pic test',
-            pic_ktp='1234567891',
-            pic_phone='0812389121',
-            pic_position='test',
             category=DataSource.Category.PEKERJA
         )
         pekerja_detail = DataSourcePekerja.objects.create(
@@ -42,53 +26,26 @@ class MustahikModelTestCase(TestCase):
             profession='tester',
             location='jl tester'
         )
-        data_source_warga = DataSource.objects.create(
-            pic_name='pic test',
-            pic_ktp='1234567892',
-            pic_phone='0812389122',
-            pic_position='test',
-            category=DataSource.Category.WARGA
-        )
-        institusi_detail = DataSourceWarga.objects.create(
-            data_source=data_source_warga,
-            province='jakarta',
-            regency='jakarta timur',
-            sub_district='makasar',
-            village='pinangranti',
-            rt='001',
-            rw='001'
-        )
+        mustahik_base = {
+            'phone': '081234567890',
+            'address': 'Jalan raya depok',
+            'birthdate': date(1987, 6, 5),
+            'status': Mustahik.Status.MISKIN,
+            'gender': Mustahik.Gender.LAKILAKI,
+        }
         mustahik = Mustahik.objects.create(
-            name='mustahik',
-            no_ktp='31751234567890',
-            phone='081234567890',
-            address='Jalan raya depok',
-            birthdate=date(1987, 6, 5),
-            status=Mustahik.Status.MISKIN,
-            gender=Mustahik.Gender.LAKILAKI,
-            data_source=data_source_warga
+            name='mustahik1',
+            no_ktp='31751234567891',
+            data_source=data_source_pekerja,
+            **mustahik_base
         )
 
-    def test_mustahik_creation_from_datasource_institusi(self):
-        mustahik = Mustahik.objects.get(no_ktp='31751234567890')
+    def test_mustahik_creation(self):
+        mustahik = Mustahik.objects.get(no_ktp='31751234567891')
         self.assertTrue(isinstance(mustahik, Mustahik))
 
-    def test_mustahik_change_datasource_to_datasource_pekerja(self):
-        data_source_pekerja = DataSource.objects.get(pic_ktp='1234567891')
-        mustahik = Mustahik.objects.get(no_ktp='31751234567890')
-        mustahik.data_source = data_source_pekerja
-        mustahik.save()
-        self.assertEqual(mustahik.data_source.category, DataSource.Category.PEKERJA)
-
-    def test_mustahik_change_datasource_to_datasource_warga(self):
-        data_source_warga = DataSource.objects.get(pic_ktp='1234567892')
-        mustahik = Mustahik.objects.get(no_ktp='31751234567890')
-        mustahik.data_source = data_source_warga
-        mustahik.save()
-        self.assertEqual(mustahik.data_source.category, DataSource.Category.WARGA)
-
     def test_calculate_mustahik_age(self):
-        mustahik = Mustahik.objects.get(no_ktp='31751234567890')
+        mustahik = Mustahik.objects.get(no_ktp='31751234567891')
         self.assertEqual(
             mustahik.calculate_age(),
             timezone.now().year - mustahik.birthdate.year
@@ -100,14 +57,14 @@ class MustahikGraphQLTestCase(GraphQLTestCase):
 
     def setUp(self):
         data_source_warga = DataSource.objects.create(
-            pic_name='pic test',
-            pic_ktp='1234567892',
-            pic_phone='0812389122',
-            pic_position='test',
             category=DataSource.Category.WARGA
         )
         data_source_detail = DataSourceWarga.objects.create(
             data_source=data_source_warga,
+            pic_name='pic test',
+            pic_ktp='1234567892',
+            pic_phone='0812389122',
+            pic_position='test',
             province='jakarta',
             regency='jakarta timur',
             sub_district='makasar',
@@ -126,9 +83,14 @@ class MustahikGraphQLTestCase(GraphQLTestCase):
             data_source=data_source_warga
         )
 
+    def test_about_query(self):
+        response = self.query('{ about }')
+        self.assertResponseNoErrors(response)
+
     def test_mustahik_mutation_can_add_new_mustahik(self):
         no_ktp = '123891210121'
-        data_source = DataSource.objects.get(pic_ktp='1234567892')
+        data_source_warga = DataSourceWarga.objects.get(pic_ktp='1234567892')
+        data_source = data_source_warga.data_source
         response = self.query(
             '''
             mutation mustahikMutation($input: MustahikMutationInput!) {
@@ -169,7 +131,8 @@ class MustahikGraphQLTestCase(GraphQLTestCase):
 
     def test_mustahik_mutation_can_update_mustahik(self):
         mustahik = Mustahik.objects.get(no_ktp='31751234567890')
-        data_source = mustahik.data_source
+        data_source_warga = DataSourceWarga.objects.get(pic_ktp='1234567892')
+        data_source = data_source_warga.data_source
         mustahik_id = mustahik.pk
         old_status = mustahik.status
         new_status = 'MUSAFIR'
@@ -408,18 +371,60 @@ class MustahikGraphQLTestCase(GraphQLTestCase):
         self.assertTrue(all([category == DataSource.Category.WARGA for category in categories]))
 
     def test_data_source_query_detail_with_given_id(self):
+        data_source_detail = {
+            'pic_name': 'pic test',
+            'pic_ktp': '1234567890',
+            'pic_phone': '0812389120',
+            'pic_position': 'test',
+        }
+        data_source_pekerja = DataSource.objects.create(
+            category=DataSource.Category.PEKERJA
+        )
+        pekerja_detail = DataSourcePekerja.objects.create(
+            data_source=data_source_pekerja,
+            profession='tester',
+            location='jl tester',
+            **data_source_detail
+        )
+        data_source_institusi = DataSource.objects.create(
+            category=DataSource.Category.INSTITUSI
+        )
+        pekerja_detail = DataSourceInstitusi.objects.create(
+            data_source=data_source_institusi,
+            name='test',
+            province='test',
+            regency='test',
+            sub_district='test',
+            village='test',
+            rw='01',
+            rt='01',
+            address='test',
+            **data_source_detail
+        )
         response = self.query(
             '''
-            query dataSourceQuery($id: ID!) {
-                dataSource(id: $id) {
+            query dataSourceQuery($id1: ID!, $id2: ID!, $id3: ID!) {
+                q1: dataSource(id: $id1) {
+                    id
+                    detail: dataSourceDetail { __typename }
+                }
+                q2: dataSource(id: $id2) {
+                    id
+                    detail: dataSourceDetail { __typename }
+                }
+                q3: dataSource(id: $id3) {
                     id
-                    picName
+                    detail: dataSourceDetail { __typename }
                 }
             }
             ''',
             op_name='dataSourceQuery',
-            variables={'id': 1}
+            variables={'id1': 2, 'id2': 3, 'id3': 4}
         )
         content = json.loads(response.content)
-        self.assertEqual(content['data']['dataSource']['id'], '1')
-        self.assertEqual(content['data']['dataSource']['picName'], 'pic test')
+        self.assertEqual(content['data']['q1']['id'], '2')
+        self.assertEqual(content['data']['q1']['detail']['__typename'], 'DataSourceWargaType')
+        self.assertEqual(content['data']['q2']['id'], '3')
+        self.assertEqual(content['data']['q2']['detail']['__typename'], 'DataSourcePekerjaType')
+        self.assertEqual(content['data']['q3']['id'], '4')
+        self.assertEqual(content['data']['q3']['detail']['__typename'], 'DataSourceInstitusiType')