From 26b9060dee78c3fcc70efb05dacaf1aded690e89 Mon Sep 17 00:00:00 2001 From: ariqbasyar Date: Mon, 31 May 2021 18:42:21 +0700 Subject: [PATCH 1/3] [REFACTOR] related to informasi_fasilitas models and notification: - now KomentarFasilitas and KomentarKegiatan models is subclass from Komentar - change name of date_time field on KomentarFasilitas to created - improved send_komentar_notification to check if fcm target is exists first then send --- informasi_fasilitas/admin.py | 6 +- .../migrations/0017_auto_20210531_1003.py | 24 ++++++ informasi_fasilitas/models.py | 18 ++--- informasi_fasilitas/test_admin.py | 2 +- informasi_fasilitas/test_base.py | 4 +- informasi_fasilitas/test_models.py | 6 +- informasi_fasilitas/test_views_komentar.py | 6 +- informasi_fasilitas/views.py | 10 +-- notification/test_utils.py | 75 +++++++------------ notification/test_views.py | 4 +- notification/utils.py | 52 ++++++------- 11 files changed, 106 insertions(+), 101 deletions(-) create mode 100644 informasi_fasilitas/migrations/0017_auto_20210531_1003.py diff --git a/informasi_fasilitas/admin.py b/informasi_fasilitas/admin.py index 608afb0..7e2232a 100644 --- a/informasi_fasilitas/admin.py +++ b/informasi_fasilitas/admin.py @@ -2,11 +2,11 @@ from django.contrib import admin, messages from django.utils.translation import gettext_lazy as _ from notification.utils import send_komentar_notification, get_target_fcm_device -from .models import Lokasi, Fasilitas, Komentar, Kegiatan, KomentarKegiatan, FotoKegiatan +from .models import Lokasi, Fasilitas, KomentarFasilitas, Kegiatan, KomentarKegiatan, FotoKegiatan class KomentarAdmin(admin.ModelAdmin): - list_display = ('__str__', 'deskripsi', 'user', 'notify_to') + list_display = ('__str__', 'user', 'created', 'notify_to') actions = ('send_notification',) def send_notification(self, request, queryset): @@ -30,7 +30,7 @@ class KomentarAdmin(admin.ModelAdmin): # Register your models here. admin.site.register(Lokasi) admin.site.register(Fasilitas) -admin.site.register(Komentar, KomentarAdmin) +admin.site.register(KomentarFasilitas, KomentarAdmin) admin.site.register(Kegiatan) admin.site.register(KomentarKegiatan, KomentarAdmin) admin.site.register(FotoKegiatan) diff --git a/informasi_fasilitas/migrations/0017_auto_20210531_1003.py b/informasi_fasilitas/migrations/0017_auto_20210531_1003.py new file mode 100644 index 0000000..7a899d0 --- /dev/null +++ b/informasi_fasilitas/migrations/0017_auto_20210531_1003.py @@ -0,0 +1,24 @@ +# Generated by Django 3.1.7 on 2021-05-31 10:03 + +from django.conf import settings +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('informasi_fasilitas', '0016_kegiatan_links'), + ] + + operations = [ + migrations.RenameModel( + old_name='Komentar', + new_name='KomentarFasilitas', + ), + migrations.RenameField( + model_name='komentarfasilitas', + old_name='date_time', + new_name='created', + ), + ] diff --git a/informasi_fasilitas/models.py b/informasi_fasilitas/models.py index fe0c90d..8544288 100644 --- a/informasi_fasilitas/models.py +++ b/informasi_fasilitas/models.py @@ -89,14 +89,19 @@ class Kegiatan(models.Model): class Komentar(models.Model): objects = models.Manager() - fasilitas = models.ForeignKey(Fasilitas, on_delete=models.CASCADE) user = models.ForeignKey(User, on_delete=models.CASCADE) - date_time = models.DateTimeField(auto_now_add=True) deskripsi = models.TextField() + created = models.DateTimeField(auto_now_add=True) + + class Meta: + abstract = True def __str__(self): return self.deskripsi +class KomentarFasilitas(Komentar): + fasilitas = models.ForeignKey(Fasilitas, on_delete=models.CASCADE) + class Likes(models.Model): objects = models.Manager() user = models.ForeignKey(User, on_delete=models.CASCADE) @@ -109,15 +114,8 @@ class Dislikes(models.Model): fasilitas = models.ForeignKey(Fasilitas, on_delete=models.CASCADE) created = models.DateTimeField(auto_now_add=True) -class KomentarKegiatan(models.Model): - objects = models.Manager() - user = models.ForeignKey(User, on_delete=models.CASCADE) +class KomentarKegiatan(Komentar): kegiatan = models.ForeignKey(Kegiatan, on_delete=models.CASCADE) - deskripsi = models.TextField() - created = models.DateTimeField(auto_now_add=True) - - def __str__(self): - return self.deskripsi class FotoKegiatan(models.Model): objects = models.Manager() diff --git a/informasi_fasilitas/test_admin.py b/informasi_fasilitas/test_admin.py index 335a601..ca177ea 100644 --- a/informasi_fasilitas/test_admin.py +++ b/informasi_fasilitas/test_admin.py @@ -37,7 +37,7 @@ class TestAdmin(TestCase): def test_list_display(self): list_display = self.komentar_admin.get_list_display(request) - self.assertEqual(list_display, ('__str__', 'deskripsi', 'user', + self.assertEqual(list_display, ('__str__', 'user', 'created', 'notify_to')) def test_list_actions(self): diff --git a/informasi_fasilitas/test_base.py b/informasi_fasilitas/test_base.py index e481d3d..b0f4cfd 100644 --- a/informasi_fasilitas/test_base.py +++ b/informasi_fasilitas/test_base.py @@ -11,7 +11,7 @@ from django.core.files.base import ContentFile from .models import ( Lokasi, Fasilitas, - Komentar, + KomentarFasilitas, KURSI_RODA, Likes, Dislikes, @@ -177,7 +177,7 @@ class InformasiFasilitasTest(TestCase): fasilitas_dict=fasilitas_dict, ) - return Komentar.objects.create( + return KomentarFasilitas.objects.create( **komentar_dict, user=user, fasilitas=fasilitas, diff --git a/informasi_fasilitas/test_models.py b/informasi_fasilitas/test_models.py index 214c04e..e6cd550 100644 --- a/informasi_fasilitas/test_models.py +++ b/informasi_fasilitas/test_models.py @@ -1,7 +1,7 @@ from django.db.utils import IntegrityError from .test_base import InformasiFasilitasTest -from .models import (Lokasi, Fasilitas, Komentar, Likes, Dislikes, +from .models import (Lokasi, Fasilitas, KomentarFasilitas, Likes, Dislikes, Kegiatan, FotoKegiatan, KomentarKegiatan) @@ -49,13 +49,13 @@ class InformasiFasilitasModelTest(InformasiFasilitasTest): def test_models_komentar_not_created(self): with self.assertRaises(IntegrityError) as ex: - obj = Komentar(fasilitas=None) + obj = KomentarFasilitas(fasilitas=None) obj.save() self.assertEqual(ex.expected, IntegrityError) def test_models_create_new_komentar(self): self.create_komentar_test() - count = Komentar.objects.all().count() + count = KomentarFasilitas.objects.all().count() self.assertNotEqual(count, 0) def test_models_komentar_str(self): diff --git a/informasi_fasilitas/test_views_komentar.py b/informasi_fasilitas/test_views_komentar.py index b81ba1f..d5b596e 100644 --- a/informasi_fasilitas/test_views_komentar.py +++ b/informasi_fasilitas/test_views_komentar.py @@ -3,7 +3,7 @@ from http import HTTPStatus from django.urls import reverse from .test_base import InformasiFasilitasViewTest -from .models import Komentar +from .models import KomentarFasilitas from pplbackend.utils import response_decode from .views import TIME_FORMAT @@ -26,7 +26,7 @@ class KomentarRelatedViewTest(InformasiFasilitasViewTest): self.client.post(self.add_komentar_url, self.mock_komentar_test) self.assertEqual(response.status_code, HTTPStatus.CREATED) - count = Komentar.objects.filter(fasilitas=self.fasilitas).count() + count = KomentarFasilitas.objects.filter(fasilitas=self.fasilitas).count() self.assertEqual(count, 1) def test_cannot_comment_facility_if_deskripsi_empty(self): @@ -48,7 +48,7 @@ class KomentarRelatedViewTest(InformasiFasilitasViewTest): 'id': komentar.id, 'deskripsi': komentar.deskripsi, 'creator': komentar.user.last_name, - 'date_time': komentar.date_time.strftime(TIME_FORMAT), + 'created': komentar.created.strftime(TIME_FORMAT), } } self.assertEqual(response_json, expected_json) diff --git a/informasi_fasilitas/views.py b/informasi_fasilitas/views.py index a52ef9c..907b71a 100644 --- a/informasi_fasilitas/views.py +++ b/informasi_fasilitas/views.py @@ -9,7 +9,7 @@ from rest_framework import viewsets from notification.utils import send_komentar_notification from .serializers import LokasiSerializer -from .models import Lokasi, Fasilitas, Komentar, Likes, Dislikes +from .models import Lokasi, Fasilitas, KomentarFasilitas, Likes, Dislikes from .permissions import UserPermission TIME_FORMAT = "%d-%m-%Y %H:%M:%S" @@ -242,13 +242,13 @@ def add_komentar(request, place_id, id): lokasi = Lokasi.objects.get(place_id=place_id) fasilitas = Fasilitas.objects.get(lokasi=lokasi, id=id) deskripsi = request.POST['deskripsi'] - komentar = Komentar.objects.create(fasilitas=fasilitas, + komentar = KomentarFasilitas.objects.create(fasilitas=fasilitas, user=request.user, deskripsi=deskripsi) send_komentar_notification(komentar) return JsonResponse({'response': 'komentar added', 'id': komentar.id, - "created_date": komentar.date_time.strftime(TIME_FORMAT)}, status=HTTPStatus.CREATED) + "created_date": komentar.created.strftime(TIME_FORMAT)}, status=HTTPStatus.CREATED) except KeyError as e: return JsonResponse({'response': missing_key_message(str(e))}, status=HTTPStatus.BAD_REQUEST) except Exception as e: @@ -262,7 +262,7 @@ def list_komentar(request, place_id, id): try: lokasi = Lokasi.objects.get(place_id=place_id) fasilitas = Fasilitas.objects.get(lokasi=lokasi, id=id) - list_komentar = Komentar.objects.filter(fasilitas=fasilitas) + list_komentar = KomentarFasilitas.objects.filter(fasilitas=fasilitas) return_json = {} for komentar in list_komentar: return_json[komentar.id] = {} @@ -270,7 +270,7 @@ def list_komentar(request, place_id, id): komentar_details["id"] = komentar.id komentar_details["deskripsi"] = komentar.deskripsi komentar_details["creator"] = komentar.user.last_name - komentar_details["date_time"] = komentar.date_time.strftime( + komentar_details["created"] = komentar.created.strftime( TIME_FORMAT) return JsonResponse(return_json, status=HTTPStatus.OK) except KeyError as key: diff --git a/notification/test_utils.py b/notification/test_utils.py index 151857c..70fc25a 100644 --- a/notification/test_utils.py +++ b/notification/test_utils.py @@ -4,7 +4,7 @@ from django.db.models import QuerySet from django.contrib.auth.models import User from fcm_django.models import FCMDevice -from informasi_fasilitas.models import (Komentar, KomentarKegiatan, +from informasi_fasilitas.models import (KomentarFasilitas, KomentarKegiatan, Fasilitas, Kegiatan, Lokasi) from . import utils from .test_base import BaseTestNotification @@ -12,7 +12,7 @@ from .test_base import BaseTestNotification class TestUtilsNotification(BaseTestNotification): def test_get_type_informasi_from_komentar_should_return_fasilitas(self): - komentar = Komentar() + komentar = KomentarFasilitas() type_fasilitas = utils.get_type_informasi_from_komentar(komentar) self.assertEqual(type_fasilitas, 'fasilitas') @@ -23,7 +23,7 @@ class TestUtilsNotification(BaseTestNotification): def test_get_informasi_from_komentar_should_return_fasilitas(self): fasilitas = Fasilitas() - komentar = Komentar(fasilitas=fasilitas) + komentar = KomentarFasilitas(fasilitas=fasilitas) ret_fasilitas = utils.get_informasi(komentar) self.assertTrue(isinstance(ret_fasilitas, Fasilitas)) @@ -37,7 +37,7 @@ class TestUtilsNotification(BaseTestNotification): place_id = 'dummy_place_id' lokasi = Lokasi(place_id=place_id) fasilitas = Fasilitas(lokasi=lokasi) - komentar = Komentar(fasilitas=fasilitas) + komentar = KomentarFasilitas(fasilitas=fasilitas) ret_place_id = utils.get_place_id_from_komentar(komentar) @@ -56,7 +56,7 @@ class TestUtilsNotification(BaseTestNotification): def test_get_informasi_id_from_komentar_should_return_its_informasi_id(self): _id = 8 fasilitas = Fasilitas(id=_id) - komentar = Komentar(fasilitas=fasilitas) + komentar = KomentarFasilitas(fasilitas=fasilitas) ret_place_id = utils.get_informasi_id_from_komentar(komentar) @@ -73,7 +73,7 @@ class TestUtilsNotification(BaseTestNotification): def test_get_sender_last_name_from_komentar_not_null(self): user = User(last_name='ariqbasyar') - komentar = Komentar(user=user) + komentar = KomentarFasilitas(user=user) ret_last_name = utils.get_sender_last_name_from_komentar(komentar) @@ -89,7 +89,7 @@ class TestUtilsNotification(BaseTestNotification): fcmdevice.save() fasilitas = Fasilitas(user=user) - komentar = Komentar(fasilitas=fasilitas, user=user_sender) + komentar = KomentarFasilitas(fasilitas=fasilitas, user=user_sender) ret_fcm_device = utils.get_target_fcm_device(komentar) @@ -110,7 +110,7 @@ class TestUtilsNotification(BaseTestNotification): fcmdevice.save() fasilitas = Fasilitas(user=user) - komentar = Komentar(fasilitas=fasilitas, user=user_sender) + komentar = KomentarFasilitas(fasilitas=fasilitas, user=user_sender) ret_fcm_device = utils.get_target_fcm_device(komentar) @@ -124,64 +124,45 @@ class TestUtilsNotification(BaseTestNotification): fcmdevice.save() fasilitas = Fasilitas(user=user) - komentar = Komentar(fasilitas=fasilitas, user=user) + komentar = KomentarFasilitas(fasilitas=fasilitas, user=user) ret_fcm_device = utils.get_target_fcm_device(komentar) self.assertEqual(len(ret_fcm_device), 0) - def test_get_formatted_username_length_less_than_max_length_name_should_not_get_trimmed(self): - username = 'ariq' - ret_username = utils.get_formatted_user_name(username, max_length_name=10) - self.assertEqual(username, ret_username) + def test_get_formatted_message(self): + komentar = MagicMock() + komentar.deskripsi = 'ini deskripsi' + ret_formatted_message = utils.get_formatted_message(komentar) + self.assertEqual(ret_formatted_message, '"%s"' % komentar.deskripsi) - def test_get_formatted_username_length_equal_max_length_name_should_not_get_trimmed(self): - username = 'ariqbasyar' - ret_username = utils.get_formatted_user_name(username, max_length_name=10) - self.assertEqual(username, ret_username) - - def test_get_formatted_username_length_more_than_max_length_name_should_get_trimmed(self): - username = 'ariqbasyarr' - - max_length_name = 10 - replacement_str = '...' - length_replacement = len(replacement_str) - ret_username = utils.get_formatted_user_name(username, max_length_name=max_length_name, - replacement_str=replacement_str) - - self.assertEqual(ret_username, '%s%s' % (username[:max_length_name - length_replacement], - replacement_str)) - self.assertEqual(ret_username, 'ariqbas...') - - def test_get_formatted_message_username_should_not_get_trimmed(self): - username = 'ariqbasyar' - ret_formatted_message = utils.get_formatted_message(username) - self.assertEqual(ret_formatted_message, 'ariqbasyar menambahkan komentar baru') - - def test_get_formatted_message_username_should_get_trimmed(self): - username = 'ariqbasyarr' - ret_formatted_message = utils.get_formatted_message(username) - self.assertEqual(ret_formatted_message, 'ariqbas... menambahkan komentar baru') + def test_get_formatted_title(self): + username = 'dummy username' + ret_formatted_title = utils.get_formatted_title(username) + self.assertEqual(ret_formatted_title, 'dummy username menambahkan komentar baru') @patch('notification.utils.get_target_fcm_device') @patch('notification.utils.get_formatted_message') + @patch('notification.utils.get_formatted_title') @patch('notification.utils.get_sender_last_name_from_komentar') @patch('notification.utils.get_type_informasi_from_komentar') @patch('notification.utils.get_informasi_id_from_komentar') @patch('notification.utils.get_place_id_from_komentar') def test_send_komentar_notification(self, *args): - komentar = Komentar(deskripsi='dummy deskripsi') + komentar = KomentarFasilitas(deskripsi='dummy deskripsi') fcmdevice_mock = QuerySet(model=FCMDevice) fcmdevice_mock_return_value = (1,1,0,0,[]) fcmdevice_mock.send_message = MagicMock(return_value=fcmdevice_mock_return_value) - formatted_message = 'ariqbasyar menambahkan komentar baru' + formatted_title = 'ariqbasyar menambahkan komentar baru' + formatted_message = 'ini komentar' args[0].return_value = 'dummy place_id' args[1].return_value = 1 args[2].return_value = 'fasilitas' args[3].return_value = 'ariqbasyar' - args[4].return_value = formatted_message - args[5].return_value = fcmdevice_mock + args[4].return_value = formatted_title + args[5].return_value = formatted_message + args[6].return_value = fcmdevice_mock ret = utils.send_komentar_notification(komentar) @@ -192,13 +173,15 @@ class TestUtilsNotification(BaseTestNotification): args[3].assert_called_once_with(komentar) args[4].assert_called_once_with('ariqbasyar') args[5].assert_called_once_with(komentar) + args[6].assert_called_once_with(komentar) fcmdevice_mock.send_message.assert_called_once_with( - title=formatted_message, - body='"%s"' % komentar.deskripsi, + title=formatted_title, + body=formatted_message, data={ 'place_id': 'dummy place_id', 'id': 1, 'type': 'fasilitas', + 'title': formatted_title, 'message': formatted_message, } ) diff --git a/notification/test_views.py b/notification/test_views.py index 14e6afa..085e6c4 100644 --- a/notification/test_views.py +++ b/notification/test_views.py @@ -6,7 +6,7 @@ from django.contrib.auth.models import User from fcm_django.models import FCMDevice, AbstractFCMDevice from fcm_django.api.rest_framework import FCMDeviceSerializer -from informasi_fasilitas.models import Lokasi, Kegiatan, Fasilitas, Komentar, KomentarKegiatan +from informasi_fasilitas.models import Lokasi, Kegiatan, Fasilitas, KomentarFasilitas, KomentarKegiatan from pplbackend.utils import get_client_login_with_user, response_decode from .test_base import BaseTestNotification @@ -178,7 +178,7 @@ class TestViewsNotification(BaseTestNotification): 'deskripsi': 'dummy deskripsi', }) data = response_decode(resp) - komentar = Komentar.objects.get(id=data['id']) + komentar = KomentarFasilitas.objects.get(id=data['id']) mock_notif.assert_called_once_with(komentar) diff --git a/notification/utils.py b/notification/utils.py index 1d7e503..a3bb283 100644 --- a/notification/utils.py +++ b/notification/utils.py @@ -1,14 +1,14 @@ from fcm_django.models import FCMDevice -from informasi_fasilitas.models import Komentar +from informasi_fasilitas.models import Komentar, KomentarFasilitas, KomentarKegiatan def get_type_informasi_from_komentar(komentar): - if isinstance(komentar, Komentar): + if isinstance(komentar, KomentarFasilitas): return 'fasilitas' return 'kegiatan' def get_informasi(komentar): - if isinstance(komentar, Komentar): + if isinstance(komentar, KomentarFasilitas): return komentar.fasilitas return komentar.kegiatan @@ -26,30 +26,30 @@ def get_target_fcm_device(komentar): .filter(user=get_informasi(komentar).user, active=True) .exclude(user=komentar.user)) -def get_formatted_user_name(name, max_length_name=10, replacement_str='...'): - length_replacement = len(replacement_str) - return name if len(name) <= max_length_name else '%s%s' % ( - name[:max_length_name - length_replacement], replacement_str - ) +def get_formatted_title(name): + return '%s menambahkan komentar baru' % name -def get_formatted_message(sender, **kwargs): - return '%s menambahkan komentar baru' % get_formatted_user_name(sender, **kwargs) +def get_formatted_message(komentar): + return '"%s"' % komentar.deskripsi def send_komentar_notification(komentar): - place_id = get_place_id_from_komentar(komentar) - informasi_id = get_informasi_id_from_komentar(komentar) - informasi_type = get_type_informasi_from_komentar(komentar) - sender = get_sender_last_name_from_komentar(komentar) - formatted_message = get_formatted_message(sender) target_fcm_device = get_target_fcm_device(komentar) - - return target_fcm_device.send_message( - title=formatted_message, - body='"%s"' % komentar.deskripsi, - data={ - 'place_id': place_id, - 'id': informasi_id, - 'type': informasi_type, - 'message': formatted_message, - } - ) + if target_fcm_device: + place_id = get_place_id_from_komentar(komentar) + informasi_id = get_informasi_id_from_komentar(komentar) + informasi_type = get_type_informasi_from_komentar(komentar) + sender = get_sender_last_name_from_komentar(komentar) + formatted_title = get_formatted_title(sender) + formatted_message = get_formatted_message(komentar) + + return target_fcm_device.send_message( + title=formatted_title, + body=formatted_message, + data={ + 'place_id': place_id, + 'id': informasi_id, + 'type': informasi_type, + 'title': formatted_title, + 'message': formatted_message, + } + ) -- GitLab From df5a470fc0830bbf6d63015bbef067377f162b55 Mon Sep 17 00:00:00 2001 From: ariqbasyar Date: Mon, 31 May 2021 19:32:14 +0700 Subject: [PATCH 2/3] [REFACTOR] change models attribute from fasilitas/kegiatan to informasi on KomentarFasilitas and KomentarKegiatan --- .../migrations/0018_auto_20210531_1202.py | 23 +++++++++++++++++++ informasi_fasilitas/models.py | 4 ++-- informasi_fasilitas/serializers.py | 2 +- informasi_fasilitas/test_base.py | 10 ++++---- informasi_fasilitas/test_models.py | 2 +- informasi_fasilitas/test_views_komentar.py | 2 +- .../test_views_komentar_kegiatan.py | 16 ++++++------- informasi_fasilitas/views.py | 4 ++-- .../views_komentar_kegiatan.py | 10 ++++---- notification/test_utils.py | 18 +++++++-------- notification/utils.py | 6 ++--- 11 files changed, 59 insertions(+), 38 deletions(-) create mode 100644 informasi_fasilitas/migrations/0018_auto_20210531_1202.py diff --git a/informasi_fasilitas/migrations/0018_auto_20210531_1202.py b/informasi_fasilitas/migrations/0018_auto_20210531_1202.py new file mode 100644 index 0000000..83474a8 --- /dev/null +++ b/informasi_fasilitas/migrations/0018_auto_20210531_1202.py @@ -0,0 +1,23 @@ +# Generated by Django 3.1.7 on 2021-05-31 12:02 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('informasi_fasilitas', '0017_auto_20210531_1003'), + ] + + operations = [ + migrations.RenameField( + model_name='komentarfasilitas', + old_name='fasilitas', + new_name='informasi', + ), + migrations.RenameField( + model_name='komentarkegiatan', + old_name='kegiatan', + new_name='informasi', + ), + ] diff --git a/informasi_fasilitas/models.py b/informasi_fasilitas/models.py index 8544288..223011e 100644 --- a/informasi_fasilitas/models.py +++ b/informasi_fasilitas/models.py @@ -100,7 +100,7 @@ class Komentar(models.Model): return self.deskripsi class KomentarFasilitas(Komentar): - fasilitas = models.ForeignKey(Fasilitas, on_delete=models.CASCADE) + informasi = models.ForeignKey(Fasilitas, on_delete=models.CASCADE) class Likes(models.Model): objects = models.Manager() @@ -115,7 +115,7 @@ class Dislikes(models.Model): created = models.DateTimeField(auto_now_add=True) class KomentarKegiatan(Komentar): - kegiatan = models.ForeignKey(Kegiatan, on_delete=models.CASCADE) + informasi = models.ForeignKey(Kegiatan, on_delete=models.CASCADE) class FotoKegiatan(models.Model): objects = models.Manager() diff --git a/informasi_fasilitas/serializers.py b/informasi_fasilitas/serializers.py index 8b034ae..795e72c 100644 --- a/informasi_fasilitas/serializers.py +++ b/informasi_fasilitas/serializers.py @@ -48,7 +48,7 @@ class KegiatanSerializer(serializers.ModelSerializer): class KomentarKegiatanSerializer(serializers.ModelSerializer): - kegiatan = serializers.IntegerField(source='kegiatan.id', read_only=True) + kegiatan = serializers.IntegerField(source='informasi.id', read_only=True) creator = serializers.CharField(source='user.last_name', read_only=True) class Meta: model = KomentarKegiatan diff --git a/informasi_fasilitas/test_base.py b/informasi_fasilitas/test_base.py index b0f4cfd..ef9ce2b 100644 --- a/informasi_fasilitas/test_base.py +++ b/informasi_fasilitas/test_base.py @@ -180,7 +180,7 @@ class InformasiFasilitasTest(TestCase): return KomentarFasilitas.objects.create( **komentar_dict, user=user, - fasilitas=fasilitas, + informasi=fasilitas, ) def create_likes_test( @@ -284,19 +284,19 @@ class InformasiFasilitasTest(TestCase): user=None, komentar_kegiatan_dict=mock_komentar_kegiatan_test, user_dict=mock_user_test, - kegiatan=None + informasi=None ): user = self.get_or_create_user_test( user=user, user_dict=user_dict, ) - if kegiatan is None: - kegiatan = self.create_kegiatan_test() + if informasi is None: + informasi = self.create_kegiatan_test() return KomentarKegiatan.objects.create( **komentar_kegiatan_dict, - kegiatan=kegiatan, + informasi=informasi, user=user ) diff --git a/informasi_fasilitas/test_models.py b/informasi_fasilitas/test_models.py index e6cd550..9e929a5 100644 --- a/informasi_fasilitas/test_models.py +++ b/informasi_fasilitas/test_models.py @@ -49,7 +49,7 @@ class InformasiFasilitasModelTest(InformasiFasilitasTest): def test_models_komentar_not_created(self): with self.assertRaises(IntegrityError) as ex: - obj = KomentarFasilitas(fasilitas=None) + obj = KomentarFasilitas(informasi=None) obj.save() self.assertEqual(ex.expected, IntegrityError) diff --git a/informasi_fasilitas/test_views_komentar.py b/informasi_fasilitas/test_views_komentar.py index d5b596e..0dcc995 100644 --- a/informasi_fasilitas/test_views_komentar.py +++ b/informasi_fasilitas/test_views_komentar.py @@ -26,7 +26,7 @@ class KomentarRelatedViewTest(InformasiFasilitasViewTest): self.client.post(self.add_komentar_url, self.mock_komentar_test) self.assertEqual(response.status_code, HTTPStatus.CREATED) - count = KomentarFasilitas.objects.filter(fasilitas=self.fasilitas).count() + count = KomentarFasilitas.objects.filter(informasi=self.fasilitas).count() self.assertEqual(count, 1) def test_cannot_comment_facility_if_deskripsi_empty(self): diff --git a/informasi_fasilitas/test_views_komentar_kegiatan.py b/informasi_fasilitas/test_views_komentar_kegiatan.py index c712e22..a78b78e 100644 --- a/informasi_fasilitas/test_views_komentar_kegiatan.py +++ b/informasi_fasilitas/test_views_komentar_kegiatan.py @@ -29,7 +29,7 @@ class KomentarKegiatanRelatedViewTest(InformasiFasilitasViewTest): self.client.post(self.add_komentar_kegiatan_url, self.mock_komentar_kegiatan_test) self.assertEqual(response.status_code, HTTPStatus.CREATED) - count = KomentarKegiatan.objects.filter(kegiatan=self.kegiatan).count() + count = KomentarKegiatan.objects.filter(informasi=self.kegiatan).count() self.assertEqual(count, 1) def test_fail_add_komentar_kegiatan(self): @@ -38,18 +38,18 @@ class KomentarKegiatanRelatedViewTest(InformasiFasilitasViewTest): self.client.post(self.add_komentar_kegiatan_url, None) self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) - count = KomentarKegiatan.objects.filter(kegiatan=self.kegiatan).count() + count = KomentarKegiatan.objects.filter(informasi=self.kegiatan).count() self.assertEqual(count, 0) def test_can_get_list_komentar_kegiatan(self): - komentar = self.create_komentar_kegiatan_test(user=self.user, kegiatan=self.kegiatan) + komentar = self.create_komentar_kegiatan_test(user=self.user, informasi=self.kegiatan) response = self.client.get(self.list_komentar_kegiatan_url) self.assertEqual(response.status_code, HTTPStatus.OK) response_json = response_decode(response) expected_id = komentar.id expected_creator = komentar.user.last_name - expected_kegiatan = komentar.kegiatan.id + expected_kegiatan = komentar.informasi.id expected_deskripsi = komentar.deskripsi self.assertEqual(response_json[str(komentar.id)]['id'], expected_id) @@ -59,7 +59,7 @@ class KomentarKegiatanRelatedViewTest(InformasiFasilitasViewTest): self.assertEqual(True, ('created' in response_json[str(komentar.id)].keys())) def test_can_get_komentar_kegiatan(self): - komentar = self.create_komentar_kegiatan_test(user=self.user, kegiatan=self.kegiatan) + komentar = self.create_komentar_kegiatan_test(user=self.user, informasi=self.kegiatan) kwargs_get_komentar_kegiatan = { 'place_id': self.lokasi.place_id, 'kegiatan_id': self.kegiatan.id, @@ -73,7 +73,7 @@ class KomentarKegiatanRelatedViewTest(InformasiFasilitasViewTest): response_json = response_decode(response) expected_id = komentar.id expected_creator = komentar.user.last_name - expected_kegiatan = komentar.kegiatan.id + expected_kegiatan = komentar.informasi.id expected_deskripsi = komentar.deskripsi self.assertEqual(response_json['id'], expected_id) @@ -88,7 +88,7 @@ class KomentarKegiatanRelatedViewTest(InformasiFasilitasViewTest): def test_can_delete_komentar_kegiatan(self): KomentarKegiatan.objects.all().delete() - komentar = self.create_komentar_kegiatan_test(user=self.user, kegiatan=self.kegiatan) + komentar = self.create_komentar_kegiatan_test(user=self.user, informasi=self.kegiatan) kwargs_delete_komentar_kegiatan = { 'place_id': self.lokasi.place_id, @@ -102,7 +102,7 @@ class KomentarKegiatanRelatedViewTest(InformasiFasilitasViewTest): response = self.client.delete(delete_komentar_kegiatan_url) self.assertEqual(response.status_code, HTTPStatus.OK) - count = KomentarKegiatan.objects.filter(kegiatan=self.kegiatan).count() + count = KomentarKegiatan.objects.filter(informasi=self.kegiatan).count() self.assertEqual(count, 0) def test_fail_delete_komentar_kegiatan(self): diff --git a/informasi_fasilitas/views.py b/informasi_fasilitas/views.py index 907b71a..57aedfa 100644 --- a/informasi_fasilitas/views.py +++ b/informasi_fasilitas/views.py @@ -242,7 +242,7 @@ def add_komentar(request, place_id, id): lokasi = Lokasi.objects.get(place_id=place_id) fasilitas = Fasilitas.objects.get(lokasi=lokasi, id=id) deskripsi = request.POST['deskripsi'] - komentar = KomentarFasilitas.objects.create(fasilitas=fasilitas, + komentar = KomentarFasilitas.objects.create(informasi=fasilitas, user=request.user, deskripsi=deskripsi) send_komentar_notification(komentar) @@ -262,7 +262,7 @@ def list_komentar(request, place_id, id): try: lokasi = Lokasi.objects.get(place_id=place_id) fasilitas = Fasilitas.objects.get(lokasi=lokasi, id=id) - list_komentar = KomentarFasilitas.objects.filter(fasilitas=fasilitas) + list_komentar = KomentarFasilitas.objects.filter(informasi=fasilitas) return_json = {} for komentar in list_komentar: return_json[komentar.id] = {} diff --git a/informasi_fasilitas/views_komentar_kegiatan.py b/informasi_fasilitas/views_komentar_kegiatan.py index af6718d..6dd2113 100644 --- a/informasi_fasilitas/views_komentar_kegiatan.py +++ b/informasi_fasilitas/views_komentar_kegiatan.py @@ -15,7 +15,7 @@ from .models import Kegiatan, KomentarKegiatan @permission_classes([]) def list_komentar_kegiatan(request, place_id, kegiatan_id): try: - queryset = KomentarKegiatan.objects.filter(kegiatan__lokasi__place_id=place_id, kegiatan__id=kegiatan_id) + queryset = KomentarKegiatan.objects.filter(informasi__lokasi__place_id=place_id, informasi__id=kegiatan_id) serializer = KomentarKegiatanSerializer(queryset, many=True) data_response = serializer.data new_dict = {item['id']: dict(item) for item in data_response} @@ -28,8 +28,8 @@ def list_komentar_kegiatan(request, place_id, kegiatan_id): @permission_classes([]) def get_komentar_kegiatan(request, place_id, kegiatan_id, komentar_id): try: - komentar = KomentarKegiatan.objects.get(kegiatan__lokasi__place_id=place_id, - kegiatan__id=kegiatan_id, id=komentar_id) + komentar = KomentarKegiatan.objects.get(informasi__lokasi__place_id=place_id, + informasi__id=kegiatan_id, id=komentar_id) serializer = KomentarKegiatanSerializer(komentar, many=False) return JsonResponse(serializer.data, status=HTTPStatus.OK) except ObjectDoesNotExist: @@ -44,7 +44,7 @@ def add_komentar_kegiatan(request, place_id, kegiatan_id): deskripsi = request.POST['deskripsi'] komentar = KomentarKegiatan.objects \ .create( - kegiatan=kegiatan, + informasi=kegiatan, user=request.user, deskripsi=deskripsi ) @@ -59,7 +59,7 @@ def add_komentar_kegiatan(request, place_id, kegiatan_id): @permission_classes([IsAuthenticated]) def delete_komentar_kegiatan(request, place_id, kegiatan_id, komentar_id): try: - komentar = KomentarKegiatan.objects.get(kegiatan__lokasi__place_id=place_id, kegiatan__id=kegiatan_id, id=komentar_id) + komentar = KomentarKegiatan.objects.get(informasi__lokasi__place_id=place_id, informasi__id=kegiatan_id, id=komentar_id) komentar.delete() return JsonResponse({'response': 'komentar kegiatan deleted', 'id': komentar_id}, status=HTTPStatus.OK) diff --git a/notification/test_utils.py b/notification/test_utils.py index 70fc25a..d97e033 100644 --- a/notification/test_utils.py +++ b/notification/test_utils.py @@ -23,13 +23,13 @@ class TestUtilsNotification(BaseTestNotification): def test_get_informasi_from_komentar_should_return_fasilitas(self): fasilitas = Fasilitas() - komentar = KomentarFasilitas(fasilitas=fasilitas) + komentar = KomentarFasilitas(informasi=fasilitas) ret_fasilitas = utils.get_informasi(komentar) self.assertTrue(isinstance(ret_fasilitas, Fasilitas)) def test_get_informasi_from_komentarkegiatan_should_return_kegiatan(self): kegiatan = Kegiatan() - komentar_kegiatan = KomentarKegiatan(kegiatan=kegiatan) + komentar_kegiatan = KomentarKegiatan(informasi=kegiatan) ret_kegiatan = utils.get_informasi(komentar_kegiatan) self.assertTrue(isinstance(ret_kegiatan, Kegiatan)) @@ -37,7 +37,7 @@ class TestUtilsNotification(BaseTestNotification): place_id = 'dummy_place_id' lokasi = Lokasi(place_id=place_id) fasilitas = Fasilitas(lokasi=lokasi) - komentar = KomentarFasilitas(fasilitas=fasilitas) + komentar = KomentarFasilitas(informasi=fasilitas) ret_place_id = utils.get_place_id_from_komentar(komentar) @@ -47,7 +47,7 @@ class TestUtilsNotification(BaseTestNotification): place_id = 'dummy_place_id' lokasi = Lokasi(place_id=place_id) kegiatan = Kegiatan(lokasi=lokasi) - komentar = KomentarKegiatan(kegiatan=kegiatan) + komentar = KomentarKegiatan(informasi=kegiatan) ret_place_id = utils.get_place_id_from_komentar(komentar) @@ -56,7 +56,7 @@ class TestUtilsNotification(BaseTestNotification): def test_get_informasi_id_from_komentar_should_return_its_informasi_id(self): _id = 8 fasilitas = Fasilitas(id=_id) - komentar = KomentarFasilitas(fasilitas=fasilitas) + komentar = KomentarFasilitas(informasi=fasilitas) ret_place_id = utils.get_informasi_id_from_komentar(komentar) @@ -65,7 +65,7 @@ class TestUtilsNotification(BaseTestNotification): def test_get_informasi_id_from_komentar_kegiatan_should_return_its_informasi_id(self): _id = 9 kegiatan = Kegiatan(id=_id) - komentar = KomentarKegiatan(kegiatan=kegiatan) + komentar = KomentarKegiatan(informasi=kegiatan) ret_place_id = utils.get_informasi_id_from_komentar(komentar) @@ -89,7 +89,7 @@ class TestUtilsNotification(BaseTestNotification): fcmdevice.save() fasilitas = Fasilitas(user=user) - komentar = KomentarFasilitas(fasilitas=fasilitas, user=user_sender) + komentar = KomentarFasilitas(informasi=fasilitas, user=user_sender) ret_fcm_device = utils.get_target_fcm_device(komentar) @@ -110,7 +110,7 @@ class TestUtilsNotification(BaseTestNotification): fcmdevice.save() fasilitas = Fasilitas(user=user) - komentar = KomentarFasilitas(fasilitas=fasilitas, user=user_sender) + komentar = KomentarFasilitas(informasi=fasilitas, user=user_sender) ret_fcm_device = utils.get_target_fcm_device(komentar) @@ -124,7 +124,7 @@ class TestUtilsNotification(BaseTestNotification): fcmdevice.save() fasilitas = Fasilitas(user=user) - komentar = KomentarFasilitas(fasilitas=fasilitas, user=user) + komentar = KomentarFasilitas(informasi=fasilitas, user=user) ret_fcm_device = utils.get_target_fcm_device(komentar) diff --git a/notification/utils.py b/notification/utils.py index a3bb283..d3dd9a7 100644 --- a/notification/utils.py +++ b/notification/utils.py @@ -1,6 +1,6 @@ from fcm_django.models import FCMDevice -from informasi_fasilitas.models import Komentar, KomentarFasilitas, KomentarKegiatan +from informasi_fasilitas.models import KomentarFasilitas def get_type_informasi_from_komentar(komentar): if isinstance(komentar, KomentarFasilitas): @@ -8,9 +8,7 @@ def get_type_informasi_from_komentar(komentar): return 'kegiatan' def get_informasi(komentar): - if isinstance(komentar, KomentarFasilitas): - return komentar.fasilitas - return komentar.kegiatan + return komentar.informasi def get_place_id_from_komentar(komentar): return get_informasi(komentar).lokasi.place_id -- GitLab From 08026b73abea7ab96ecdd366f55432def0b6b320 Mon Sep 17 00:00:00 2001 From: ariqbasyar Date: Mon, 31 May 2021 19:42:18 +0700 Subject: [PATCH 3/3] [CHORE] makemigrations merge 0018 and 0019 --- .../migrations/0020_merge_20210531_1241.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 informasi_fasilitas/migrations/0020_merge_20210531_1241.py diff --git a/informasi_fasilitas/migrations/0020_merge_20210531_1241.py b/informasi_fasilitas/migrations/0020_merge_20210531_1241.py new file mode 100644 index 0000000..16c7bb8 --- /dev/null +++ b/informasi_fasilitas/migrations/0020_merge_20210531_1241.py @@ -0,0 +1,14 @@ +# Generated by Django 3.1.7 on 2021-05-31 12:41 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('informasi_fasilitas', '0018_auto_20210531_1202'), + ('informasi_fasilitas', '0019_auto_20210527_2251'), + ] + + operations = [ + ] -- GitLab