From 33267814fb4c096727be052d649e92984d428a0d Mon Sep 17 00:00:00 2001 From: Christopher Samuel Date: Wed, 19 May 2021 18:37:41 +0700 Subject: [PATCH 1/8] [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/8] [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/8] [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/8] [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/8] [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/8] 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/8] [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 From 51ad8ef6aa746ae6166b13a0bf256edfde846c62 Mon Sep 17 00:00:00 2001 From: Christopher Samuel Date: Tue, 25 May 2021 12:45:19 +0700 Subject: [PATCH 8/8] [RED] Update tests + create base models for FotoKegiatan and Komentar Kegiatan, waiting for Kegiatan model --- informasi_fasilitas/test_base.py | 21 ++++- informasi_fasilitas/test_views_kegiatan.py | 105 +++++++++++++++++++++ informasi_fasilitas/urls.py | 20 +++- informasi_fasilitas/views_kegiatan.py | 39 ++++++++ 4 files changed, 182 insertions(+), 3 deletions(-) diff --git a/informasi_fasilitas/test_base.py b/informasi_fasilitas/test_base.py index e481d3d..1108940 100644 --- a/informasi_fasilitas/test_base.py +++ b/informasi_fasilitas/test_base.py @@ -48,7 +48,6 @@ class InformasiFasilitasTest(TestCase): 'deskripsi': 'sangat membantu', } - # Waktu mungkin perlu disesuaikan lagi test dan implementasinya mock_kegiatan_test = { 'nama_kegiatan': 'mock kegiatan', 'penyelenggara': 'mock penyelenggara', @@ -59,6 +58,26 @@ class InformasiFasilitasTest(TestCase): 'links': "www.example.com;www.example.com" } + mock_kegiatan_time_order_test = { + 'nama_kegiatan': 'mock kegiatan', + 'penyelenggara': 'mock penyelenggara', + 'time_start':(datetime.now()+timedelta(days=2)).strftime("%Y-%m-%d %H:%M"), + 'time_end': (datetime.now()+timedelta(days=3)).strftime("%Y-%m-%d %H:%M"), + 'narahubung': 'sebuah narahubung', + 'deskripsi': 'sebuah deskripsi', + 'links': "www.example.com;www.example.com" + } + + mock_kegiatan_name_order_test = { + 'nama_kegiatan': 'aaaa mock kegiatan', + 'penyelenggara': 'mock penyelenggara', + 'time_start':(datetime.now()+timedelta(days=2)).strftime("%Y-%m-%d %H:%M"), + 'time_end': (datetime.now()+timedelta(days=3)).strftime("%Y-%m-%d %H:%M"), + 'narahubung': 'sebuah narahubung', + 'deskripsi': 'sebuah deskripsi', + 'links': "www.example.com;www.example.com" + } + mock_komentar_kegiatan_test = { 'deskripsi': 'sangat membantu' } diff --git a/informasi_fasilitas/test_views_kegiatan.py b/informasi_fasilitas/test_views_kegiatan.py index 76dcf03..5802e0d 100644 --- a/informasi_fasilitas/test_views_kegiatan.py +++ b/informasi_fasilitas/test_views_kegiatan.py @@ -33,6 +33,14 @@ class KegiatanRelatedViewTest(InformasiFasilitasViewTest): self.kwargs_search_kegiatan_fail = {'query': 'this shouldnt exist',} self.kwargs_kegiatan_id = {'kegiatan_id' : self.kegiatan.lokasi.place_id} + self.kwargs_list_kegiatan_in_order = { + 'start_index': 0, + 'query_limit': 10, + } + self.kwargs_list_kegiatan_in_order_fail = { + 'start_index': 10, + 'query_limit': 20, + } image_path1, image_path2 = ("test_file/test1.jpg", "test_file/test2.jpg") image1 = SimpleUploadedFile("test1.jpg", content=open(image_path1, 'rb').read(), @@ -60,6 +68,18 @@ class KegiatanRelatedViewTest(InformasiFasilitasViewTest): kwargs=self.kwargs_search_kegiatan_fail) self.list_foto_kegiatan_url = \ reverse('list-foto-kegiatan', kwargs=self.kwargs_get_foto_kegiatan) + self.list_kegiatan_by_latest_added_url = \ + reverse('list-kegiatan-by-latest-added', kwargs=self.kwargs_list_kegiatan_in_order) + self.list_kegiatan_by_name_url = \ + reverse('list-kegiatan-by-name', kwargs=self.kwargs_list_kegiatan_in_order) + self.list_kegiatan_by_time_url = \ + reverse('list-kegiatan-by-time', kwargs=self.kwargs_list_kegiatan_in_order) + self.list_kegiatan_by_latest_added_fail_url = \ + reverse('list-kegiatan-by-latest-added', kwargs=self.kwargs_list_kegiatan_in_order_fail) + self.list_kegiatan_by_name_fail_url = \ + reverse('list-kegiatan-by-name', kwargs=self.kwargs_list_kegiatan_in_order_fail) + self.list_kegiatan_by_time_fail_url = \ + reverse('list-kegiatan-by-time', kwargs=self.kwargs_list_kegiatan_in_order_fail) def tearDown(self): try: @@ -240,3 +260,88 @@ 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.NOT_FOUND) + + def test_can_get_list_kegiatan_by_name_order(self): + Kegiatan.objects.all().delete() + response_params = self.mock_kegiatan_test.copy() + response = self.client.post(self.add_kegiatan_url, response_params) + self.assertEqual(response.status_code, HTTPStatus.CREATED) + content = json.loads(response.content.decode('utf-8')) + base_mock_id = str(content['id']) + + response_params = self.mock_kegiatan_name_order_test.copy() + response = self.client.post(self.add_kegiatan_url, response_params) + self.assertEqual(response.status_code, HTTPStatus.CREATED) + content = json.loads(response.content.decode('utf-8')) + ordered_name_mock_id = str(content['id']) + + response = self.client.get(self.list_kegiatan_by_name_url) + self.assertEqual(response.status_code, HTTPStatus.OK) + content = json.loads(response.content.decode('utf-8')) + + response_id_in_order = list(content.keys()) + + self.assertEqual(content[base_mock_id]['nama_kegiatan'], + self.kegiatan.nama_kegiatan) + self.assertEqual(content[ordered_name_mock_id]['nama_kegiatan'], + self.mock_kegiatan_name_order_test['nama_kegiatan']) + self.assertEqual(response_id_in_order[0], ordered_name_mock_id) + self.assertEqual(response_id_in_order[1], base_mock_id) + + def test_fail_get_list_kegiatan_by_name_order(self): + response = Client().get(self.list_kegiatan_by_name_fail_url) + self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) + + def test_can_get_list_kegiatan_by_time_order(self): + Kegiatan.objects.all().delete() + response_params = self.mock_kegiatan_test.copy() + response = self.client.post(self.add_kegiatan_url, response_params) + self.assertEqual(response.status_code, HTTPStatus.CREATED) + content = json.loads(response.content.decode('utf-8')) + base_mock_id = str(content['id']) + + response_params = self.mock_kegiatan_name_order_test.copy() + response = self.client.post(self.add_kegiatan_url, response_params) + self.assertEqual(response.status_code, HTTPStatus.CREATED) + content = json.loads(response.content.decode('utf-8')) + ordered_time_mock_id = str(content['id']) + + response = self.client.get(self.list_kegiatan_by_time_url) + self.assertEqual(response.status_code, HTTPStatus.OK) + content = json.loads(response.content.decode('utf-8')) + + response_id_in_order = list(content.keys()) + + self.assertEqual(content[base_mock_id]['time_start'], + self.kegiatan.time_start) + self.assertEqual(content[ordered_time_mock_id]['time_start'], + self.mock_kegiatan_time_order_test['time_start']) + self.assertEqual(response_id_in_order[0], base_mock_id) + self.assertEqual(response_id_in_order[1], ordered_time_mock_id) + + def test_fail_get_list_kegiatan_by_time_order(self): + response = Client().get(self.list_kegiatan_by_time_fail_url) + self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) + + def test_can_get_list_kegiatan_by_latest_added(self): + Kegiatan.objects.all().delete() + response_params = self.mock_kegiatan_test.copy() + response = self.client.post(self.add_kegiatan_url, response_params) + self.assertEqual(response.status_code, HTTPStatus.CREATED) + content = json.loads(response.content.decode('utf-8')) + + response_params = self.mock_kegiatan_test.copy() + response = self.client.post(self.add_kegiatan_url, response_params) + self.assertEqual(response.status_code, HTTPStatus.CREATED) + content = json.loads(response.content.decode('utf-8')) + + response = self.client.get(self.list_kegiatan_by_latest_added_url) + self.assertEqual(response.status_code, HTTPStatus.OK) + content = json.loads(response.content.decode('utf-8')) + + response_id_in_order = list(content.keys()) + self.assertGreater(int(response_id_in_order[0]), int(response_id_in_order[1])) + + def test_fail_get_list_kegiatan_by_latest_added(self): + response = Client().get(self.list_kegiatan_by_latest_added_fail_url) + self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) diff --git a/informasi_fasilitas/urls.py b/informasi_fasilitas/urls.py index 6442517..05f598d 100644 --- a/informasi_fasilitas/urls.py +++ b/informasi_fasilitas/urls.py @@ -50,6 +50,24 @@ urlpatterns = [ path('lokasi/list-foto-kegiatan//', views_kegiatan.list_foto_kegiatan, name='list-foto-kegiatan'), + + path('lokasi/list-kegiatan-by-latest-added//', + views_kegiatan.list_kegiatan_by_latest_added, name='list-kegiatan-by-latest-added'), + + path('lokasi/list-kegiatan-by-latest-added/', + views_kegiatan.list_kegiatan_by_latest_added, name='list-kegiatan-by-latest-added'), + + path('lokasi/list-kegiatan-by-name//', + views_kegiatan.list_kegiatan_by_name, name='list-kegiatan-by-name'), + + path('lokasi/list-kegiatan-by-name/', + views_kegiatan.list_kegiatan_by_name, name='list-kegiatan-by-name'), + + path('lokasi/list-kegiatan-by-time//', + views_kegiatan.list_kegiatan_by_time, name='list-kegiatan-by-time'), + + path('lokasi/list-kegiatan-by-time/', + views_kegiatan.list_kegiatan_by_time, name='list-kegiatan-by-time'), path('lokasi/get-komentar-kegiatan///', views_komentar_kegiatan.get_komentar_kegiatan, name='get-komentar-kegiatan'), @@ -62,6 +80,4 @@ urlpatterns = [ path('lokasi/delete-komentar-kegiatan///', views_komentar_kegiatan.delete_komentar_kegiatan, name='delete-komentar-kegiatan'), - - ] diff --git a/informasi_fasilitas/views_kegiatan.py b/informasi_fasilitas/views_kegiatan.py index 3228f1a..0c8094c 100644 --- a/informasi_fasilitas/views_kegiatan.py +++ b/informasi_fasilitas/views_kegiatan.py @@ -109,6 +109,45 @@ def search_kegiatan(request, query): new_dict = {item['id']: _clean_json_kegiatan(dict(item)) for item in serializer.data} return JsonResponse(new_dict, status=HTTPStatus.OK) +@api_view(['GET']) +@authentication_classes([]) +@permission_classes([]) +def list_kegiatan_by_name(request, start_index, query_limit=9): + time_now = timezone.now() + queryset = Kegiatan.objects.filter(time_end__gte=time_now).order_by('nama_kegiatan') + queryset = queryset[start_index:start_index+query_limit] + 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) + +@api_view(['GET']) +@authentication_classes([]) +@permission_classes([]) +def list_kegiatan_by_time(request, start_index, query_limit=9): + time_now = timezone.now() + queryset = Kegiatan.objects.filter(time_end__gte=time_now).order_by('time_start') + queryset = queryset[start_index:start_index+query_limit] + 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) + +@api_view(['GET']) +@authentication_classes([]) +@permission_classes([]) +def list_kegiatan_by_latest_added(request, start_index, query_limit=9): + time_now = timezone.now() + queryset = Kegiatan.objects.filter(time_end__gte=time_now).order_by('-id') + queryset = queryset[start_index:start_index+query_limit] + 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") kegiatan.pop("lokasi") -- GitLab