From 33267814fb4c096727be052d649e92984d428a0d Mon Sep 17 00:00:00 2001 From: Christopher Samuel Date: Wed, 19 May 2021 18:37:41 +0700 Subject: [PATCH 1/7] [RED] Add tests for search kegiatan + removed excess newlines in kegiatan views --- informasi_fasilitas/test_views_kegiatan.py | 41 ++++++++++++++++++++-- informasi_fasilitas/views_kegiatan.py | 12 ++----- 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/informasi_fasilitas/test_views_kegiatan.py b/informasi_fasilitas/test_views_kegiatan.py index cd84115..41ce2f0 100644 --- a/informasi_fasilitas/test_views_kegiatan.py +++ b/informasi_fasilitas/test_views_kegiatan.py @@ -29,6 +29,14 @@ class KegiatanRelatedViewTest(InformasiFasilitasViewTest): 'place_id': self.lokasi.place_id, 'kegiatan_id': self.kegiatan.id, } + self.kwargs_search_kegiatan = { + 'place_id': self.lokasi.place_id, + 'query': 'mock', + } + self.kwargs_search_kegiatan_fail = { + 'place_id': self.lokasi.place_id, + 'query': 'this shouldnt exist', + } self.kwargs_kegiatan_id = {'kegiatan_id' : self.kegiatan.lokasi.place_id} @@ -52,8 +60,10 @@ class KegiatanRelatedViewTest(InformasiFasilitasViewTest): reverse('add-kegiatan', kwargs=self.kwargs_place_id) self.update_kegiatan_url = reverse('update-kegiatan', kwargs=self.kwargs_add_or_update_kegiatan) - - + self.search_kegiatan_url = reverse('search-kegiatan', + kwargs=self.kwargs_search_kegiatan) + self.search_kegiatan_fail_url = reverse('search-kegiatan', + kwargs=self.kwargs_search_kegiatan_fail) self.list_foto_kegiatan_url = \ reverse('list-foto-kegiatan', kwargs=self.kwargs_get_foto_kegiatan) @@ -212,3 +222,30 @@ class KegiatanRelatedViewTest(InformasiFasilitasViewTest): self.assertIn("test"+str(counter), item["foto"]) self.assertEqual(item["kegiatan"], self.kegiatan.id) counter += 1 + + def test_can_search_kegiatan(self): + response = Client().get(self.search_kegiatan_url) + self.assertEqual(response.status_code, HTTPStatus.OK) + content = json.loads(response.content.decode('utf-8')) + expected_json = { + str(self.kegiatan.id): { + 'id': self.kegiatan.id, + 'place_id': self.kegiatan.lokasi.place_id, + 'creator': self.kegiatan.user.last_name, + 'nama_kegiatan' : self.kegiatan.nama_kegiatan, + 'penyelenggara': self.kegiatan.penyelenggara, + 'deskripsi': self.kegiatan.deskripsi, + 'links': self.kegiatan.links, + 'narahubung': self.kegiatan.narahubung, + 'time_start': self.kegiatan.time_start, + 'time_end': self.kegiatan.time_end, + }, + } + self.assertEqual(content, expected_json) + + def test_search_kegiatan_empty_result_or_fail(self): + response = Client().get(self.search_kegiatan_fail_url) + self.assertEqual(response.status_code, HTTPStatus.OK) + content = json.loads(response.content.decode('utf-8')) + expected_json = {} + self.assertEqual(content, expected_json) diff --git a/informasi_fasilitas/views_kegiatan.py b/informasi_fasilitas/views_kegiatan.py index 7bf9c2c..b54939d 100644 --- a/informasi_fasilitas/views_kegiatan.py +++ b/informasi_fasilitas/views_kegiatan.py @@ -97,9 +97,9 @@ def list_foto_kegiatan(request, place_id, kegiatan_id): def _clean_json_kegiatan(kegiatan): - kegiatan.pop("user") - kegiatan.pop("lokasi") - return kegiatan + kegiatan.pop("user") + kegiatan.pop("lokasi") + return kegiatan def _add_foto_kegiatan(kegiatan, list_image): @@ -114,9 +114,3 @@ def _create_list_kegiatan_foto(kegiatan, list_image): foto = FotoKegiatan.objects.create(kegiatan=kegiatan, foto=image) list_kegiatan_foto.append(foto) return list_kegiatan_foto - - - - - - -- GitLab From 11077195cd43b29870414fba7c0e7b1800365fdf Mon Sep 17 00:00:00 2001 From: Christopher Samuel Date: Wed, 19 May 2021 18:45:29 +0700 Subject: [PATCH 2/7] [CHORES] Move branch --- informasi_fasilitas/test_views_kegiatan.py | 1 + 1 file changed, 1 insertion(+) diff --git a/informasi_fasilitas/test_views_kegiatan.py b/informasi_fasilitas/test_views_kegiatan.py index 41ce2f0..bccd547 100644 --- a/informasi_fasilitas/test_views_kegiatan.py +++ b/informasi_fasilitas/test_views_kegiatan.py @@ -249,3 +249,4 @@ class KegiatanRelatedViewTest(InformasiFasilitasViewTest): content = json.loads(response.content.decode('utf-8')) expected_json = {} self.assertEqual(content, expected_json) + -- GitLab From 8889106f360ee5d892391669e9488523602c285b Mon Sep 17 00:00:00 2001 From: Christopher Samuel Date: Sat, 22 May 2021 12:56:24 +0700 Subject: [PATCH 3/7] [CHORES] Fixed negative test for search kegiatan --- informasi_fasilitas/test_views_kegiatan.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/informasi_fasilitas/test_views_kegiatan.py b/informasi_fasilitas/test_views_kegiatan.py index bccd547..e0abf4a 100644 --- a/informasi_fasilitas/test_views_kegiatan.py +++ b/informasi_fasilitas/test_views_kegiatan.py @@ -245,8 +245,4 @@ class KegiatanRelatedViewTest(InformasiFasilitasViewTest): def test_search_kegiatan_empty_result_or_fail(self): response = Client().get(self.search_kegiatan_fail_url) - self.assertEqual(response.status_code, HTTPStatus.OK) - content = json.loads(response.content.decode('utf-8')) - expected_json = {} - self.assertEqual(content, expected_json) - + self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) -- GitLab From da229e2413809e5f38bc48c7fcc3a95889927550 Mon Sep 17 00:00:00 2001 From: Christopher Samuel Date: Sat, 22 May 2021 13:11:55 +0700 Subject: [PATCH 4/7] [CHORES] Removed unused key-value pair for search kegiatan kwargs --- informasi_fasilitas/test_views_kegiatan.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/informasi_fasilitas/test_views_kegiatan.py b/informasi_fasilitas/test_views_kegiatan.py index e0abf4a..76dcf03 100644 --- a/informasi_fasilitas/test_views_kegiatan.py +++ b/informasi_fasilitas/test_views_kegiatan.py @@ -29,14 +29,8 @@ class KegiatanRelatedViewTest(InformasiFasilitasViewTest): 'place_id': self.lokasi.place_id, 'kegiatan_id': self.kegiatan.id, } - self.kwargs_search_kegiatan = { - 'place_id': self.lokasi.place_id, - 'query': 'mock', - } - self.kwargs_search_kegiatan_fail = { - 'place_id': self.lokasi.place_id, - 'query': 'this shouldnt exist', - } + self.kwargs_search_kegiatan = {'query': 'mock',} + self.kwargs_search_kegiatan_fail = {'query': 'this shouldnt exist',} self.kwargs_kegiatan_id = {'kegiatan_id' : self.kegiatan.lokasi.place_id} -- GitLab From 89b9dca0dfde47d4b073bac23cf8c36932571bce Mon Sep 17 00:00:00 2001 From: Christopher Samuel Date: Sat, 22 May 2021 13:15:28 +0700 Subject: [PATCH 5/7] [GREEN] Implemented search Kegiatan to dev API + fixed minor logic issue in nearest Kegiatan --- informasi_fasilitas/urls.py | 3 +++ informasi_fasilitas/views_kegiatan.py | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/informasi_fasilitas/urls.py b/informasi_fasilitas/urls.py index 9529f3e..6442517 100644 --- a/informasi_fasilitas/urls.py +++ b/informasi_fasilitas/urls.py @@ -38,6 +38,9 @@ urlpatterns = [ path('lokasi/kegiatan-terdekat', views_kegiatan.nearest_kegiatan, name='nearest-kegiatan'), + + path('lokasi/search-kegiatan/', + views_kegiatan.search_kegiatan, name='search-kegiatan'), path('lokasi/add-kegiatan//', views_kegiatan.add_kegiatan, name='add-kegiatan'), diff --git a/informasi_fasilitas/views_kegiatan.py b/informasi_fasilitas/views_kegiatan.py index b54939d..90121cb 100644 --- a/informasi_fasilitas/views_kegiatan.py +++ b/informasi_fasilitas/views_kegiatan.py @@ -41,7 +41,7 @@ def detail_kegiatan(request, place_id, id): def nearest_kegiatan(request): time_now = timezone.now() queryset = Kegiatan.objects.filter(time_start__gte=time_now).order_by('time_start').first() - if queryset is None: + if not queryset.exists(): raise NotFound(detail="No Kegiatan available") serializer = KegiatanSerializer(queryset, many=False) return JsonResponse(_clean_json_kegiatan(serializer.data), status=HTTPStatus.OK) @@ -95,6 +95,19 @@ def list_foto_kegiatan(request, place_id, kegiatan_id): new_dict = {item['id']: dict(item) for item in data_response} return JsonResponse(new_dict, status=HTTPStatus.OK) +@api_view(['GET']) +@authentication_classes([]) +@permission_classes([]) +def search_kegiatan(request, query): + query_by_nama = Kegiatan.objects.filter(nama_kegiatan__icontains=query) + query_by_deskripsi = Kegiatan.objects.filter(deskripsi__icontains=query) + query_by_penyelenggara = Kegiatan.objects.filter(penyelenggara__icontains=query) + queryset = query_by_nama | query_by_deskripsi | query_by_penyelenggara + if not queryset.exists(): + raise NotFound(detail="No Kegiatan available") + serializer = KegiatanSerializer(queryset, many=True) + new_dict = {item['id']: _clean_json_kegiatan(dict(item)) for item in serializer.data} + return JsonResponse(new_dict, status=HTTPStatus.OK) def _clean_json_kegiatan(kegiatan): kegiatan.pop("user") -- GitLab From 7f401b0a303678d25b61c9d90ed1321907707919 Mon Sep 17 00:00:00 2001 From: Christopher Samuel Date: Sat, 22 May 2021 13:20:49 +0700 Subject: [PATCH 6/7] Revert "[GREEN] Implemented search Kegiatan to dev API + fixed minor logic issue in nearest Kegiatan" This reverts commit 89b9dca0dfde47d4b073bac23cf8c36932571bce. --- informasi_fasilitas/urls.py | 3 --- informasi_fasilitas/views_kegiatan.py | 15 +-------------- 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/informasi_fasilitas/urls.py b/informasi_fasilitas/urls.py index 6442517..9529f3e 100644 --- a/informasi_fasilitas/urls.py +++ b/informasi_fasilitas/urls.py @@ -38,9 +38,6 @@ urlpatterns = [ path('lokasi/kegiatan-terdekat', views_kegiatan.nearest_kegiatan, name='nearest-kegiatan'), - - path('lokasi/search-kegiatan/', - views_kegiatan.search_kegiatan, name='search-kegiatan'), path('lokasi/add-kegiatan//', views_kegiatan.add_kegiatan, name='add-kegiatan'), diff --git a/informasi_fasilitas/views_kegiatan.py b/informasi_fasilitas/views_kegiatan.py index 90121cb..b54939d 100644 --- a/informasi_fasilitas/views_kegiatan.py +++ b/informasi_fasilitas/views_kegiatan.py @@ -41,7 +41,7 @@ def detail_kegiatan(request, place_id, id): def nearest_kegiatan(request): time_now = timezone.now() queryset = Kegiatan.objects.filter(time_start__gte=time_now).order_by('time_start').first() - if not queryset.exists(): + if queryset is None: raise NotFound(detail="No Kegiatan available") serializer = KegiatanSerializer(queryset, many=False) return JsonResponse(_clean_json_kegiatan(serializer.data), status=HTTPStatus.OK) @@ -95,19 +95,6 @@ def list_foto_kegiatan(request, place_id, kegiatan_id): new_dict = {item['id']: dict(item) for item in data_response} return JsonResponse(new_dict, status=HTTPStatus.OK) -@api_view(['GET']) -@authentication_classes([]) -@permission_classes([]) -def search_kegiatan(request, query): - query_by_nama = Kegiatan.objects.filter(nama_kegiatan__icontains=query) - query_by_deskripsi = Kegiatan.objects.filter(deskripsi__icontains=query) - query_by_penyelenggara = Kegiatan.objects.filter(penyelenggara__icontains=query) - queryset = query_by_nama | query_by_deskripsi | query_by_penyelenggara - if not queryset.exists(): - raise NotFound(detail="No Kegiatan available") - serializer = KegiatanSerializer(queryset, many=True) - new_dict = {item['id']: _clean_json_kegiatan(dict(item)) for item in serializer.data} - return JsonResponse(new_dict, status=HTTPStatus.OK) def _clean_json_kegiatan(kegiatan): kegiatan.pop("user") -- GitLab From 8596c269a4591ef77443a1d3c20bd574a2a6802b Mon Sep 17 00:00:00 2001 From: Christopher Samuel Date: Sat, 22 May 2021 13:24:16 +0700 Subject: [PATCH 7/7] [GREEN] Implemented search Kegiatan for dev API --- informasi_fasilitas/urls.py | 3 +++ informasi_fasilitas/views_kegiatan.py | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/informasi_fasilitas/urls.py b/informasi_fasilitas/urls.py index 9529f3e..6442517 100644 --- a/informasi_fasilitas/urls.py +++ b/informasi_fasilitas/urls.py @@ -38,6 +38,9 @@ urlpatterns = [ path('lokasi/kegiatan-terdekat', views_kegiatan.nearest_kegiatan, name='nearest-kegiatan'), + + path('lokasi/search-kegiatan/', + views_kegiatan.search_kegiatan, name='search-kegiatan'), path('lokasi/add-kegiatan//', views_kegiatan.add_kegiatan, name='add-kegiatan'), diff --git a/informasi_fasilitas/views_kegiatan.py b/informasi_fasilitas/views_kegiatan.py index b54939d..3228f1a 100644 --- a/informasi_fasilitas/views_kegiatan.py +++ b/informasi_fasilitas/views_kegiatan.py @@ -95,6 +95,19 @@ def list_foto_kegiatan(request, place_id, kegiatan_id): new_dict = {item['id']: dict(item) for item in data_response} return JsonResponse(new_dict, status=HTTPStatus.OK) +@api_view(['GET']) +@authentication_classes([]) +@permission_classes([]) +def search_kegiatan(request, query): + query_by_nama = Kegiatan.objects.filter(nama_kegiatan__icontains=query) + query_by_deskripsi = Kegiatan.objects.filter(deskripsi__icontains=query) + query_by_penyelenggara = Kegiatan.objects.filter(penyelenggara__icontains=query) + queryset = query_by_nama | query_by_deskripsi | query_by_penyelenggara + if not queryset.exists(): + raise NotFound(detail="No Kegiatan available") + serializer = KegiatanSerializer(queryset, many=True) + new_dict = {item['id']: _clean_json_kegiatan(dict(item)) for item in serializer.data} + return JsonResponse(new_dict, status=HTTPStatus.OK) def _clean_json_kegiatan(kegiatan): kegiatan.pop("user") -- GitLab