diff --git a/informasi_fasilitas/serializers.py b/informasi_fasilitas/serializers.py
index 2777ffc56c1229038065dd60098b1d129cc29544..96d0f791baac19752a4aece911837810cae06055 100644
--- a/informasi_fasilitas/serializers.py
+++ b/informasi_fasilitas/serializers.py
@@ -88,11 +88,12 @@ class KomentarKegiatanSerializer(serializers.ModelSerializer):
kegiatan = serializers.IntegerField(source='informasi.id', read_only=True)
creator = serializers.CharField(source='user.last_name', read_only=True)
creator_email = serializers.CharField(source='user.email', read_only=True)
+ creator_picture = serializers.ImageField(source='user.bisagouser.foto', read_only=True)
class Meta:
model = KomentarKegiatan
fields = ('id', 'creator', 'kegiatan', 'deskripsi', 'created',
- 'creator_email')
+ 'creator_email', 'creator_picture')
extra_kwargs = {
'deskripsi': {'required': True},
'created': {'required' : True}
diff --git a/informasi_fasilitas/test_views_komentar.py b/informasi_fasilitas/test_views_komentar.py
index 59cf644e18d4f2df035727f1f7a409bf3a077a5f..458eaa00662f34c2ab11d73e543f7124483044ce 100644
--- a/informasi_fasilitas/test_views_komentar.py
+++ b/informasi_fasilitas/test_views_komentar.py
@@ -1,10 +1,12 @@
from http import HTTPStatus
from django.urls import reverse
+from django.core.files.uploadedfile import SimpleUploadedFile
+from django.core.files import File
from pplbackend.utils import response_decode
+from registrasi.models import BisaGoUser
from .test_base import InformasiFasilitasViewTest
from .models import KomentarFasilitas
-from pplbackend.utils import response_decode
from .views import TIME_FORMAT
@@ -20,6 +22,9 @@ class KomentarRelatedViewTest(InformasiFasilitasViewTest):
self.list_komentar_url = \
reverse('list-komentar', kwargs=self.kwargs_add_or_list_komentar)
+ self.image_path = "test_file/test1.jpg"
+ self.image = SimpleUploadedFile("test1.jpg", content=open(self.image_path, 'rb').read(),
+ content_type='image/jpeg')
def test_can_comment_facility(self):
response = \
@@ -38,11 +43,17 @@ class KomentarRelatedViewTest(InformasiFasilitasViewTest):
self.assertEqual(expected_json, response_json)
def test_get_list_komentar(self):
+ bisagouser = BisaGoUser.objects.create(user=self.user,
+ phone_number='0'*12, foto=self.image)
+ self.user.bisagouser = bisagouser
+ self.user.save()
komentar = self.create_komentar_test(fasilitas=self.fasilitas)
response = self.client.get(self.list_komentar_url)
self.assertEqual(response.status_code, HTTPStatus.OK)
response_json = response_decode(response)
+ creator_picture = response_json[str(komentar.id)].pop('creator_picture')\
+ if isinstance(response_json, dict) else ''
expected_json = {
str(komentar.id): {
'id': komentar.id,
@@ -53,3 +64,5 @@ class KomentarRelatedViewTest(InformasiFasilitasViewTest):
}
}
self.assertEqual(response_json, expected_json)
+ self.assertRegex(creator_picture,
+ r'http://testserver/media/user/test1[0-9a-zA-Z_-]*.jpg')
diff --git a/informasi_fasilitas/test_views_komentar_kegiatan.py b/informasi_fasilitas/test_views_komentar_kegiatan.py
index a78b78e5c22e2b7f5670bddcd698b00b9502dbc9..abc7e61e96a0948acbe5e1789765e18e6a391908 100644
--- a/informasi_fasilitas/test_views_komentar_kegiatan.py
+++ b/informasi_fasilitas/test_views_komentar_kegiatan.py
@@ -31,7 +31,7 @@ class KomentarKegiatanRelatedViewTest(InformasiFasilitasViewTest):
count = KomentarKegiatan.objects.filter(informasi=self.kegiatan).count()
self.assertEqual(count, 1)
-
+
def test_fail_add_komentar_kegiatan(self):
KomentarKegiatan.objects.all().delete()
response = \
@@ -40,7 +40,7 @@ class KomentarKegiatanRelatedViewTest(InformasiFasilitasViewTest):
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, informasi=self.kegiatan)
response = self.client.get(self.list_komentar_kegiatan_url)
@@ -81,7 +81,7 @@ class KomentarKegiatanRelatedViewTest(InformasiFasilitasViewTest):
self.assertEqual(response_json['kegiatan'], expected_kegiatan)
self.assertEqual(response_json['deskripsi'], expected_deskripsi)
self.assertEqual(True, ('created' in response_json.keys()))
-
+
def test_fail_get_komentar_kegiatan(self):
response = self.client.get('/informasi-fasilitas/lokasi/get-komentar-kegiatan/harusnyaTidakAda/101/1011')
self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND)
@@ -98,14 +98,13 @@ class KomentarKegiatanRelatedViewTest(InformasiFasilitasViewTest):
delete_komentar_kegiatan_url = \
reverse('delete-komentar-kegiatan', kwargs=kwargs_delete_komentar_kegiatan)
-
+
response = self.client.delete(delete_komentar_kegiatan_url)
self.assertEqual(response.status_code, HTTPStatus.OK)
count = KomentarKegiatan.objects.filter(informasi=self.kegiatan).count()
self.assertEqual(count, 0)
-
+
def test_fail_delete_komentar_kegiatan(self):
response = self.client.delete('/informasi-fasilitas/lokasi/delete-komentar-kegiatan/harusnyaTidakAda/10/10101')
self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND)
-
diff --git a/informasi_fasilitas/views.py b/informasi_fasilitas/views.py
index 16b2d9d7eb6ac9464c2f8ffba8431c0427f87347..35268001aa6377521c810f2193797b78f70fd671 100644
--- a/informasi_fasilitas/views.py
+++ b/informasi_fasilitas/views.py
@@ -271,6 +271,13 @@ def list_komentar(request, place_id, id):
komentar_details["deskripsi"] = komentar.deskripsi
komentar_details["creator"] = komentar.user.last_name
komentar_details["creator_email"] = komentar.user.email
+ foto = komentar.user.bisagouser.foto
+ try:
+ url = foto.url
+ except ValueError:
+ url = None
+ komentar_details["creator_picture"] =\
+ request.build_absolute_uri(url) if url else None
komentar_details["created"] = komentar.created.strftime(
TIME_FORMAT)
return JsonResponse(return_json, status=HTTPStatus.OK)
diff --git a/new_rest_api/permissions.py b/new_rest_api/permissions.py
index 8666c40e1d43a909866a28d8b963387662082398..918eb91ccdd2ae665ce5484207e889fa0c6026af 100644
--- a/new_rest_api/permissions.py
+++ b/new_rest_api/permissions.py
@@ -4,11 +4,13 @@ class UserViewPermission(permissions.BasePermission):
def has_permission(self, request, view):
if view.action in ['register', 'retrieve', 'activate']:
return True
- if view.action == 'update':
+ if view.action in ['update', 'authorize']:
return request.user.is_authenticated
return False
def has_object_permission(self, request, view, obj):
+ if view.action == 'retrieve':
+ return True
if view.action == 'update':
return request.user.id == obj.user.id
- return True
+ return False
diff --git a/new_rest_api/test_permissions.py b/new_rest_api/test_permissions.py
index 6569caa6ef48eff33727a27b565cf4c5417566d7..e726f9c8b94b4cfd81cd3d479eb39f7753f12246 100644
--- a/new_rest_api/test_permissions.py
+++ b/new_rest_api/test_permissions.py
@@ -38,6 +38,7 @@ class TestPermission(TestCase):
self.view_retrieve = MockView('retrieve')
self.view_update = MockView('update')
self.view_delete = MockView('delete')
+ self.view_authorize = MockView('authorize')
# has permission tests
def test_permission_authenticated_cant_list(self):
@@ -80,6 +81,16 @@ class TestPermission(TestCase):
.has_permission(self.not_authenticated_request, self.view_delete)
self.assertFalse(ret)
+ def test_permission_authenticated_can_authorize(self):
+ ret = self.user_view_permission\
+ .has_permission(self.authenticated_request, self.view_authorize)
+ self.assertTrue(ret)
+
+ def test_permission_authenticated_cant_authorize(self):
+ ret = self.user_view_permission\
+ .has_permission(self.not_authenticated_request, self.view_authorize)
+ self.assertFalse(ret)
+
# has object permission tests
def test_object_permission_can_update_same_user(self):
user = MockUser(id=self.authenticated_request.user.id)
@@ -95,9 +106,23 @@ class TestPermission(TestCase):
.has_object_permission(self.authenticated_request, self.view_update, obj)
self.assertFalse(ret)
- def test_object_permission_other_action(self):
+ def test_object_permission_can_retrieve_same_user(self):
+ user = MockUser(id=self.authenticated_request.user.id)
+ obj = MockObject(user)
+ ret = self.user_view_permission\
+ .has_object_permission(self.authenticated_request, self.view_retrieve, obj)
+ self.assertTrue(ret)
+
+ def test_object_permission_can_retrieve_difference_user(self):
user = MockUser(id=self.authenticated_request.user.id + 1)
obj = MockObject(user)
ret = self.user_view_permission\
- .has_object_permission(self.authenticated_request, self.view_list, obj)
+ .has_object_permission(self.authenticated_request, self.view_retrieve, obj)
self.assertTrue(ret)
+
+ def test_object_permission_other_action_forbidden(self):
+ user = MockUser(id=self.authenticated_request.user.id + 1)
+ obj = MockObject(user)
+ ret = self.user_view_permission\
+ .has_object_permission(self.authenticated_request, self.view_list, obj)
+ self.assertFalse(ret)
diff --git a/new_rest_api/test_views.py b/new_rest_api/test_views.py
index e2c06a121b2e79c809ec1806fa4583f68f55a246..68615a21bbc2004911e4cc72c9912a60e354964d 100644
--- a/new_rest_api/test_views.py
+++ b/new_rest_api/test_views.py
@@ -6,7 +6,7 @@ from django.core.files.uploadedfile import SimpleUploadedFile
from django.urls import reverse
from django.test import TestCase
-from pplbackend.utils import response_decode
+from pplbackend.utils import response_decode, get_client_login_with_user
class TestUserViews(TestCase):
@@ -33,6 +33,8 @@ class TestUserViews(TestCase):
'foto': self.image,
}
+ self.authorize_url = reverse('user-authorize')
+
@patch('registrasi.serializers.send_activation_email')
def test_register_and_send_activation_email_is_called_and_user_inactive(self,
mock_ativation_email):
@@ -67,6 +69,18 @@ class TestUserViews(TestCase):
self.assertEqual(data, expected)
self.assertEqual(resp.status_code, status.BAD_REQUEST)
+ def test_authorize_authenticated(self):
+ client = get_client_login_with_user(self.user)
+ resp = client.get(self.authorize_url)
+ self.assertEqual(resp.status_code, 200)
+ self.assertEqual(resp.content, b'')
+
+ def test_authorize_not_authenticated(self):
+ resp = self.client.get(self.authorize_url)
+ self.assertEqual(resp.status_code, 401)
+ self.assertEqual(resp.content,
+ b'{"detail":"Authentication credentials were not provided."}')
+
@patch('new_rest_api.views.account_activation_token.check_token', return_value=True)
@patch('new_rest_api.views.force_text')
@patch('new_rest_api.views.urlsafe_base64_decode', return_value='someb64')
@@ -88,7 +102,8 @@ class TestUserViews(TestCase):
resp = self.client.get(activation_url)
data = response_decode(resp)
- expected = f'''
+ expected = f'''
Aktivasi pengguna bisaGo
+
Hai {user.last_name},
@@ -127,7 +142,8 @@ bisaGo dev Team
resp = self.client.get(activation_url)
data = response_decode(resp)
- expected = '''
+ expected = '''Aktivasi pengguna bisaGo
+
Terjadi kesalahan atau akun sudah teraktivasi, mohon hubungi tim pengembang bisaGo.
'''
@@ -158,7 +174,8 @@ Terjadi kesalahan atau akun sudah teraktivasi, mohon hubungi tim pengembang bisa
resp = self.client.get(activation_url)
data = response_decode(resp)
- expected = '''
+ expected = '''Aktivasi pengguna bisaGo
+
Terjadi kesalahan atau akun sudah teraktivasi, mohon hubungi tim pengembang bisaGo.
'''
diff --git a/new_rest_api/views.py b/new_rest_api/views.py
index f275220d28692e2f578d3c120f0ea645781ff387..b457fdee4d3c2351a354b564d6946ce9e5bfda3f 100644
--- a/new_rest_api/views.py
+++ b/new_rest_api/views.py
@@ -5,8 +5,10 @@ from django.utils.encoding import force_text
from django.utils.http import urlsafe_base64_decode
from rest_framework import viewsets
+from rest_framework.authtoken.models import Token
from rest_framework.authentication import TokenAuthentication
from rest_framework.decorators import action
+from rest_framework.exceptions import NotAuthenticated
from rest_framework.response import Response
from registrasi.models import BisaGoUser
@@ -38,11 +40,15 @@ class UserViewSet(viewsets.ModelViewSet):
'email':instance.email, 'name':instance.last_name},
status=status.CREATED)
- @action(detail=False, methods=['GET'], url_path=ACTIVATION_URL_REGEX,
+ @action(detail=False, url_path=ACTIVATION_URL_REGEX,
renderer_classes=[AccountActivationHTMLRenderer])
- def activate(self, request, uidb64, token):
+ def activate(self, _, uidb64, token):
return activate(uidb64, token)
+ @action(detail=False)
+ def authorize(self, _):
+ return Response()
+
def activate(uidb64, token):
try:
diff --git a/oauth/tests.py b/oauth/tests.py
index 18fa16625621b61c8c41a0c0d640a9a23381bedb..931de91789bb8e4e157f6e8f9ba5839630d96336 100644
--- a/oauth/tests.py
+++ b/oauth/tests.py
@@ -1,12 +1,15 @@
-from django.test import TestCase
import json
-from .views import validate_google_token, _create_random_phone_number, _create_google_user
+
from unittest.mock import patch
+from django.test import TestCase
from django.test import Client
-from registrasi.models import BisaGoUser
from django.contrib.auth.models import User
from rest_framework.exceptions import AuthenticationFailed
+from pplbackend.utils import response_decode
+from registrasi.models import BisaGoUser
+from .views import validate_google_token, _create_random_phone_number, _create_google_user
+
class TestOauth(TestCase):
def setUp(self):
@@ -41,9 +44,10 @@ class TestOauth(TestCase):
"access_token": "sankdsanlk",
'password': passcode
})
- json_response = json.loads(response.content)
+ json_response = response_decode(response)
+ user = json_response.get('user')
self.assertEqual(200, response.status_code)
- self.assertEqual('mock_user@email.com', json_response.get("username"))
+ self.assertEqual('mock_user@email.com', user.get("username"))
def test_request_token_email_not_exists(self):
email = 'mock_user1212@email.com'
@@ -96,9 +100,10 @@ class TestOauth(TestCase):
'password': passcode,
'google': True,
})
- json_response = json.loads(response.content)
+ json_response = response_decode(response)
+ user = json_response.get('user')
self.assertEqual(200, response.status_code)
- self.assertEqual('mock_user@email.com', json_response.get("username"))
+ self.assertEqual('mock_user@email.com', user.get("username"))
@patch('oauth.views.json.loads')
@@ -113,9 +118,10 @@ class TestOauth(TestCase):
'password': passcode,
'google': True,
})
- json_response = json.loads(response.content)
+ json_response = response_decode(response)
+ user = json_response.get('user')
self.assertEqual(200, response.status_code)
- self.assertEqual('mock_user4545@email.com', json_response.get("username"))
+ self.assertEqual('mock_user4545@email.com', user.get("username"))
@patch('oauth.views.json.loads')
def test_google_login_error(self, mock_json_loads):
@@ -175,4 +181,4 @@ class TestOauth(TestCase):
self.assertEqual('mock_user3434@email.com', user.username)
self.assertEqual('mock_user3434@email.com', user.email)
self.assertEqual('name', user.last_name)
- self.assertEqual('1x1x1x1x1x1x1x1', user.phone_number.phone_number)
+ self.assertEqual('1x1x1x1x1x1x1x1', user.bisagouser.phone_number)
diff --git a/oauth/views.py b/oauth/views.py
index 43e1267617e9b7821b05f977cb54d29a70829398..e9e943f632eb86dfe511382cfc9bac2518c15252 100644
--- a/oauth/views.py
+++ b/oauth/views.py
@@ -11,7 +11,9 @@ from django.contrib.auth.base_user import BaseUserManager
from django.contrib.auth.hashers import make_password
from django.contrib.auth.models import User
from django.conf import settings
+
from registrasi.models import BisaGoUser
+from registrasi.serializers import BisaGoUserSerializer
@csrf_exempt
@api_view(http_method_names=['POST'])
@@ -28,7 +30,7 @@ def request_token(request):
result = _check_normal_auth(request, email, password)
user = result
- return _check_user(user)
+ return _check_user(user, request)
def _google_check(access_token, name):
try:
@@ -51,10 +53,12 @@ def _check_normal_auth(request, email, password):
raise NotFound(detail="User doesn't exist")
return user
-def _check_user(user):
+def _check_user(user, request):
if user.is_active:
- token, create = Token.objects.get_or_create(user=user)
- response = {'username': user.username, 'token': token.key, 'token_type': "token"}
+ token, _ = Token.objects.get_or_create(user=user)
+ request.user = user
+ serializer = BisaGoUserSerializer(user.bisagouser, context={'request':request})
+ response = {'user':serializer.data, 'token': token.key, 'token_type': "token"}
return JsonResponse(response, status=200)
else:
raise AuthenticationFailed(detail="Please activate your account")
diff --git a/registrasi/migrations/0013_auto_20210601_0748.py b/registrasi/migrations/0013_auto_20210601_0748.py
new file mode 100644
index 0000000000000000000000000000000000000000..391e57df575814fb9f68fc5638e286de07e634c9
--- /dev/null
+++ b/registrasi/migrations/0013_auto_20210601_0748.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.1.7 on 2021-06-01 07:48
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('registrasi', '0012_auto_20210528_1519'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='bisagouser',
+ name='organisasi_komunitas',
+ field=models.CharField(blank=True, default='-', max_length=64, null=True, verbose_name='Organisasi / Komunitas'),
+ ),
+ ]
diff --git a/registrasi/migrations/0014_auto_20210601_0849.py b/registrasi/migrations/0014_auto_20210601_0849.py
new file mode 100644
index 0000000000000000000000000000000000000000..4413c5d277981ce9bbd87a0e2ea5591b8373241c
--- /dev/null
+++ b/registrasi/migrations/0014_auto_20210601_0849.py
@@ -0,0 +1,28 @@
+# Generated by Django 3.1.7 on 2021-06-01 08:49
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('registrasi', '0013_auto_20210601_0748'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='bisagouser',
+ name='alamat',
+ field=models.CharField(blank=True, default='-', max_length=255, null=True, verbose_name='Alamat'),
+ ),
+ migrations.AlterField(
+ model_name='bisagouser',
+ name='disabilitas',
+ field=models.CharField(blank=True, default='Belum memilih', max_length=64, null=True, verbose_name='Disabilitas'),
+ ),
+ migrations.AlterField(
+ model_name='bisagouser',
+ name='pekerjaan',
+ field=models.CharField(blank=True, default='-', max_length=64, null=True, verbose_name='Pekerjaan'),
+ ),
+ ]
diff --git a/registrasi/migrations/0015_auto_20210601_1755.py b/registrasi/migrations/0015_auto_20210601_1755.py
new file mode 100644
index 0000000000000000000000000000000000000000..45b788bffd1d43ad9a6013eec4c47ad6f220fe95
--- /dev/null
+++ b/registrasi/migrations/0015_auto_20210601_1755.py
@@ -0,0 +1,21 @@
+# Generated by Django 3.1.7 on 2021-06-01 17:55
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ('registrasi', '0014_auto_20210601_0849'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='bisagouser',
+ name='user',
+ field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='bisagouser', to=settings.AUTH_USER_MODEL),
+ ),
+ ]
diff --git a/registrasi/models.py b/registrasi/models.py
index 1be6d6e13bbc881520abe1dbeb97afcaa6b056ad..9867d9cdd0cec8a7f5f9bba64be787c02948f0b3 100644
--- a/registrasi/models.py
+++ b/registrasi/models.py
@@ -7,15 +7,15 @@ from pplbackend.custom_model_field import CompressedImageField
class BisaGoUser(models.Model):
- user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="phone_number")
+ user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="bisagouser")
phone_number = models.CharField('Nomor Telepon', max_length=15, unique=True)
tanggal_lahir = models.DateField('Tanggal Lahir', max_length=15, null=False, default=date.today)
jenis_kelamin = models.CharField('Jenis Kelamin', max_length=20, default='-')
- disabilitas = models.CharField('Disabilitas', max_length=64, null=True, default='Belum memilih')
- organisasi_komunitas = models.CharField('Organisasi / Komunitas', max_length=64, null=True, default='-')
- pekerjaan = models.CharField('Pekerjaan', max_length=64, default='-')
- alamat = models.CharField('Alamat', max_length=255, default='-')
- foto = CompressedImageField('Foto', upload_to='user/', blank=True, default=None, null=True, quality=55)
+ disabilitas = models.CharField('Disabilitas', max_length=64, null=True, blank=True, default='Belum memilih')
+ organisasi_komunitas = models.CharField('Organisasi / Komunitas', max_length=64, blank=True, null=True, default='-')
+ pekerjaan = models.CharField('Pekerjaan', max_length=64, blank=True, null=True, default='-')
+ alamat = models.CharField('Alamat', max_length=255, blank=True, null=True, default='-')
+ foto = CompressedImageField('Foto', upload_to='user/', blank=True, null=True, default=None, quality=55)
seen = models.BooleanField('Seen', blank=True, default=True)
class Meta:
diff --git a/registrasi/serializers.py b/registrasi/serializers.py
index 7fb0c5139a514a8b8ffb081fa9d5d2cb7980c926..792ad232866b90d951e0a95905e8037cbf31467e 100644
--- a/registrasi/serializers.py
+++ b/registrasi/serializers.py
@@ -1,4 +1,5 @@
from rest_framework import serializers
+from colour import Color
from django.contrib.auth.models import User
from django.utils.regex_helper import _lazy_re_compile
@@ -11,15 +12,21 @@ class BisaGoUserSerializer(serializers.ModelSerializer):
username = serializers.CharField(source='user.username', read_only=True)
name = serializers.CharField(source='user.last_name')
email = serializers.CharField(source='user.email', read_only=True)
+ tanggal_lahir = serializers.DateField(format='%d %B %Y',
+ input_formats=['%d %B %Y', '%Y-%m-%d'])
hidden_fields = serializers.SerializerMethodField()
+ hidden_fields_verbose = serializers.SerializerMethodField()
+ can_see_hidden_fields = serializers.SerializerMethodField()
+ hidden_fields_color = serializers.SerializerMethodField()
class Meta:
model = BisaGoUser
fields = (
'phone_number', 'tanggal_lahir', 'jenis_kelamin', 'name', 'email',
'disabilitas', 'pekerjaan', 'alamat', 'foto', 'seen', 'username',
- 'organisasi_komunitas', 'hidden_fields',
+ 'organisasi_komunitas', 'hidden_fields', 'hidden_fields_verbose',
+ 'can_see_hidden_fields', 'hidden_fields_color'
)
hidden_fields = ('phone_number', 'email', 'alamat', 'tanggal_lahir')
@@ -27,7 +34,7 @@ class BisaGoUserSerializer(serializers.ModelSerializer):
'phone_number': 'nomor telepon',
'tanggal_lahir': 'tanggal lahir',
}
- hidden_replacement_char = '-'
+ hidden_replacement_char = '({} dirahasiakan)'
update_bisago_fields = (
'phone_number', 'seen', 'alamat', 'jenis_kelamin', 'tanggal_lahir',
@@ -42,21 +49,32 @@ class BisaGoUserSerializer(serializers.ModelSerializer):
update_user_fields = ('last_name',)
update_user_fields_mapper = {}
- def get_hidden_fields(self, *args):
+ def get_hidden_fields(self, *_):
+ return self.Meta.hidden_fields
+
+ def get_hidden_fields_verbose(self, *_):
hidden_fields = self.Meta.hidden_fields
verbose = self.Meta.hidden_fields_verbose
- return [verbose.get(field) if verbose.get(field) else field\
- for field in hidden_fields]
+ return [verbose.get(field) or field for field in hidden_fields]
+
+ def get_can_see_hidden_fields(self, instance):
+ return self._can_see_hidden_fields(instance)
+
+ def get_hidden_fields_color(self, *_):
+ return Color('#808080').hex_l
- def can_see_hidden_fields(self, instance):
+ def _can_see_hidden_fields(self, instance):
request = self.context['request']
return request.user.id == instance.user.id or instance.seen
def to_representation(self, instance):
representation = super().to_representation(instance)
- if not self.can_see_hidden_fields(instance):
+ if not self._can_see_hidden_fields(instance):
for hidden_field in self.Meta.hidden_fields:
- representation[hidden_field] = self.Meta.hidden_replacement_char
+ verbose_name = self.Meta.hidden_fields_verbose.get(hidden_field)\
+ or hidden_field
+ representation[hidden_field] = self.Meta.hidden_replacement_char\
+ .format(verbose_name)
return representation
def to_internal_value(self, data):
diff --git a/registrasi/test_serializers.py b/registrasi/test_serializers.py
index a68224c9b3d08ce29909ea766e3d07e12330276b..06a9b354a99f0976c762cb7dc91462604c125a12 100644
--- a/registrasi/test_serializers.py
+++ b/registrasi/test_serializers.py
@@ -53,7 +53,9 @@ class BaseTestSerializer(TestCase):
self.image = open("test_file/test1.jpg", 'rb')
self.upload_image = SimpleUploadedFile("test1.jpg",
content=self.image.read(), content_type='upload_image/jpeg')
- self.hidden_fields = ['nomor telepon','email','alamat','tanggal lahir']
+ self.hidden_fields = ('phone_number','email','alamat','tanggal_lahir')
+ self.hidden_fields_verbose = ['nomor telepon','email','alamat','tanggal lahir']
+ self.maxDiff = 1e5
class TestBisaGoUserSerializer(BaseTestSerializer):
def test_meta_model(self):
@@ -63,7 +65,8 @@ class TestBisaGoUserSerializer(BaseTestSerializer):
self.assertSequenceEqual(BisaGoUserSerializer.Meta.fields, (
'phone_number', 'tanggal_lahir', 'jenis_kelamin', 'name', 'email',
'disabilitas', 'pekerjaan', 'alamat', 'foto', 'seen', 'username',
- 'organisasi_komunitas', 'hidden_fields',
+ 'organisasi_komunitas', 'hidden_fields', 'hidden_fields_verbose',
+ 'can_see_hidden_fields', 'hidden_fields_color',
))
def test_meta_hidden_fields(self):
@@ -75,7 +78,8 @@ class TestBisaGoUserSerializer(BaseTestSerializer):
{'phone_number': 'nomor telepon', 'tanggal_lahir': 'tanggal lahir'})
def test_meta_hidden_replacement_char(self):
- self.assertEqual(BisaGoUserSerializer.Meta.hidden_replacement_char, '-')
+ self.assertEqual(BisaGoUserSerializer.Meta.hidden_replacement_char,
+ '({} dirahasiakan)')
def test_meta_update_bisago_fields(self):
self.assertEqual(BisaGoUserSerializer.Meta.update_bisago_fields, (
@@ -108,7 +112,9 @@ class TestBisaGoUserSerializer(BaseTestSerializer):
'pekerjaan': '-', 'alamat': '-', 'foto': None, 'seen': True,
'username': 'dummy username', 'name': 'dummy lastname',
'email': 'test@email.com', 'alamat': 'Dummy St',
- 'organisasi_komunitas': '-', 'hidden_fields': self.hidden_fields
+ 'organisasi_komunitas': '-', 'hidden_fields': self.hidden_fields,
+ 'hidden_fields_verbose': self.hidden_fields_verbose,
+ 'can_see_hidden_fields': True, 'hidden_fields_color': '#808080',
}
self.assertEqual(bisagouser.data, expected)
@@ -128,6 +134,8 @@ class TestBisaGoUserSerializer(BaseTestSerializer):
'username': 'dummy username', 'name': 'dummy lastname',
'email': 'test@email.com', 'organisasi_komunitas': '-',
'hidden_fields': self.hidden_fields,
+ 'hidden_fields_verbose': self.hidden_fields_verbose,
+ 'can_see_hidden_fields': True, 'hidden_fields_color': '#808080',
}
self.assertEqual(bisagouser.data, expected)
@@ -143,17 +151,19 @@ class TestBisaGoUserSerializer(BaseTestSerializer):
bisagouser = BisaGoUserSerializer(bisagouser,
context={'request':request})
- replaced = BisaGoUserSerializer.Meta.hidden_replacement_char
expected = {
- 'phone_number': replaced, 'tanggal_lahir': replaced,
+ 'phone_number': '(nomor telepon dirahasiakan)',
+ 'tanggal_lahir': '(tanggal lahir dirahasiakan)',
'jenis_kelamin': '-', 'disabilitas': 'Belum memilih',
- 'pekerjaan': '-', 'alamat': '-', 'foto': None, 'seen': False,
+ 'pekerjaan': '-', 'foto': None, 'seen': False,
'username': 'dummy username', 'name': 'dummy lastname',
- 'email': replaced, 'alamat': replaced,
+ 'email': '(email dirahasiakan)', 'alamat': '(alamat dirahasiakan)',
'organisasi_komunitas': '-', 'hidden_fields': self.hidden_fields,
+ 'hidden_fields_verbose': self.hidden_fields_verbose,
+ 'can_see_hidden_fields': False, 'hidden_fields_color': '#808080',
}
- self.assertEqual(bisagouser.data, expected)
+ self.assertDictEqual(bisagouser.data, expected)
def test_can_update(self):
user = User.objects.create_user(**self.mock_user)
@@ -175,12 +185,14 @@ class TestBisaGoUserSerializer(BaseTestSerializer):
serializer.save()
expected = {
- 'phone_number': '99999999', 'tanggal_lahir': '2000-10-02',
+ 'phone_number': '99999999', 'tanggal_lahir': '02 October 2000',
'jenis_kelamin': 'laki-laki', 'disabilitas': 'tanpa batas',
'pekerjaan': 'makan', 'alamat': 'dif dummy st', 'seen': False,
'username': 'dummy username', 'name': 'another dummy name',
'email': 'test@email.com', 'hidden_fields': self.hidden_fields,
- 'organisasi_komunitas': 'komunitas tanpa batas'
+ 'organisasi_komunitas': 'komunitas tanpa batas',
+ 'hidden_fields_verbose': self.hidden_fields_verbose,
+ 'can_see_hidden_fields': True, 'hidden_fields_color': '#808080',
}
data = serializer.data
@@ -208,18 +220,20 @@ class TestBisaGoUserSerializer(BaseTestSerializer):
serializer.save()
expected = {
- 'phone_number': '99999999', 'tanggal_lahir': '2000-10-02',
+ 'phone_number': '99999999', 'tanggal_lahir': '02 October 2000',
'jenis_kelamin': 'laki-laki', 'disabilitas': 'tanpa batas',
'pekerjaan': 'makan', 'alamat': 'dif dummy st', 'seen': False,
'username': 'dummy username', 'name': 'another dummy name',
'email': 'test@email.com', 'hidden_fields': self.hidden_fields,
'organisasi_komunitas': 'komunitas tanpa batas',
'foto': MockRequest().build_absolute_uri(bisagouser.foto.url),
+ 'hidden_fields_verbose': self.hidden_fields_verbose,
+ 'can_see_hidden_fields': True, 'hidden_fields_color': '#808080',
}
data = serializer.data
- self.assertEqual(data, expected)
+ self.assertDictEqual(data, expected)
class TestRegisterUserSerializer(BaseTestSerializer):
diff --git a/requirements.txt b/requirements.txt
index e50ab4a39086dd152a8591ca5b6ebd3f7dd0c1e1..e2767d609d8e1525217e499438318d62a582b38a 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -74,3 +74,4 @@ pyfcm==1.4.9
django-mock-queries==2.1.6
mock==4.0.3
model-bakery==1.1.1
+colour==0.1.5
diff --git a/templates/acc_activate_success.html b/templates/acc_activate_success.html
index 8f61337c77998544806afed82dee6b0443da9a69..8ecf1760685dfd120a0d723465aee0b396852939 100644
--- a/templates/acc_activate_success.html
+++ b/templates/acc_activate_success.html
@@ -1,3 +1,4 @@
+Aktivasi pengguna bisaGo
{% if success %}
Hai {{ user.last_name }},