diff --git a/informasi_fasilitas/test_base.py b/informasi_fasilitas/test_base.py index e481d3d379185b75e487e56f5651a6f595f38dbf..1108940d11557d329abce0a17fa64ecef4c963a5 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 76dcf035973dffaa048b6f73cd049355b191d387..5802e0dcaaf3694c79c40a3fadd018c48125f2a0 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 64425174db41a8d5240dc4587cbc527edbf27f68..05f598d2aa1f133a0e89e01ffd4c4232d6d2649b 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 3228f1a71e6674b9e8d60c626f67050d0aa3bfc5..0c8094c7fbbd7a50d8190407d904e27a6f45f868 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")