diff --git a/sizakat/apps/mustahik/query.py b/sizakat/apps/mustahik/query.py new file mode 100644 index 0000000000000000000000000000000000000000..70df3e525d5f9f7dbb2d41cc37a62be15a7562e1 --- /dev/null +++ b/sizakat/apps/mustahik/query.py @@ -0,0 +1,17 @@ +import graphene +from django.db.models import Q + +from .models import Mustahik +from .types import MustahikType + +class MustahikQuery(graphene.ObjectType): + mustahiks = graphene.List(MustahikType, statuses=graphene.List(graphene.String)) + + def resolve_mustahiks(self, info, statuses=[], **kwargs): + if statuses and len(statuses) > 0: + filter = Q(status=statuses[0]) + for status in statuses: + filter = filter | Q(status=status) + return Mustahik.objects.filter(filter) + + return Mustahik.objects.all() diff --git a/sizakat/apps/mustahik/tests.py b/sizakat/apps/mustahik/tests.py index 6b0c25954c08671872a5b198030f79b55da007a3..7bfe64c69439716686947b1d384617e430960443 100644 --- a/sizakat/apps/mustahik/tests.py +++ b/sizakat/apps/mustahik/tests.py @@ -159,3 +159,77 @@ class MustahikGraphQLTestCase(GraphQLTestCase): mustahik = Mustahik.objects.get(no_ktp='31751234567890') self.assertNotEqual(mustahik.description, old_desc) self.assertEqual(mustahik.description, new_desc) + + def test_query_mustahik_should_return_list_of_mustahiks(self): + response = self.query( + ''' + query mustahiksQuery{ + mustahiks { + id, + name + } + } + ''', + op_name='mustahiksQuery' + ) + + self.assertResponseNoErrors(response) + + content = json.loads(response.content) + self.assertEqual(len(content['data']['mustahiks']), 1) + self.assertEqual(content['data']['mustahiks'][0]['name'], 'mustahik') + + def test_query_mustahiks_if_statuses_is_set_should_return_list_of_mustahiks_with_coresponding_status(self): + Mustahik.objects.create( + name='test', + no_ktp='11751234567890', + phone='081234567890', + address='Jalan raya depok', + province='Jawa Barat', + regency='Depok', + rt='003', + rw='002', + birthdate=date(1987, 6, 5), + status=Mustahik.Status.YATIM, + family_size=4, + description='desc' + ) + + response = self.query( + ''' + query mustahiksQuery($statuses: [String]) { + mustahiks(statuses: $statuses) { + id, + name, + status + } + } + ''', + op_name='mustahiksQuery', + variables={'statuses': [Mustahik.Status.MISKIN]} + ) + + content = json.loads(response.content) + self.assertEqual(len(content['data']['mustahiks']), 1) + + for mustahik in content['data']['mustahiks']: + self.assertEqual(mustahik['status'], Mustahik.Status.MISKIN) + + def test_query_mustahiks_if_statuses_is_provided_and_no_mustahiks_are_qualified_it_should_return_empty_list(self): + response = self.query( + ''' + query mustahiksQuery($statuses: [String]) { + mustahiks(statuses: $statuses) { + id, + name, + status + } + } + ''', + op_name='mustahiksQuery', + variables={'statuses': [Mustahik.Status.JANDA]} + ) + + content = json.loads(response.content) + self.assertEqual(len(content['data']['mustahiks']), 0) + diff --git a/sizakat/schema.py b/sizakat/schema.py index 3737a29b8515688328a44aa17dd15a830e00deb4..93b39bb4094d9a43f7ee97fd96e950f4527f0698 100644 --- a/sizakat/schema.py +++ b/sizakat/schema.py @@ -2,13 +2,14 @@ import graphene from graphene_django import DjangoObjectType from .apps.mustahik.mutations import MustahikMutation +from .apps.mustahik.query import MustahikQuery ABOUT = 'Si Zakat merupakan sistem informasi untuk membantu masjid dalam \ mengelola transaksi zakat. Sistem ini dibuat oleh tim lab 1231, \ yang dipimpin oleh Prof. Dr. Wisnu Jatmiko.' -class Query(graphene.ObjectType): +class Query(MustahikQuery, graphene.ObjectType): about = graphene.String() def resolve_about(self, info):