From 2796fda8df6e19fce7f4741e0404f08eb3319ea0 Mon Sep 17 00:00:00 2001 From: Bimo Iman Smartadi Date: Tue, 28 Apr 2020 17:07:37 +0700 Subject: [PATCH 01/14] [REFACTOR] Increasing linter score on informasi_fasilitas --- informasi_fasilitas/models.py | 2 +- informasi_fasilitas/serializers.py | 3 +- informasi_fasilitas/tests.py | 516 ++++++++++++----------------- informasi_fasilitas/urls.py | 13 +- informasi_fasilitas/views.py | 158 +++++---- 5 files changed, 292 insertions(+), 400 deletions(-) diff --git a/informasi_fasilitas/models.py b/informasi_fasilitas/models.py index 6bf4783..8f7058b 100644 --- a/informasi_fasilitas/models.py +++ b/informasi_fasilitas/models.py @@ -60,7 +60,7 @@ class Fasilitas(models.Model): is_verified = models.BooleanField(default=False) class Komentar(models.Model): - fasilitas =models.ForeignKey(Fasilitas, on_delete=models.CASCADE) + 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() diff --git a/informasi_fasilitas/serializers.py b/informasi_fasilitas/serializers.py index 9aa45f2..5f52290 100644 --- a/informasi_fasilitas/serializers.py +++ b/informasi_fasilitas/serializers.py @@ -5,4 +5,5 @@ from .models import Lokasi class LokasiSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Lokasi - fields = ('id', 'name', 'latitude', 'longitude', 'alamat', 'no_telp', 'image') \ No newline at end of file + fields = ('id', 'name', 'latitude', 'longitude', 'alamat', 'no_telp', 'image') + \ No newline at end of file diff --git a/informasi_fasilitas/tests.py b/informasi_fasilitas/tests.py index c4cd4a4..c4f2e6a 100644 --- a/informasi_fasilitas/tests.py +++ b/informasi_fasilitas/tests.py @@ -1,27 +1,51 @@ +import json +import tempfile +from http import HTTPStatus from django.test import TestCase, Client from django.db.utils import IntegrityError -from .models import Lokasi, Fasilitas, Komentar, KURSI_RODA, RUNNING_TEXT, Likes, Dislikes -from .serializers import LokasiSerializer -from registrasi.models import BisaGoUser from django.contrib.auth.models import User from django.urls import reverse, path, include -from http import HTTPStatus -import json -import tempfile + +from registrasi.models import BisaGoUser +from .models import Lokasi, Fasilitas, Komentar, KURSI_RODA, RUNNING_TEXT, Likes, Dislikes +from .serializers import LokasiSerializer not_null_constraint_failed_message = 'NOT NULL constraint failed' +image_test = tempfile.NamedTemporaryFile(suffix=".jpg").name user_test = User(username='user@gmail.com', - last_name='name', - email='user@gmail.com', - password='hahagotim' - ) -lokasi_test = Lokasi(name='Mall', - latitude=0.0, - longitude=0.0, - alamat='Jl. Raya Bogor no.1, Jakarta', - no_telp='081212123131', - image= tempfile.NamedTemporaryFile(suffix=".jpg").name - ) + last_name='name', + email='user@gmail.com', + password='hahagotim') + +lokasi_test = Lokasi(name='Mall', + latitude=0.0, + longitude=0.0, + alamat='Jl. Raya Bogor no.1, Jakarta', + no_telp='081212123131', + image=tempfile.NamedTemporaryFile(suffix=".jpg").name) + +fasilitas_test = Fasilitas(lokasi=lokasi_test, + user=user_test, + deskripsi="penjelasan panjang", + like=0, + dislike=0, + rating=5, + tag={KURSI_RODA, RUNNING_TEXT}, + image=image_test) + +lokasi_data_post = {'name' : 'Mall', + 'latitude' : 0.0, + 'longitude' : 0.0, + 'alamat' : 'Jl. Raya Bogor no.1, Jakarta', + 'no_telp' : '081212123131'} + +email_test = "user@gmail.com" +password_test = "hahagotim" + +user_post = {'name':'name', + 'email':email_test, + 'phone_number':000000000, + 'password':password_test} class InformasiFasilitasModelTest(TestCase): @@ -35,10 +59,10 @@ class InformasiFasilitasModelTest(TestCase): def test_models_create_new_lokasi(self): image = tempfile.NamedTemporaryFile(suffix=".jpg").name Lokasi.objects.create( - name='Mall', - latitude=0.0, - longitude=0.0, - alamat='Jl. Raya Bogor no.1, Jakarta', + name='Mall', + latitude=0.0, + longitude=0.0, + alamat='Jl. Raya Bogor no.1, Jakarta', no_telp='081212123131', image=image ) @@ -49,23 +73,22 @@ class InformasiFasilitasModelTest(TestCase): with self.assertRaises(IntegrityError) as cm: obj = Fasilitas(lokasi=None) obj.save() - self.assertTrue(str(cm.exception).startswith( - not_null_constraint_failed_message)) - + self.assertTrue(str(cm.exception).startswith(not_null_constraint_failed_message)) + def test_models_create_new_fasilitas(self): image = tempfile.NamedTemporaryFile(suffix=".jpg").name - user=user_test + user = user_test user.save() - lokasi=lokasi_test + lokasi = lokasi_test lokasi.save() Fasilitas.objects.create( - lokasi=lokasi, - user=user, - deskripsi="penjelasan panjang", - like=0, - dislike=0, - rating=5, - tag={KURSI_RODA, RUNNING_TEXT}, + lokasi=lokasi, + user=user, + deskripsi="penjelasan panjang", + like=0, + dislike=0, + rating=5, + tag={KURSI_RODA, RUNNING_TEXT}, image=image ) count = Fasilitas.objects.all().count() @@ -79,21 +102,11 @@ class InformasiFasilitasModelTest(TestCase): not_null_constraint_failed_message)) def test_models_create_new_komentar(self): - image = tempfile.NamedTemporaryFile(suffix=".jpg").name - user=user_test + user = user_test user.save() - lokasi=lokasi_test + lokasi = lokasi_test lokasi.save() - fasilitas=Fasilitas( - lokasi=lokasi, - user=user, - deskripsi="penjelasan panjang", - like=0, - dislike=0, - rating=5, - tag={KURSI_RODA, RUNNING_TEXT}, - image=image - ) + fasilitas = fasilitas_test fasilitas.save() Komentar.objects.create( user=user, @@ -102,7 +115,7 @@ class InformasiFasilitasModelTest(TestCase): ) count = Komentar.objects.all().count() self.assertNotEqual(count, 0) - + def test_models_dislikes_not_created(self): with self.assertRaises(IntegrityError) as cm: obj = Dislikes(fasilitas=None) @@ -111,25 +124,13 @@ class InformasiFasilitasModelTest(TestCase): not_null_constraint_failed_message)) def test_models_create_new_dislikes(self): - image = tempfile.NamedTemporaryFile(suffix=".jpg").name - user=user_test + user = user_test user.save() - lokasi=lokasi_test + lokasi = lokasi_test lokasi.save() - fasilitas=Fasilitas( - lokasi=lokasi, - user=user, - deskripsi="penjelasan panjang", - like=0, - dislike=0, - rating=5, - tag={KURSI_RODA, RUNNING_TEXT}, - image=image - ) + fasilitas = fasilitas_test fasilitas.save() - Dislikes.objects.create(user=user, - fasilitas=fasilitas, - ) + Dislikes.objects.create(user=user, fasilitas=fasilitas) count = Dislikes.objects.all().count() self.assertNotEqual(count, 0) @@ -137,32 +138,19 @@ class InformasiFasilitasModelTest(TestCase): with self.assertRaises(IntegrityError) as cm: obj = Likes(fasilitas=None) obj.save() - self.assertTrue(str(cm.exception).startswith( - not_null_constraint_failed_message)) + self.assertTrue(str(cm.exception).startswith(not_null_constraint_failed_message)) def test_models_create_new_likes(self): - image = tempfile.NamedTemporaryFile(suffix=".jpg").name - user=user_test + user = user_test user.save() - lokasi=lokasi_test + lokasi = lokasi_test lokasi.save() - fasilitas=Fasilitas( - lokasi=lokasi, - user=user, - deskripsi="penjelasan panjang", - like=0, - dislike=0, - rating=5, - tag={KURSI_RODA, RUNNING_TEXT}, - image=image - ) + fasilitas = fasilitas_test fasilitas.save() - Likes.objects.create(user=user, - fasilitas=fasilitas, - ) + Likes.objects.create(user=user, fasilitas=fasilitas) count = Likes.objects.all().count() self.assertNotEqual(count, 0) - + class InformasiFasilitasViewTest(TestCase): urlpatterns = [ @@ -170,45 +158,44 @@ class InformasiFasilitasViewTest(TestCase): ] def setUp(self): - email='usersetup@gmail.com' - password='hahagotim' + email = 'usersetup@gmail.com' + password = 'hahagotim' Client().post('/api/register/', - {'name':'name', - 'email':email, - 'phone_number':1000000, - 'password':password}) + {'name':'name', + 'email':email, + 'phone_number':1000000, + 'password':password}) token_response = Client().post('/api-token-auth/', - {'username' : email, 'password' : password}) + {'username' : email, + 'password' : password}) content = json.loads(token_response.content.decode('utf-8')) token = content['token'] client = Client(HTTP_AUTHORIZATION='token '+token) - client.post(reverse('add-lokasi'), - {'name' : 'Ma Homie', - 'latitude' : 0.1, - 'longitude' : 0.1, - 'alamat' : 'Jl. Raya Bogor no.2, Jakarta', - 'no_telp' : '081212123132'}) + client.post(reverse('add-lokasi'), + {'name' : 'Ma Homie', + 'latitude' : 0.1, + 'longitude' : 0.1, + 'alamat' : 'Jl. Raya Bogor no.2, Jakarta', + 'no_telp' : '081212123132'}) - client.post(reverse('add-lokasi'), - {'name' : 'Ma Homies', - 'latitude' : 0.2, - 'longitude' : 0.1, - 'alamat' : 'Jl. Raya Bogor no.3, Jakarta', - 'no_telp' : '081212123134'}) + client.post(reverse('add-lokasi'), + {'name' : 'Ma Homies', + 'latitude' : 0.2, + 'longitude' : 0.1, + 'alamat' : 'Jl. Raya Bogor no.3, Jakarta', + 'no_telp' : '081212123134'}) client.post(reverse('add-fasilitas', kwargs={"nama_lokasi":"Ma Homie"}), - {'deskripsi' : 'kayaknya deskrispi', - 'rating' : 3, - 'tag' : "KR RT", - 'image' : 'gambar.jpg', - }) - + {'deskripsi' : 'kayaknya deskrispi', + 'rating' : 3, + 'tag' : "KR RT", + 'image' : 'gambar.jpg'}) class LokasiRelatedViewTest(InformasiFasilitasViewTest): def test_LokasiSerializer_valid(self): - serializer = LokasiSerializer(data = { + serializer = LokasiSerializer(data={ 'name' : 'Mall1', 'latitude' : 0.0, 'longitude' : 0.0, @@ -220,24 +207,24 @@ class LokasiRelatedViewTest(InformasiFasilitasViewTest): def test_can_get_lokasi_list_url(self): response = Client().get(reverse('lokasi-list')) self.assertEqual(response.status_code, HTTPStatus.OK) - + def test_get_lokasi_list_json(self): response = Client().get(reverse('lokasi-list')) content = json.loads(response.content.decode('utf-8')) expected_json = [{'id': 1, - 'name':'Ma Homie', - 'latitude' : 0.1, - 'longitude' : 0.1, - 'alamat' : 'Jl. Raya Bogor no.2, Jakarta', - 'no_telp' : '081212123132', - 'image':None}, - {'id': 2, - 'name':'Ma Homies', - 'latitude' : 0.2, - 'longitude' : 0.1, - 'alamat' : 'Jl. Raya Bogor no.3, Jakarta', - 'no_telp' : '081212123134', - 'image':None} + 'name':'Ma Homie', + 'latitude' : 0.1, + 'longitude' : 0.1, + 'alamat' : 'Jl. Raya Bogor no.2, Jakarta', + 'no_telp' : '081212123132', + 'image':None}, + {'id': 2, + 'name':'Ma Homies', + 'latitude' : 0.2, + 'longitude' : 0.1, + 'alamat' : 'Jl. Raya Bogor no.3, Jakarta', + 'no_telp' : '081212123134', + 'image':None} ] self.assertEqual(content, expected_json) @@ -246,25 +233,25 @@ class LokasiRelatedViewTest(InformasiFasilitasViewTest): self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) def test_can_get_lokasi_details(self): - lokasi=lokasi_test + lokasi = lokasi_test lokasi.save() response = Client().get(reverse('lokasi-details', kwargs={'nama_lokasi':'Mall'})) self.assertEqual(response.status_code, HTTPStatus.OK) - + def test_can_get_lokasi_details_json(self): response = Client().get(reverse('lokasi-details', kwargs={'nama_lokasi':'Ma Homie'})) content = json.loads(response.content.decode('utf-8')) expected_json = {'id': 1, - 'name':'Ma Homie', - 'latitude' : 0.1, - 'longitude' : 0.1, - 'alamat' : 'Jl. Raya Bogor no.2, Jakarta', - 'no_telp' : '081212123132', - 'image':None} + 'name':'Ma Homie', + 'latitude' : 0.1, + 'longitude' : 0.1, + 'alamat' : 'Jl. Raya Bogor no.2, Jakarta', + 'no_telp' : '081212123132', + 'image':None} self.assertEqual(content, expected_json) def test_cannot_post_lokasi_details(self): - lokasi=lokasi_test + lokasi = lokasi_test lokasi.save() response = Client().post(reverse('lokasi-details', kwargs={'nama_lokasi':'Mall'})) self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) @@ -274,94 +261,59 @@ class LokasiRelatedViewTest(InformasiFasilitasViewTest): self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) def test_can_post_add_lokasi(self): - email='user@gmail.com' - password='hahagotim' - Client().post('/api/register/', - {'name':'name', - 'email':email, - 'phone_number':000000000, - 'password':password}) - token_response = Client().post('/api-token-auth/', - {'username' : email, 'password' : password}) + Client().post('/api/register/', user_post) + token_response = Client().post('/api-token-auth/', {'username' : email_test, + 'password' : password_test}) content = json.loads(token_response.content.decode('utf-8')) token = content['token'] client = Client(HTTP_AUTHORIZATION='token '+token) - response = client.post(reverse('add-lokasi'), - {'name' : 'Mall', - 'latitude' : 0.0, - 'longitude' : 0.0, - 'alamat' : 'Jl. Raya Bogor no.1, Jakarta', - 'no_telp' : '081212123131'}) + response = client.post(reverse('add-lokasi'), lokasi_data_post) self.assertEqual(response.status_code, HTTPStatus.CREATED) - + def test_can_post_add_json(self): - email='user@gmail.com' - password='hahagotim' - Client().post('/api/register/', - {'name':'name', - 'email':email, - 'phone_number':000000000, - 'password':password}) - token_response = Client().post('/api-token-auth/', - {'username' : email, 'password' : password}) + Client().post('/api/register/', user_post) + token_response = Client().post('/api-token-auth/', {'username' : email_test, + 'password' : password_test}) content = json.loads(token_response.content.decode('utf-8')) token = content['token'] client = Client(HTTP_AUTHORIZATION='token '+token) - response = client.post(reverse('add-lokasi'), - {'name' : 'Mall', - 'latitude' : 0.0, - 'longitude' : 0.0, - 'alamat' : 'Jl. Raya Bogor no.1, Jakarta', - 'no_telp' : '081212123131'}) + response = client.post(reverse('add-lokasi'), lokasi_data_post) response_json = json.loads(response.content.decode("utf-8")) - expected_json = { - "id": 3, - 'name' : 'Mall', - 'latitude' : 0.0, - 'longitude' : 0.0, - 'alamat' : 'Jl. Raya Bogor no.1, Jakarta', - 'no_telp' : '081212123131', - "image" : None - } - + expected_json = {"id": 3, + 'name' : 'Mall', + 'latitude' : 0.0, + 'longitude' : 0.0, + 'alamat' : 'Jl. Raya Bogor no.1, Jakarta', + 'no_telp' : '081212123131', + "image" : None + } + self.assertEqual(response_json, expected_json) def test_put_update_detail_lokasi_success(self): - email='user@gmail.com' - password='hahagotim' - Client().post('/api/register/', - {'name':'name', - 'email':email, - 'phone_number':000000000, - 'password':password}) - token_response = Client().post('/api-token-auth/', - {'username' : email, 'password' : password}) + Client().post('/api/register/', user_post) + token_response = Client().post('/api-token-auth/', {'username' : email_test, + 'password' : password_test}) content = json.loads(token_response.content.decode('utf-8')) token = content['token'] client = Client(HTTP_AUTHORIZATION='token '+token) - lokasi=lokasi_test + lokasi = lokasi_test lokasi.save() - - response = client.put(reverse('update-lokasi', kwargs={'nama_lokasi':'Mall'}), - data={'no_telp' : '0000000121',}, - content_type="multipart/form-data") + + urls = reverse('update-lokasi', kwargs={'nama_lokasi':'Mall'}) + response = client.put(urls, data={'no_telp' : '0000000121',}, + content_type="multipart/form-data") self.assertEqual(response.status_code, HTTPStatus.ACCEPTED) - + def test_cannot_get_add_lokasi(self): - email='user@gmail.com' - password='hahagotim' - Client().post('/api/register/', - {'name':'name', - 'email':email, - 'phone_number':000000000, - 'password':password}) - token_response = Client().post('/api-token-auth/', - {'username' : email, 'password' : password}) + Client().post('/api/register/', user_post) + token_response = Client().post('/api-token-auth/', {'username' : email_test, + 'password' : password_test}) content = json.loads(token_response.content.decode('utf-8')) token = content['token'] client = Client(HTTP_AUTHORIZATION='token '+token) @@ -372,181 +324,123 @@ class LokasiRelatedViewTest(InformasiFasilitasViewTest): class FasilitasRelatedViewTest(InformasiFasilitasViewTest): def test_can_get_list_fasilitas(self): - image = tempfile.NamedTemporaryFile(suffix=".jpg").name - user=user_test + user = user_test user.save() - lokasi=lokasi_test + lokasi = lokasi_test lokasi.save() - fasilitas=Fasilitas( - lokasi=lokasi, - user=user, - deskripsi="penjelasan panjang", - like=0, - dislike=0, - rating=5, - tag={KURSI_RODA, RUNNING_TEXT}, - image=image - ) + fasilitas = fasilitas_test fasilitas.save() response = Client().get(reverse('list-fasilitas', kwargs={'nama_lokasi':'Mall'})) self.assertEqual(response.status_code, HTTPStatus.OK) def test_cannot_post_list_fasilitas(self): - image = tempfile.NamedTemporaryFile(suffix=".jpg").name - lokasi=Lokasi( - name='Mall', - latitude=0.0, - longitude=0.0, - alamat='Jl. Raya Bogor no.1, Jakarta', - no_telp='081212123131', - image=image - ) + lokasi = lokasi_test lokasi.save() response = Client().post(reverse('list-fasilitas', kwargs={'nama_lokasi':'Mall'})) - self.assertEqual(response.status_code, 405) + self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) def test_get_list_fasilitas_not_found(self): response = Client().get(reverse('list-fasilitas', kwargs={'nama_lokasi':'Mall'})) - self.assertEqual(response.status_code, 404) + self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) def test_can_get_detail_fasilitas(self): - image = tempfile.NamedTemporaryFile(suffix=".jpg").name - user=user_test + user = user_test user.save() - lokasi=lokasi_test + lokasi = lokasi_test lokasi.save() - fasilitas=Fasilitas( - lokasi=lokasi, - user=user, - deskripsi="penjelasan panjang", - like=0, - dislike=0, - rating=5, - tag={KURSI_RODA, RUNNING_TEXT}, - image=image - ) + fasilitas = fasilitas_test fasilitas.save() id = fasilitas.id - response = Client().get(reverse('detail-fasilitas', kwargs={'nama_lokasi':'Mall', 'id':id})) - self.assertEqual(response.status_code, 200) + response = Client().get(reverse('detail-fasilitas', kwargs={'nama_lokasi':'Mall', + 'id':id})) + self.assertEqual(response.status_code, HTTPStatus.OK) def test_cannot_post_detail_fasilitas(self): - image = tempfile.NamedTemporaryFile(suffix=".jpg").name - user=user_test + user = user_test user.save() - lokasi=lokasi_test + lokasi = lokasi_test lokasi.save() - fasilitas=Fasilitas( - lokasi=lokasi, - user=user, - deskripsi="penjelasan panjang", - like=0, - dislike=0, - rating=5, - tag={KURSI_RODA, RUNNING_TEXT}, - image=image - ) + fasilitas = fasilitas_test fasilitas.save() id = fasilitas.id - response = Client().post(reverse('detail-fasilitas', kwargs={'nama_lokasi':'Mall', 'id':id})) - self.assertEqual(response.status_code, 405) + response = Client().post(reverse('detail-fasilitas', kwargs={'nama_lokasi':'Mall', + 'id':id})) + self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) def test_get_detail_fasilitas_not_found(self): response = Client().get(reverse('detail-fasilitas', kwargs={'nama_lokasi':'Mall', 'id':0})) - self.assertEqual(response.status_code, 404) + self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) def test_can_post_add_fasilitas(self): - email='user@gmail.com' - password='hahagotim' - Client().post('/api/register/', - {'name':'name', - 'email':email, - 'phone_number':000000000, - 'password':password}) - token_response = Client().post('/api-token-auth/', - {'username' : email, 'password' : password}) + Client().post('/api/register/', user_post) + token_response = Client().post('/api-token-auth/', {'username' : email_test, + 'password' : password_test}) content = json.loads(token_response.content.decode('utf-8')) token = content['token'] client = Client(HTTP_AUTHORIZATION='token '+token) - lokasi=lokasi_test + lokasi = lokasi_test lokasi.save() - response = client.post(reverse('add-fasilitas', kwargs={'nama_lokasi':'Mall'}), - {'deskripsi' : 'penjelasan fasilitas', - 'rating' : 2, - 'tag' : 'KR RT'}) - self.assertEqual(response.status_code, 201) - + urls = reverse('add-fasilitas', kwargs={'nama_lokasi':'Mall'}) + response = client.post(urls, {'deskripsi' : 'penjelasan fasilitas', + 'rating' : 2, + 'tag' : 'KR RT'}) + self.assertEqual(response.status_code, HTTPStatus.CREATED) + def test_cannot_get_add_fasilitas(self): - email='user@gmail.com' - password='hahagotim' - Client().post('/api/register/', - {'name':'name', - 'email':email, - 'phone_number':000000000, - 'password':password}) - token_response = Client().post('/api-token-auth/', - {'username' : email, 'password' : password}) + Client().post('/api/register/', user_post) + token_response = Client().post('/api-token-auth/', {'username' : email_test, + 'password' : password_test}) content = json.loads(token_response.content.decode('utf-8')) token = content['token'] client = Client(HTTP_AUTHORIZATION='token '+token) - lokasi=lokasi_test + lokasi = lokasi_test lokasi.save() response = client.get(reverse('add-fasilitas', kwargs={'nama_lokasi':'Mall'})) - self.assertEqual(response.status_code, 405) + self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) def test_post_add_fasilitas_not_found(self): - email='user@gmail.com' - password='hahagotim' - Client().post('/api/register/', - {'name':'name', - 'email':email, - 'phone_number':000000000, - 'password':password}) - token_response = Client().post('/api-token-auth/', - {'username' : email, 'password' : password}) + ''' + Check this method later + ''' + Client().post('/api/register/', user_post) + token_response = Client().post('/api-token-auth/', {'username' : email_test, + 'password' : password_test}) content = json.loads(token_response.content.decode('utf-8')) token = content['token'] client = Client(HTTP_AUTHORIZATION='token '+token) - response = client.post(reverse('add-fasilitas', kwargs={'nama_lokasi':'Mall'}), - {'deskripsi' : 'penjelasan fasilitas', - 'rating' : 2}) + urls = reverse('add-fasilitas', kwargs={'nama_lokasi':'Mall'}) + response = client.post(urls, {'deskripsi' : 'penjelasan fasilitas', + 'rating' : 2}) self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) def test_put_update_detail_fasilitas_success(self): - email='user@gmail.com' - password='hahagotim' - Client().post('/api/register/', - {'name':'name', - 'email':email, - 'phone_number':000000000, - 'password':password}) - token_response = Client().post('/api-token-auth/', - {'username' : email, 'password' : password}) + Client().post('/api/register/', user_post) + token_response = Client().post('/api-token-auth/', {'username' : email_test, + 'password' : password_test}) content = json.loads(token_response.content.decode('utf-8')) token = content['token'] client = Client(HTTP_AUTHORIZATION='token '+token) - lokasi=lokasi_test + lokasi = lokasi_test lokasi.save() + urls_post = reverse('add-fasilitas', kwargs={'nama_lokasi':'Mall'}) + data_post = {'deskripsi' : 'penjelasan fasilitas', + 'rating' : 2, + 'tag' : 'KR RT'} + response = client.post(urls_post, data=data_post) - response = client.post(reverse('add-fasilitas', kwargs={'nama_lokasi':'Mall'}), - {'deskripsi' : 'penjelasan fasilitas', - 'rating' : 2, - 'tag' : 'KR RT'}) - response_json = json.loads(response.content.decode("utf-8")) fasilitas_id = response_json["id"] - response = client.put(reverse('update-fasilitas', kwargs={'nama_lokasi':'Mall',"id":fasilitas_id}), - data={'deskripsi' : 'penjelasan fasilitases', - 'rating' : 3, - 'tag' : 'KR'}, content_type="multipart/form-data") + urls_put = reverse('update-fasilitas', kwargs={'nama_lokasi':'Mall', "id":fasilitas_id}) + send_data = {'deskripsi' : 'penjelasan fasilitases', + 'rating' : 3, + 'tag' : 'KR'} + response = client.put(urls_put, data=send_data, content_type="multipart/form-data") response_json = json.loads(response.content.decode("utf-8")) self.assertEqual(response.status_code, HTTPStatus.ACCEPTED) - - \ No newline at end of file diff --git a/informasi_fasilitas/urls.py b/informasi_fasilitas/urls.py index caf571e..1dc6488 100644 --- a/informasi_fasilitas/urls.py +++ b/informasi_fasilitas/urls.py @@ -1,15 +1,14 @@ -from django.urls import path, include -from rest_framework import routers +from django.urls import path from . import views urlpatterns = [ - path('lokasi/list/', views.lokasi_list,name='lokasi-list'), - path('lokasi/detail//', views.lokasi_details,name='lokasi-details'), - path('lokasi/update-detail//', views.update_lokasi_details,name='update-lokasi'), - path('lokasi/add/', views.add_lokasi,name='add-lokasi'), + path('lokasi/list/', views.lokasi_list, name='lokasi-list'), + path('lokasi/detail//', views.lokasi_details, name='lokasi-details'), + path('lokasi/update-detail//', views.update_lokasi_details, name='update-lokasi'), + path('lokasi/add/', views.add_lokasi, name='add-lokasi'), path('lokasi/add-fasilitas//', views.add_fasilitas, name='add-fasilitas'), path('lokasi/list-fasilitas//', views.list_fasilitas, name='list-fasilitas'), path('lokasi/detail-fasilitas///', views.detail_fasilitas, name='detail-fasilitas'), path('lokasi/update-fasilitas///', views.update_fasilitas, name='update-fasilitas'), path('lokasi/like-fasilitas////', views.update_like_fasilitas, name='update-like-fasilitas'), -] \ No newline at end of file +] diff --git a/informasi_fasilitas/views.py b/informasi_fasilitas/views.py index edf9f58..42c97e2 100644 --- a/informasi_fasilitas/views.py +++ b/informasi_fasilitas/views.py @@ -1,12 +1,12 @@ -from django.shortcuts import render -from django.http import HttpResponse, JsonResponse +from http import HTTPStatus +from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt from django.contrib.auth.models import User from rest_framework import viewsets from rest_framework.decorators import api_view, permission_classes, authentication_classes from rest_framework.authentication import TokenAuthentication -from rest_framework.permissions import IsAuthenticated +from rest_framework.permissions import IsAuthenticated from .serializers import LokasiSerializer from .models import Lokasi, Fasilitas, Komentar, Likes, Dislikes @@ -25,25 +25,25 @@ def lokasi_list(request): if request.method == 'GET': lokasi_list = Lokasi.objects.all() serializer = LokasiSerializer(lokasi_list, many=True) - return JsonResponse(serializer.data, safe=False, status = 200) + return JsonResponse(serializer.data, safe=False, status=HTTPStatus.OK) else: - return JsonResponse({'response' : request_error_message("get")}, status = 400) + return JsonResponse({'response' : request_error_message("get")}, status=HTTPStatus.NOT_FOUND) @api_view(['GET']) @authentication_classes([]) @permission_classes([]) -def lokasi_details(request,nama_lokasi): +def lokasi_details(request, nama_lokasi): try: if request.method == 'GET': - lokasi = Lokasi.objects.get(name = nama_lokasi) + lokasi = Lokasi.objects.get(name=nama_lokasi) serializer = LokasiSerializer(lokasi) - return JsonResponse(serializer.data, safe=False, status = 200) + return JsonResponse(serializer.data, safe=False, status=HTTPStatus.OK) else: - return JsonResponse({'response' : request_error_message("get")}, status = 400) - except KeyError as e: - return JsonResponse({'response': missing_key_message(str(e))}, status = 500) - except: - return JsonResponse({'response':'lokasi not found'}, status = 404) + return JsonResponse({'response' : request_error_message("get")}, status=HTTPStatus.METHOD_NOT_ALLOWED) + except KeyError as missing_key: + return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) + except Exception: + return JsonResponse({'response':'lokasi not found'}, status=HTTPStatus.NOT_FOUND) @api_view(['POST']) @authentication_classes([TokenAuthentication]) @@ -51,18 +51,17 @@ def lokasi_details(request,nama_lokasi): def add_lokasi(request): try: if request.method == 'POST': - data = request.POST serializer = LokasiSerializer(data=data) if serializer.is_valid(): serializer.save() - return JsonResponse(serializer.data, status=201) + return JsonResponse(serializer.data, status=HTTPStatus.CREATED) else: - return JsonResponse(serializer.errors, status=400) + return JsonResponse(serializer.errors, status=HTTPStatus.BAD_REQUEST) else: - return JsonResponse({'response' : request_error_message("post")}, status = 400) - except KeyError as e: - return JsonResponse({'response': missing_key_message(str(e))}, status = 500) + return JsonResponse({'response' : request_error_message("post")}, status=HTTPStatus.METHOD_NOT_ALLOWED) + except KeyError as missing_key: + return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) @api_view(['PUT']) @authentication_classes([TokenAuthentication]) @@ -70,15 +69,15 @@ def add_lokasi(request): def update_lokasi_details(request, nama_lokasi): try: if request.method == 'PUT': - lokasi = Lokasi.objects.get(name = nama_lokasi) + lokasi = Lokasi.objects.get(name=nama_lokasi) if 'no_telp' in request.data.keys(): lokasi.no_telp = request.data['no_telp'] lokasi.save() - return JsonResponse({'response' : "phone changed to {}".format(lokasi.no_telp)}, status = 202) + return JsonResponse({'response' : "phone changed to {}".format(lokasi.no_telp)}, status=HTTPStatus.ACCEPTED) else: - return JsonResponse({'response' : request_error_message("put")}, status = 400) - except KeyError as e: - return JsonResponse({'response': missing_key_message(str(e))}, status = 500) + return JsonResponse({'response' : request_error_message("put")}, status=HTTPStatus.METHOD_NOT_ALLOWED) + except KeyError as missing_key: + return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) @api_view(['GET']) @@ -87,7 +86,7 @@ def update_lokasi_details(request, nama_lokasi): def list_fasilitas(request, nama_lokasi): try: if request.method == 'GET': - lokasi = Lokasi.objects.get(name = nama_lokasi) + lokasi = Lokasi.objects.get(name=nama_lokasi) list_fasilitas = Fasilitas.objects.filter(lokasi=lokasi) return_json = {} for fasilitas in list_fasilitas: @@ -104,11 +103,11 @@ def list_fasilitas(request, nama_lokasi): fasilitas_details["tag"] = fasilitas.tag fasilitas_details["image"] = str(fasilitas.image) fasilitas_details["is_verified"] = fasilitas.is_verified - return JsonResponse(return_json, status = 200) - except KeyError as e: - return JsonResponse({'response': missing_key_message(str(e))}, status = 500) - except Exception as e: - return JsonResponse({'response': str(e)}, status = 404) + return JsonResponse(return_json, status=HTTPStatus.OK) + except KeyError as missing_key: + return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) + except Exception as error: + return JsonResponse({'response': str(error)}, status=HTTPStatus.NOT_FOUND) @api_view(['POST']) @authentication_classes([TokenAuthentication]) @@ -125,18 +124,18 @@ def add_fasilitas(request, nama_lokasi): if 'image' in request.POST.keys(): image = str(request.POST['image']) fasilitas = Fasilitas.objects.create(lokasi=lokasi, - user=user, - deskripsi=deskripsi, - rating=rating, - tag=tag, - image = image) - return JsonResponse({'response' : 'fasilitas added', 'id':fasilitas.id}, status = 201) + user=user, + deskripsi=deskripsi, + rating=rating, + tag=tag, + image=image) + return JsonResponse({'response' : 'fasilitas added', 'id':fasilitas.id}, status=HTTPStatus.CREATED) else: - return JsonResponse({'response' : request_error_message("post")}, status = 400) - except KeyError as e: - return JsonResponse({'response': missing_key_message(str(e))}, status = 500) - except Exception as e: - return JsonResponse({'response': str(e)}, status = 404) + return JsonResponse({'response' : request_error_message("post")}, status=HTTPStatus.METHOD_NOT_ALLOWED) + except KeyError as missing_key: + return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) + except Exception as error: + return JsonResponse({'response': str(error)}, status=HTTPStatus.NOT_FOUND) @api_view(['GET']) @authentication_classes([]) @@ -144,29 +143,29 @@ def add_fasilitas(request, nama_lokasi): def detail_fasilitas(request, nama_lokasi, id): try: if request.method == 'GET': - lokasi = Lokasi.objects.get(name = nama_lokasi) + lokasi = Lokasi.objects.get(name=nama_lokasi) fasilitas = Fasilitas.objects.get(lokasi=lokasi, id=id) user = fasilitas.user - fasilitas.like = Likes.objects.filter(fasilitas = fasilitas).count() - fasilitas.dislike = Dislikes.objects.filter(fasilitas = fasilitas).count() - return_json = {"nama_lokasi": lokasi.name, - "deskripsi":fasilitas.deskripsi, - "creator":user.last_name, - "creator_email": user.email, + fasilitas.like = Likes.objects.filter(fasilitas=fasilitas).count() + fasilitas.dislike = Dislikes.objects.filter(fasilitas=fasilitas).count() + return_json = {"nama_lokasi": lokasi.name, + "deskripsi":fasilitas.deskripsi, + "creator":user.last_name, + "creator_email": user.email, "date_time":fasilitas.date_time, - "like":fasilitas.like, - "dislike":fasilitas.dislike, - "rating":fasilitas.rating, - "tag":fasilitas.tag, - "image":str(fasilitas.image), + "like":fasilitas.like, + "dislike":fasilitas.dislike, + "rating":fasilitas.rating, + "tag":fasilitas.tag, + "image":str(fasilitas.image), "is_verified":fasilitas.is_verified} - return JsonResponse(return_json, status = 200) + return JsonResponse(return_json, status=HTTPStatus.OK) else: - return JsonResponse({'response' : request_error_message("get")}, status = 400) - except KeyError as e: - return JsonResponse({'response': missing_key_message(str(e))}, status = 500) - except Exception as e: - return JsonResponse({'response': str(e)}, status = 404) + return JsonResponse({'response' : request_error_message("get")}, status=HTTPStatus.METHOD_NOT_ALLOWED) + except KeyError as missing_key: + return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) + except Exception as error: + return JsonResponse({'response': str(error)}, status=HTTPStatus.NOT_FOUND) @api_view(['PUT']) @authentication_classes([TokenAuthentication]) @@ -174,7 +173,7 @@ def detail_fasilitas(request, nama_lokasi, id): def update_fasilitas(request, nama_lokasi, id): try: if request.method == "PUT": - lokasi = Lokasi.objects.get(name = nama_lokasi) + lokasi = Lokasi.objects.get(name=nama_lokasi) fasilitas = Fasilitas.objects.get(lokasi=lokasi, id=id) user_creator = fasilitas.user desc = fasilitas.deskripsi @@ -187,12 +186,12 @@ def update_fasilitas(request, nama_lokasi, id): fasilitas.deskripsi = desc fasilitas.tag = tag fasilitas.save() - return JsonResponse({'response' : '{} in fasilitas edited'.format(str(request.data.keys())), }, status = 202) - return JsonResponse({'response' : 'Authentication failed'}, status = 502) - except KeyError as e: - return JsonResponse({'response': missing_key_message(str(e))}, status = 500) - except Exception as e: - return JsonResponse({'response': str(e)}, status = 404) + return JsonResponse({'response' : '{} in fasilitas edited'.format(str(request.data.keys())),}, status=HTTPStatus.ACCEPTED) + return JsonResponse({'response' : 'Authentication failed'}, status=HTTPStatus.UNAUTHORIZED) + except KeyError as missing_key: + return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) + except Exception as error: + return JsonResponse({'response': str(error)}, status=HTTPStatus.NOT_FOUND) @api_view(['PUT']) @authentication_classes([TokenAuthentication]) @@ -200,38 +199,37 @@ def update_fasilitas(request, nama_lokasi, id): def update_like_fasilitas(request, nama_lokasi, id, operation): try: if request.method == "PUT": - lokasi = Lokasi.objects.get(name = nama_lokasi) + lokasi = Lokasi.objects.get(name=nama_lokasi) fasilitas = Fasilitas.objects.get(lokasi=lokasi, id=id) user = request.user try: - like = Likes.objects.get(fasilitas=fasilitas, user = user) + like = Likes.objects.get(fasilitas=fasilitas, user=user) except Likes.DoesNotExist: like = None try: - dislike = Dislikes.objects.get(fasilitas=fasilitas, user = user) + dislike = Dislikes.objects.get(fasilitas=fasilitas, user=user) except Dislikes.DoesNotExist: dislike = None - if operation == "like": if like != None: return JsonResponse({'response': "you've already liked this facility"}) else: - Likes.objects.create(fasilitas = fasilitas, user = user) + Likes.objects.create(fasilitas=fasilitas, user=user) if dislike != None: dislike.delete() elif operation == "dislike": if dislike != None: return JsonResponse({'response': "you've already disliked this facility"}) else: - Dislikes.objects.create(fasilitas = fasilitas, user = user) + Dislikes.objects.create(fasilitas=fasilitas, user=user) if like != None: like.delete() - - fasilitas.like = Likes.objects.filter(fasilitas = fasilitas).count() - fasilitas.dislike = Dislikes.objects.filter(fasilitas = fasilitas).count() - return JsonResponse({'response': "you've successfuly {}d this facility".format(operation)}, status = 201) - except KeyError as e: - return JsonResponse({'response': missing_key_message(str(e))}, status = 500) - except Exception as e: - return JsonResponse({'response': str(e)}, status = 404) \ No newline at end of file + fasilitas.like = Likes.objects.filter(fasilitas=fasilitas).count() + fasilitas.dislike = Dislikes.objects.filter(fasilitas=fasilitas).count() + return JsonResponse({'response': "you've successfuly {}d this facility".format(operation)}, status=HTTPStatus.CREATED) + except KeyError as missing_key: + return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) + except Exception as error: + return JsonResponse({'response': str(error)}, status=HTTPStatus.NOT_FOUND) + \ No newline at end of file -- GitLab From 376df03ab6e2551112113e1c36c2a7dd718af73c Mon Sep 17 00:00:00 2001 From: Bimo Iman Smartadi Date: Tue, 28 Apr 2020 17:08:24 +0700 Subject: [PATCH 02/14] [REFACTOR] Increasing linter score on new_rest_api by removing unnecessary whitespace and fixing continuation space --- new_rest_api/tests.py | 18 +++++++++--------- new_rest_api/urls.py | 12 ++++++------ new_rest_api/views.py | 31 +++++++++++++++---------------- 3 files changed, 30 insertions(+), 31 deletions(-) diff --git a/new_rest_api/tests.py b/new_rest_api/tests.py index 5c8807b..a836620 100644 --- a/new_rest_api/tests.py +++ b/new_rest_api/tests.py @@ -1,10 +1,11 @@ # Create your tests here. +import json from rest_framework.test import APIRequestFactory, APITestCase, URLPatternsTestCase from rest_framework import status from django.test import TestCase, SimpleTestCase, Client from django.urls import include, path, reverse from registrasi.models import BisaGoUser -import json + class UserTests(APITestCase): urlpatterns = [ @@ -13,7 +14,7 @@ class UserTests(APITestCase): def setUp(self): url = reverse('create-user') - data = {'name': 'Astraykai', + data = {'name': 'Astraykai', 'email':'astraykai@gmail.com', 'phone_number':'089892218567', 'password':'chingchenghanji',} @@ -24,7 +25,7 @@ class UserTests(APITestCase): Ensure we can create a new account object. """ url = reverse('create-user') - data = {'name': 'Astray', + data = {'name': 'Astray', 'email':'astrayyahoo@gmail.com', 'phone_number':'08989221856', 'password':'chingchenghanji',} @@ -33,17 +34,17 @@ class UserTests(APITestCase): self.assertEqual(BisaGoUser.objects.count(), 2) user = BisaGoUser.objects.get(phone_number='08989221856').user self.assertEqual(user.last_name, 'Astray') - + url = reverse('user-details', kwargs={'email':'astrayyahoo@gmail.com'}) response = self.client.get(url, format='json') - self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.status_code, status.HTTP_200_OK) json_test = json.loads(response.content) self.assertEqual(len(json_test), 4) #JSON Attribute def test_account_details(self): url = reverse('user-details', kwargs={'email':'astraykai@gmail.com'}) response = self.client.get(url, format='json') - self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.status_code, status.HTTP_200_OK) json_test = json.loads(response.content) self.assertEqual(len(json_test), 4) #JSON Attribute @@ -53,11 +54,10 @@ class UserTests(APITestCase): self.assertEqual(response.status_code, status.HTTP_200_OK) json_test = json.loads(response.content) self.assertEqual(len(json_test), 1) - + def test_account_login(self): pass - class InfoTests(APITestCase, URLPatternsTestCase): - pass \ No newline at end of file + pass diff --git a/new_rest_api/urls.py b/new_rest_api/urls.py index 091ab95..aaab556 100644 --- a/new_rest_api/urls.py +++ b/new_rest_api/urls.py @@ -1,5 +1,5 @@ from django.contrib import admin -from django.urls import path,include +from django.urls import path from rest_framework import routers from rest_framework.authtoken import views import new_rest_api.views @@ -7,8 +7,8 @@ from django.views.generic import TemplateView urlpatterns = [ - path('user-list/', new_rest_api.views.user_list,name='user-list'), - path('user-detail/', new_rest_api.views.user_details,name='user-details'), - path('user-detail/?email=', new_rest_api.views.user_details,name='user-details-get'), - path('register/', new_rest_api.views.register_user,name='create-user'), -] \ No newline at end of file + path('user-list/', new_rest_api.views.user_list, name='user-list'), + path('user-detail/', new_rest_api.views.user_details, name='user-details'), + path('user-detail/?email=', new_rest_api.views.user_details, name='user-details-get'), + path('register/', new_rest_api.views.register_user, name='create-user'), +] diff --git a/new_rest_api/views.py b/new_rest_api/views.py index ff35abc..a054955 100644 --- a/new_rest_api/views.py +++ b/new_rest_api/views.py @@ -1,8 +1,7 @@ -from django.shortcuts import render -from django.contrib.auth.models import User, Group -from django.http import HttpResponse, JsonResponse +from http import HTTPStatus +from django.contrib.auth.models import User +from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt -from django.contrib.auth.hashers import make_password, check_password from allauth.socialaccount.providers.oauth2.client import OAuth2Client @@ -33,25 +32,25 @@ def user_list(request): json_return = [] for user in user_list: json_return.append({"username":user.user.email, - "name": user.user.last_name, - "email": user.user.email, - "phone_number": user.phone_number}) - return JsonResponse(json_return, safe=False) + "name": user.user.last_name, + "email": user.user.email, + "phone_number": user.phone_number}) + return JsonResponse(json_return, safe=False, status=HTTPStatus.OK) else: - return JsonResponse({'response' : request_error_message("get")}, status = 400) + return JsonResponse({'response' : request_error_message("get")}, status=HTTPStatus.METHOD_NOT_ALLOWED) @api_view(['GET']) @authentication_classes([]) @permission_classes([]) -def user_details(request,email): +def user_details(request, email): if request.method == 'GET': - user = User.objects.get(username = email) + user = User.objects.get(username=email) bisa_go_user = BisaGoUser.objects.get(user=user) json_return = {"username":user.email, "name": user.last_name, "email": user.email, "phone_number": bisa_go_user.phone_number} - return JsonResponse(json_return, safe=False) + return JsonResponse(json_return, safe=False, status=HTTPStatus.OK) @api_view(['POST']) @@ -65,8 +64,8 @@ def register_user(request): email = request.POST['email'] password = request.POST['password'] user = User.objects.create_user(username=email, email=email, password=password, last_name=name) - BisaGoUser.objects.create(user= user, phone_number=phone_number) - return JsonResponse({'response' : 'User created', 'email':email, 'name':name}, status = 201) - except KeyError as e: - return JsonResponse({'response':missing_key_message(str(e))}, status = 500) + BisaGoUser.objects.create(user=user, phone_number=phone_number) + return JsonResponse({'response' : 'User created', 'email':email, 'name':name}, status=HTTPStatus.CREATED) + except KeyError as missing_key: + return JsonResponse({'response':missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) \ No newline at end of file -- GitLab From d791aa306e4a086f0a9e3ce44373d4399bfaa42a Mon Sep 17 00:00:00 2001 From: Bimo Iman Smartadi Date: Tue, 28 Apr 2020 17:09:03 +0700 Subject: [PATCH 03/14] [REFACTOR] Increasing linter score on registrasi by removing unnecessary whitespace and continuation spacing --- registrasi/admin.py | 2 +- registrasi/managers.py | 3 ++- registrasi/models.py | 6 ++---- registrasi/tests.py | 14 +++++++------- 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/registrasi/admin.py b/registrasi/admin.py index 6f4b91c..50d71ff 100644 --- a/registrasi/admin.py +++ b/registrasi/admin.py @@ -1,4 +1,4 @@ from django.contrib import admin # Register your models here. from .models import BisaGoUser -admin.site.register(BisaGoUser) \ No newline at end of file +admin.site.register(BisaGoUser) diff --git a/registrasi/managers.py b/registrasi/managers.py index c7a590f..10657ba 100644 --- a/registrasi/managers.py +++ b/registrasi/managers.py @@ -25,4 +25,5 @@ class UserManager(BaseUserManager): if extra_fields.get('is_superuser') is not True: raise ValueError('Superuser must have is_superuser=True.') - return self._create_user(email, password, **extra_fields) \ No newline at end of file + return self._create_user(email, password, **extra_fields) + \ No newline at end of file diff --git a/registrasi/models.py b/registrasi/models.py index 1b13a46..af0e5f0 100644 --- a/registrasi/models.py +++ b/registrasi/models.py @@ -5,9 +5,7 @@ from django.contrib.auth.models import User class BisaGoUser(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="phone_number") - phone_number = models.CharField('Nomor Telepon',max_length=15, unique=True) - + phone_number = models.CharField('Nomor Telepon', max_length=15, unique=True) + def __str__(self): return self.user.username - - diff --git a/registrasi/tests.py b/registrasi/tests.py index 2a300a5..0bef2cb 100644 --- a/registrasi/tests.py +++ b/registrasi/tests.py @@ -1,9 +1,9 @@ from django.test import TestCase -from .models import BisaGoUser from django.contrib.auth.models import User -from django.test import TestCase from django.db.utils import IntegrityError -import tempfile +from .models import BisaGoUser + + class RegistrationTest(TestCase): @@ -11,10 +11,10 @@ class RegistrationTest(TestCase): user = User.objects.create(username="hoho", email="user@gmail.com", password="hohoho") BisaGoUser.objects.create(user=user, phone_number='081278787878') count = BisaGoUser.objects.all().count() - self.assertNotEqual(count,0) + self.assertNotEqual(count, 0) def test_user_model_not_created(self): - with self.assertRaises(IntegrityError) as cm: + with self.assertRaises(IntegrityError) as error: obj = BisaGoUser(user=None) - obj.save(); - self.assertTrue(str(cm.exception).startswith('NOT NULL constraint failed')) \ No newline at end of file + obj.save() + self.assertTrue(str(error.exception).startswith('NOT NULL constraint failed')) -- GitLab From 9401ccccc9534c42c0dab8739afa2fe7053295b9 Mon Sep 17 00:00:00 2001 From: Bimo Iman Smartadi Date: Sun, 3 May 2020 15:53:42 +0700 Subject: [PATCH 04/14] [REFACTOR, RED] Refactor test to smaller test file --- informasi_fasilitas/base_test.py | 120 ++++++++++++ informasi_fasilitas/models.py | 6 +- informasi_fasilitas/test_views_fasilitas.py | 143 +++++++++++++++ .../test_views_like_dislike.py | 0 informasi_fasilitas/test_views_lokasi.py | 173 ++++++++++++++++++ informasi_fasilitas/tests_models.py | 75 ++++++++ .../{tests.py => tests_views.py} | 112 +----------- 7 files changed, 521 insertions(+), 108 deletions(-) create mode 100644 informasi_fasilitas/base_test.py create mode 100644 informasi_fasilitas/test_views_fasilitas.py create mode 100644 informasi_fasilitas/test_views_like_dislike.py create mode 100644 informasi_fasilitas/test_views_lokasi.py create mode 100644 informasi_fasilitas/tests_models.py rename informasi_fasilitas/{tests.py => tests_views.py} (80%) diff --git a/informasi_fasilitas/base_test.py b/informasi_fasilitas/base_test.py new file mode 100644 index 0000000..109efdd --- /dev/null +++ b/informasi_fasilitas/base_test.py @@ -0,0 +1,120 @@ +import json +import tempfile +from http import HTTPStatus +from django.test import TestCase, Client +from django.db.utils import IntegrityError +from django.contrib.auth.models import User +from django.urls import reverse, path, include + +from registrasi.models import BisaGoUser +from .models import Lokasi, Fasilitas, Komentar, KURSI_RODA, RUNNING_TEXT, Likes, Dislikes +from .serializers import LokasiSerializer + +not_null_constraint_failed_message = 'NOT NULL constraint failed' + + +fasilitas_test = Fasilitas() + + +class InformasiFasilitasTest(TestCase): + default_username_email = "user_test@gmail.com" + default_last_name = "name" + default_password = "hahagotim" + default_lokasi_name = "Mall" + default_latitude = 0.0 + default_longitude = 0.0 + default_alamat = "Jl. Raya Bogor no.1 Jakarta" + default_no_telp = "08123456789" + default_image = tempfile.NamedTemporaryFile(suffix=".jpg").name + default_like = 0 + default_dislike = 0 + default_tag = {KURSI_RODA, RUNNING_TEXT} + default_rating = 3 + default_deskripsi = "penjelasan" + + def create_user_test(self, username=default_username_email, + last_name=default_last_name, + password=default_password): + user_test = User(username=username, + last_name=last_name, + email=username, + password=password) + user_test.save() + return user_test + + def create_lokasi_test(self, name=default_lokasi_name, + latitude=default_latitude, + longitude=default_longitude, + alamat=default_alamat, + no_telp=default_no_telp, + image=default_image): + + lokasi_test = Lokasi(name=name, + latitude=latitude, + longitude=longitude, + alamat=alamat, + no_telp=no_telp, + image=image) + lokasi_test.save() + return lokasi_test + + def create_fasilitas_test(self, deskripsi=default_deskripsi, + like=default_like, + dislike=default_dislike, + rating=default_rating, + tag=default_tag, + image=default_image, + lokasi=None, + user=None): + if (user == None): + user = self.create_user_test() + if (lokasi == None): + lokasi = self.create_lokasi_test() + fasilitas_test = Fasilitas(lokasi=lokasi, + user=user, + deskripsi=deskripsi, + like=like, + dislike=dislike, + rating=rating, + tag=tag, + image=image) + fasilitas_test.save() + return fasilitas_test + + def create_komentar_test(self, deskripsi=default_deskripsi, + user=None, + fasilitas=None): + if (user == None): + user = self.create_user_test() + if (fasilitas == None): + lokasi = self.create_lokasi_test() + fasilitas = self.create_fasilitas_test(user=user, lokasi=lokasi) + komentar_test = Komentar(deskripsi=deskripsi, + user=user, + fasilitas=fasilitas) + komentar_test.save() + return komentar_test + + def create_likes_test(self, user=None, + fasilitas=None): + if (user == None): + user = self.create_user_test() + if (fasilitas == None): + lokasi = self.create_lokasi_test(user) + fasilitas = self.create_fasilitas_test(user=user, lokasi=lokasi) + like_test = Likes(user=user, + fasilitas=fasilitas) + like_test.save() + return like_test + + def create_dislikes_test(self, user=None, + fasilitas=None): + if (user == None): + user = self.create_user_test() + if (fasilitas == None): + lokasi = self.create_lokasi_test(user) + fasilitas = self.create_fasilitas_test(user=user, lokasi=lokasi) + dislike_test = Dislikes(user=user, + fasilitas=fasilitas) + dislike_test.save() + return dislike_test diff --git a/informasi_fasilitas/models.py b/informasi_fasilitas/models.py index 8f7058b..f5af712 100644 --- a/informasi_fasilitas/models.py +++ b/informasi_fasilitas/models.py @@ -41,13 +41,14 @@ class Lokasi(models.Model): alamat = models.CharField(max_length=100) no_telp = models.CharField(max_length=16) image = models.ImageField(upload_to="static/img", null=True) - + objects = models.Manager() POINT_FIELD = ""+str(latitude)+","+str(longitude) def __str__(self): return self.name class Fasilitas(models.Model): + objects = models.Manager() lokasi = models.ForeignKey(Lokasi, on_delete=models.CASCADE) user = models.ForeignKey(User, on_delete=models.CASCADE) date_time = models.DateTimeField(auto_now_add=True) @@ -60,17 +61,20 @@ class Fasilitas(models.Model): is_verified = models.BooleanField(default=False) 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() class Likes(models.Model): + objects = models.Manager() user = models.ForeignKey(User, on_delete=models.CASCADE) fasilitas = models.ForeignKey(Fasilitas, on_delete=models.CASCADE) created = models.DateTimeField(auto_now_add=True) class Dislikes(models.Model): + objects = models.Manager() user = models.ForeignKey(User, on_delete=models.CASCADE) fasilitas = models.ForeignKey(Fasilitas, on_delete=models.CASCADE) created = models.DateTimeField(auto_now_add=True) diff --git a/informasi_fasilitas/test_views_fasilitas.py b/informasi_fasilitas/test_views_fasilitas.py new file mode 100644 index 0000000..a6776f8 --- /dev/null +++ b/informasi_fasilitas/test_views_fasilitas.py @@ -0,0 +1,143 @@ +import json +import tempfile +from http import HTTPStatus +from django.test import TestCase, Client +from django.db.utils import IntegrityError +from django.contrib.auth.models import User +from django.urls import reverse, path, include + +from registrasi.models import BisaGoUser +from .models import Lokasi, Fasilitas, Komentar, KURSI_RODA, RUNNING_TEXT, Likes, Dislikes +from .serializers import LokasiSerializer + +class FasilitasRelatedViewTest(InformasiFasilitasViewTest): + + def test_can_get_list_fasilitas(self): + user = user_test + user.save() + lokasi = lokasi_test + lokasi.save() + fasilitas = fasilitas_test + fasilitas.save() + response = Client().get( + reverse('list-fasilitas', kwargs={'nama_lokasi': 'Mall'})) + self.assertEqual(response.status_code, HTTPStatus.OK) + + def test_cannot_post_list_fasilitas(self): + lokasi = lokasi_test + lokasi.save() + response = Client().post( + reverse('list-fasilitas', kwargs={'nama_lokasi': 'Mall'})) + self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) + + def test_get_list_fasilitas_not_found(self): + response = Client().get( + reverse('list-fasilitas', kwargs={'nama_lokasi': 'Mall'})) + self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) + + def test_can_get_detail_fasilitas(self): + user = user_test + user.save() + lokasi = lokasi_test + lokasi.save() + + fasilitas = fasilitas_test + fasilitas.save() + + fasilitas_id = fasilitas.id + response = Client().get(reverse('detail-fasilitas', kwargs={'nama_lokasi': 'Mall', + 'id': fasilitas_id})) + self.assertEqual(response.status_code, HTTPStatus.OK) + + def test_cannot_post_detail_fasilitas(self): + user = user_test + user.save() + lokasi = lokasi_test + lokasi.save() + fasilitas = fasilitas_test + fasilitas.save() + id = fasilitas.id + response = Client().post(reverse('detail-fasilitas', kwargs={'nama_lokasi': 'Mall', + 'id': id})) + self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) + + def test_get_detail_fasilitas_not_found(self): + response = Client().get(reverse('detail-fasilitas', + kwargs={'nama_lokasi': 'Mall', 'id': 0})) + self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) + + def test_can_post_add_fasilitas(self): + Client().post('/api/register/', user_post) + token_response = Client().post('/api-token-auth/', {'username': email_test, + 'password': password_test}) + content = json.loads(token_response.content.decode('utf-8')) + token = content['token'] + client = Client(HTTP_AUTHORIZATION='token '+token) + + lokasi = lokasi_test + lokasi.save() + + urls = reverse('add-fasilitas', kwargs={'nama_lokasi': 'Mall'}) + response = client.post(urls, {'deskripsi': 'penjelasan fasilitas', + 'rating': 2, + 'tag': 'KR RT'}) + self.assertEqual(response.status_code, HTTPStatus.CREATED) + + def test_cannot_get_add_fasilitas(self): + Client().post('/api/register/', user_post) + token_response = Client().post('/api-token-auth/', {'username': email_test, + 'password': password_test}) + content = json.loads(token_response.content.decode('utf-8')) + token = content['token'] + client = Client(HTTP_AUTHORIZATION='token '+token) + + lokasi = lokasi_test + lokasi.save() + + response = client.get( + reverse('add-fasilitas', kwargs={'nama_lokasi': 'Mall'})) + self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) + + def test_post_add_fasilitas_not_found(self): + ''' + Check this method later + ''' + Client().post('/api/register/', user_post) + token_response = Client().post('/api-token-auth/', {'username': email_test, + 'password': password_test}) + content = json.loads(token_response.content.decode('utf-8')) + token = content['token'] + client = Client(HTTP_AUTHORIZATION='token '+token) + + urls = reverse('add-fasilitas', kwargs={'nama_lokasi': 'Mall'}) + response = client.post(urls, {'deskripsi': 'penjelasan fasilitas', + 'rating': 2}) + self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) + + def test_put_update_detail_fasilitas_success(self): + Client().post('/api/register/', user_post) + token_response = Client().post('/api-token-auth/', {'username': email_test, + 'password': password_test}) + content = json.loads(token_response.content.decode('utf-8')) + token = content['token'] + client = Client(HTTP_AUTHORIZATION='token '+token) + + lokasi = lokasi_test + lokasi.save() + urls_post = reverse('add-fasilitas', kwargs={'nama_lokasi': 'Mall'}) + data_post = {'deskripsi': 'penjelasan fasilitas', + 'rating': 2, + 'tag': 'KR RT'} + response = client.post(urls_post, data=data_post) + + response_json = json.loads(response.content.decode("utf-8")) + fasilitas_id = response_json["id"] + urls_put = reverse('update-fasilitas', + kwargs={'nama_lokasi': 'Mall', "id": fasilitas_id}) + send_data = {'deskripsi': 'penjelasan fasilitases', + 'rating': 3, + 'tag': 'KR'} + response = client.put(urls_put, data=send_data, + content_type="multipart/form-data") + response_json = json.loads(response.content.decode("utf-8")) + self.assertEqual(response.status_code, HTTPStatus.ACCEPTED) diff --git a/informasi_fasilitas/test_views_like_dislike.py b/informasi_fasilitas/test_views_like_dislike.py new file mode 100644 index 0000000..e69de29 diff --git a/informasi_fasilitas/test_views_lokasi.py b/informasi_fasilitas/test_views_lokasi.py new file mode 100644 index 0000000..3c1f997 --- /dev/null +++ b/informasi_fasilitas/test_views_lokasi.py @@ -0,0 +1,173 @@ +import json +import tempfile +from http import HTTPStatus +from django.test import TestCase, Client +from django.db.utils import IntegrityError +from django.contrib.auth.models import User +from django.urls import reverse, path, include + +from .base_test import InformasiFasilitasTest +from .models import Lokasi, Fasilitas, Komentar, Likes, Dislikes +from .serializers import LokasiSerializer + +user_post = {'name': 'name', + 'email': "user_post@gmail.com", + 'phone_number': 000000000, + 'password': "hahagotim"} + + +class InformasiFasilitasViewTest(InformasiFasilitasTest): + urlpatterns = [ + path('informasi-fasilitas/', include('informasi_fasilitas.urls')), + ] + +class LokasiRelatedViewTest(InformasiFasilitasViewTest): + + lokasi_test_1 = {'name': 'Ma Homie', + 'latitude': 0.1, + 'longitude': 0.1, + 'alamat': 'Jl. Raya Bogor no.2, Jakarta', + 'no_telp': '081212123132', + 'image': "test_1.jpg"} + lokasi_test_2 = {'name': 'Ma Homies', + 'latitude': 0.2, + 'longitude': 0.1, + 'alamat': 'Jl. Raya Bogor no.3, Jakarta', + 'no_telp': '081212123134'} + + def setUp(self): + email = 'usersetup@gmail.com' + password = 'hahagotim' + Client().post('/api/register/', + {'name': 'name', + 'email': email, + 'phone_number': 1000000, + 'password': password}) + token_response = Client().post('/api-token-auth/', + {'username': email, + 'password': password}) + content = json.loads(token_response.content.decode('utf-8')) + token = content['token'] + client = Client(HTTP_AUTHORIZATION='token '+token) + + client.post(reverse('add-lokasi'), + self.lokasi_test_1) + + client.post(reverse('add-lokasi'), + self.lokasi_test_2) + + def test_LokasiSerializer_valid(self): + serializer = LokasiSerializer(data=self.lokasi_test_1) + self.assertTrue(serializer.is_valid) + + def test_can_get_lokasi_list_url(self): + response = Client().get(reverse('lokasi-list')) + self.assertEqual(response.status_code, HTTPStatus.OK) + + def test_get_lokasi_list_json(self): + self.create_lokasi_test() + response = Client().get(reverse('lokasi-list')) + content = json.loads(response.content.decode('utf-8')) + expected_first_entry = self.lokasi_test_1 + expected_first_entry["id"] = 1 + expected_second_entry = self.lokasi_test_2 + expected_second_entry["id"] = 2 + expected_second_entry["image"] = None + expected_json = [expected_first_entry, + expected_second_entry + ] + self.assertEqual(content, expected_json) + + def test_cannot_post_lokasi_list_url(self): + response = Client().post(reverse('lokasi-list')) + self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) + + def test_can_get_lokasi_details(self): + response = Client().get( + reverse('lokasi-details', kwargs={'nama_lokasi': self.lokasi_test_2["name"]})) + self.assertEqual(response.status_code, HTTPStatus.OK) + + def test_can_get_lokasi_details_json(self): + response = Client().get( + reverse('lokasi-details', kwargs={'nama_lokasi': self.lokasi_test_2["name"]})) + content = json.loads(response.content.decode('utf-8')) + #print("content", content) + expected_json = self.lokasi_test_2 + expected_json["image"] = None + expected_json["id"] = 1 + #print("contents", content) + #print("expected_json", expected_json) + self.assertEqual(content, expected_json) + + def test_cannot_post_lokasi_details(self): + response = Client().post( + reverse('lokasi-details', kwargs={'nama_lokasi': self.lokasi_test_1["name"]})) + self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) + + def test_get_lokasi_details_not_found(self): + response = Client().get( + reverse('lokasi-details', kwargs={'nama_lokasi': 'Mall'})) + self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) + + + def test_can_post_add_lokasi(self): + Client().post('/api/register/', user_post) + token_response = Client().post('/api-token-auth/', {'username': email_test, + 'password': password_test}) + content = json.loads(token_response.content.decode('utf-8')) + token = content['token'] + client = Client(HTTP_AUTHORIZATION='token '+token) + + response = client.post(reverse('add-lokasi'), lokasi_data_post) + self.assertEqual(response.status_code, HTTPStatus.CREATED) + + def test_can_post_add_json(self): + Client().post('/api/register/', user_post) + token_response = Client().post('/api-token-auth/', {'username': email_test, + 'password': password_test}) + content = json.loads(token_response.content.decode('utf-8')) + token = content['token'] + client = Client(HTTP_AUTHORIZATION='token '+token) + + response = client.post(reverse('add-lokasi'), lokasi_data_post) + response_json = json.loads(response.content.decode("utf-8")) + + expected_json = {"id": 3, + 'name': 'Mall', + 'latitude': 0.0, + 'longitude': 0.0, + 'alamat': 'Jl. Raya Bogor no.1, Jakarta', + 'no_telp': '081212123131', + "image": None + } + + self.assertEqual(response_json, expected_json) + + def test_put_update_detail_lokasi_success(self): + Client().post('/api/register/', user_post) + token_response = Client().post('/api-token-auth/', {'username': email_test, + 'password': password_test}) + content = json.loads(token_response.content.decode('utf-8')) + token = content['token'] + client = Client(HTTP_AUTHORIZATION='token '+token) + + lokasi = lokasi_test + lokasi.save() + + urls = reverse('update-lokasi', kwargs={'nama_lokasi': 'Mall'}) + response = client.put(urls, data={'no_telp': '0000000121', }, + content_type="multipart/form-data") + self.assertEqual(response.status_code, HTTPStatus.ACCEPTED) + + def test_cannot_get_add_lokasi(self): + Client().post('/api/register/', user_post) + token_response = Client().post('/api-token-auth/', {'username': email_test, + 'password': password_test}) + content = json.loads(token_response.content.decode('utf-8')) + token = content['token'] + client = Client(HTTP_AUTHORIZATION='token '+token) + + response = client.get(reverse('add-lokasi')) + self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) + + diff --git a/informasi_fasilitas/tests_models.py b/informasi_fasilitas/tests_models.py new file mode 100644 index 0000000..cbae9bc --- /dev/null +++ b/informasi_fasilitas/tests_models.py @@ -0,0 +1,75 @@ +import json +import tempfile +from http import HTTPStatus +from django.test import TestCase, Client +from django.db.utils import IntegrityError +from django.contrib.auth.models import User +from django.urls import reverse, path, include + +from .base_test import InformasiFasilitasTest +from .models import Lokasi, Fasilitas, Komentar, Likes, Dislikes +from .serializers import LokasiSerializer + +NOT_NULL_CONSTRAINT_FAILED_MESSAGE = 'NOT NULL constraint failed' + +class InformasiFasilitasModelTest(InformasiFasilitasTest): + + def test_models_lokasi_not_created(self): + with self.assertRaises(IntegrityError) as err_message: + obj = Lokasi(name=None) + obj.save() + self.assertTrue(str(err_message.exception).startswith( + NOT_NULL_CONSTRAINT_FAILED_MESSAGE)) + + def test_models_create_new_lokasi(self): + self.create_lokasi_test() + count = Lokasi.objects.all().count() + self.assertNotEqual(count, 0) + + def test_models_fasilitas_not_created(self): + with self.assertRaises(IntegrityError) as err_message: + obj = Fasilitas(lokasi=None) + obj.save() + self.assertTrue(str(err_message.exception).startswith( + NOT_NULL_CONSTRAINT_FAILED_MESSAGE)) + + def test_models_create_new_fasilitas(self): + self.create_fasilitas_test() + count = Fasilitas.objects.all().count() + self.assertNotEqual(count, 0) + + def test_models_komentar_not_created(self): + with self.assertRaises(IntegrityError) as err_message: + obj = Komentar(fasilitas=None) + obj.save() + self.assertTrue(str(err_message.exception).startswith( + NOT_NULL_CONSTRAINT_FAILED_MESSAGE)) + + def test_models_create_new_komentar(self): + self.create_komentar_test() + count = Komentar.objects.all().count() + self.assertNotEqual(count, 0) + + def test_models_dislikes_not_created(self): + with self.assertRaises(IntegrityError) as err_message: + obj = Dislikes(fasilitas=None) + obj.save() + self.assertTrue(str(err_message.exception).startswith( + NOT_NULL_CONSTRAINT_FAILED_MESSAGE)) + + def test_models_create_new_dislikes(self): + self.create_dislikes_test() + count = Dislikes.objects.all().count() + self.assertNotEqual(count, 0) + + def test_models_likes_not_created(self): + with self.assertRaises(IntegrityError) as err_message: + obj = Likes(fasilitas=None) + obj.save() + self.assertTrue(str(err_message.exception).startswith( + NOT_NULL_CONSTRAINT_FAILED_MESSAGE)) + + def test_models_create_new_likes(self): + self.create_likes_test() + count = Likes.objects.all().count() + self.assertNotEqual(count, 0) diff --git a/informasi_fasilitas/tests.py b/informasi_fasilitas/tests_views.py similarity index 80% rename from informasi_fasilitas/tests.py rename to informasi_fasilitas/tests_views.py index c4f2e6a..e97d165 100644 --- a/informasi_fasilitas/tests.py +++ b/informasi_fasilitas/tests_views.py @@ -47,110 +47,6 @@ user_post = {'name':'name', 'phone_number':000000000, 'password':password_test} -class InformasiFasilitasModelTest(TestCase): - - def test_models_lokasi_not_created(self): - with self.assertRaises(IntegrityError) as cm: - obj = Lokasi(name=None) - obj.save() - self.assertTrue(str(cm.exception).startswith( - not_null_constraint_failed_message)) - - def test_models_create_new_lokasi(self): - image = tempfile.NamedTemporaryFile(suffix=".jpg").name - Lokasi.objects.create( - name='Mall', - latitude=0.0, - longitude=0.0, - alamat='Jl. Raya Bogor no.1, Jakarta', - no_telp='081212123131', - image=image - ) - count = Lokasi.objects.all().count() - self.assertNotEqual(count, 0) - - def test_models_fasilitas_not_created(self): - with self.assertRaises(IntegrityError) as cm: - obj = Fasilitas(lokasi=None) - obj.save() - self.assertTrue(str(cm.exception).startswith(not_null_constraint_failed_message)) - - def test_models_create_new_fasilitas(self): - image = tempfile.NamedTemporaryFile(suffix=".jpg").name - user = user_test - user.save() - lokasi = lokasi_test - lokasi.save() - Fasilitas.objects.create( - lokasi=lokasi, - user=user, - deskripsi="penjelasan panjang", - like=0, - dislike=0, - rating=5, - tag={KURSI_RODA, RUNNING_TEXT}, - image=image - ) - count = Fasilitas.objects.all().count() - self.assertNotEqual(count, 0) - - def test_models_komentar_not_created(self): - with self.assertRaises(IntegrityError) as cm: - obj = Komentar(fasilitas=None) - obj.save() - self.assertTrue(str(cm.exception).startswith( - not_null_constraint_failed_message)) - - def test_models_create_new_komentar(self): - user = user_test - user.save() - lokasi = lokasi_test - lokasi.save() - fasilitas = fasilitas_test - fasilitas.save() - Komentar.objects.create( - user=user, - fasilitas=fasilitas, - deskripsi="penjelasan panjang" - ) - count = Komentar.objects.all().count() - self.assertNotEqual(count, 0) - - def test_models_dislikes_not_created(self): - with self.assertRaises(IntegrityError) as cm: - obj = Dislikes(fasilitas=None) - obj.save() - self.assertTrue(str(cm.exception).startswith( - not_null_constraint_failed_message)) - - def test_models_create_new_dislikes(self): - user = user_test - user.save() - lokasi = lokasi_test - lokasi.save() - fasilitas = fasilitas_test - fasilitas.save() - Dislikes.objects.create(user=user, fasilitas=fasilitas) - count = Dislikes.objects.all().count() - self.assertNotEqual(count, 0) - - def test_models_likes_not_created(self): - with self.assertRaises(IntegrityError) as cm: - obj = Likes(fasilitas=None) - obj.save() - self.assertTrue(str(cm.exception).startswith(not_null_constraint_failed_message)) - - def test_models_create_new_likes(self): - user = user_test - user.save() - lokasi = lokasi_test - lokasi.save() - fasilitas = fasilitas_test - fasilitas.save() - Likes.objects.create(user=user, fasilitas=fasilitas) - count = Likes.objects.all().count() - self.assertNotEqual(count, 0) - class InformasiFasilitasViewTest(TestCase): urlpatterns = [ @@ -347,12 +243,14 @@ class FasilitasRelatedViewTest(InformasiFasilitasViewTest): user = user_test user.save() lokasi = lokasi_test - lokasi.save() + lokasi.save() + fasilitas = fasilitas_test fasilitas.save() - id = fasilitas.id + + fasilitas_id = fasilitas.id response = Client().get(reverse('detail-fasilitas', kwargs={'nama_lokasi':'Mall', - 'id':id})) + 'id':fasilitas_id})) self.assertEqual(response.status_code, HTTPStatus.OK) def test_cannot_post_detail_fasilitas(self): -- GitLab From 68b6d217cc3a6cbf1c4b7e63fa30847e33babddc Mon Sep 17 00:00:00 2001 From: Bimo Iman Smartadi Date: Sun, 3 May 2020 17:45:52 +0700 Subject: [PATCH 05/14] [REFACTOR, GREEN] Fixed several error on test file --- informasi_fasilitas/base_test.py | 4 - informasi_fasilitas/test_views_lokasi.py | 118 ++++++++++------------- 2 files changed, 51 insertions(+), 71 deletions(-) diff --git a/informasi_fasilitas/base_test.py b/informasi_fasilitas/base_test.py index 109efdd..40e9acc 100644 --- a/informasi_fasilitas/base_test.py +++ b/informasi_fasilitas/base_test.py @@ -12,10 +12,6 @@ from .serializers import LokasiSerializer not_null_constraint_failed_message = 'NOT NULL constraint failed' - -fasilitas_test = Fasilitas() - - class InformasiFasilitasTest(TestCase): default_username_email = "user_test@gmail.com" default_last_name = "name" diff --git a/informasi_fasilitas/test_views_lokasi.py b/informasi_fasilitas/test_views_lokasi.py index 3c1f997..4c5c771 100644 --- a/informasi_fasilitas/test_views_lokasi.py +++ b/informasi_fasilitas/test_views_lokasi.py @@ -1,39 +1,35 @@ import json import tempfile +import copy from http import HTTPStatus from django.test import TestCase, Client from django.db.utils import IntegrityError from django.contrib.auth.models import User from django.urls import reverse, path, include +from django.core.files import File from .base_test import InformasiFasilitasTest from .models import Lokasi, Fasilitas, Komentar, Likes, Dislikes from .serializers import LokasiSerializer -user_post = {'name': 'name', - 'email': "user_post@gmail.com", - 'phone_number': 000000000, - 'password': "hahagotim"} - class InformasiFasilitasViewTest(InformasiFasilitasTest): urlpatterns = [ path('informasi-fasilitas/', include('informasi_fasilitas.urls')), ] + default_image = tempfile.NamedTemporaryFile(suffix=".jpg") + + user_post = {'name': 'name', + 'email': "self.user_post@gmail.com", + 'phone_number': 000000000, + 'password': "hahagotim"} -class LokasiRelatedViewTest(InformasiFasilitasViewTest): - lokasi_test_1 = {'name': 'Ma Homie', 'latitude': 0.1, 'longitude': 0.1, 'alamat': 'Jl. Raya Bogor no.2, Jakarta', 'no_telp': '081212123132', - 'image': "test_1.jpg"} - lokasi_test_2 = {'name': 'Ma Homies', - 'latitude': 0.2, - 'longitude': 0.1, - 'alamat': 'Jl. Raya Bogor no.3, Jakarta', - 'no_telp': '081212123134'} + } def setUp(self): email = 'usersetup@gmail.com' @@ -53,29 +49,31 @@ class LokasiRelatedViewTest(InformasiFasilitasViewTest): client.post(reverse('add-lokasi'), self.lokasi_test_1) - client.post(reverse('add-lokasi'), - self.lokasi_test_2) + +class LokasiRelatedViewTest(InformasiFasilitasViewTest): def test_LokasiSerializer_valid(self): serializer = LokasiSerializer(data=self.lokasi_test_1) self.assertTrue(serializer.is_valid) + def test_amount_lokasi(self): + count = Lokasi.objects.all().count() + self.assertEqual(count, 1) + def test_can_get_lokasi_list_url(self): response = Client().get(reverse('lokasi-list')) self.assertEqual(response.status_code, HTTPStatus.OK) def test_get_lokasi_list_json(self): - self.create_lokasi_test() + ''' + Not detecting setup lokasi + ''' response = Client().get(reverse('lokasi-list')) content = json.loads(response.content.decode('utf-8')) - expected_first_entry = self.lokasi_test_1 + expected_first_entry = copy.deepcopy(self.lokasi_test_1) expected_first_entry["id"] = 1 - expected_second_entry = self.lokasi_test_2 - expected_second_entry["id"] = 2 - expected_second_entry["image"] = None - expected_json = [expected_first_entry, - expected_second_entry - ] + expected_first_entry["image"] = None + expected_json = [expected_first_entry] self.assertEqual(content, expected_json) def test_cannot_post_lokasi_list_url(self): @@ -84,19 +82,16 @@ class LokasiRelatedViewTest(InformasiFasilitasViewTest): def test_can_get_lokasi_details(self): response = Client().get( - reverse('lokasi-details', kwargs={'nama_lokasi': self.lokasi_test_2["name"]})) + reverse('lokasi-details', kwargs={'nama_lokasi': self.lokasi_test_1["name"]})) self.assertEqual(response.status_code, HTTPStatus.OK) def test_can_get_lokasi_details_json(self): response = Client().get( - reverse('lokasi-details', kwargs={'nama_lokasi': self.lokasi_test_2["name"]})) + reverse('lokasi-details', kwargs={'nama_lokasi': self.lokasi_test_1["name"]})) content = json.loads(response.content.decode('utf-8')) - #print("content", content) - expected_json = self.lokasi_test_2 + expected_json = copy.deepcopy(self.lokasi_test_1) expected_json["image"] = None expected_json["id"] = 1 - #print("contents", content) - #print("expected_json", expected_json) self.assertEqual(content, expected_json) def test_cannot_post_lokasi_details(self): @@ -109,65 +104,54 @@ class LokasiRelatedViewTest(InformasiFasilitasViewTest): reverse('lokasi-details', kwargs={'nama_lokasi': 'Mall'})) self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) + def test_cannot_get_add_lokasi(self): + Client().post('/api/register/', self.user_post) + token_response = Client().post('/api-token-auth/', {'username': self.user_post["email"], + 'password': self.user_post["password"]}) + content = json.loads(token_response.content.decode('utf-8')) + token = content['token'] + client = Client(HTTP_AUTHORIZATION='token '+token) + + response = client.get(reverse('add-lokasi')) + self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) def test_can_post_add_lokasi(self): - Client().post('/api/register/', user_post) - token_response = Client().post('/api-token-auth/', {'username': email_test, - 'password': password_test}) + Client().post('/api/register/', self.user_post) + token_response = Client().post('/api-token-auth/', {'username': self.user_post["email"], + 'password': self.user_post["password"]}) content = json.loads(token_response.content.decode('utf-8')) token = content['token'] client = Client(HTTP_AUTHORIZATION='token '+token) - response = client.post(reverse('add-lokasi'), lokasi_data_post) + response = client.post(reverse('add-lokasi'), self.lokasi_test_1) self.assertEqual(response.status_code, HTTPStatus.CREATED) - def test_can_post_add_json(self): - Client().post('/api/register/', user_post) - token_response = Client().post('/api-token-auth/', {'username': email_test, - 'password': password_test}) + def test_can_post_add_lokasi_json(self): + Client().post('/api/register/', self.user_post) + token_response = Client().post('/api-token-auth/', {'username': self.user_post["email"], + 'password': self.user_post["password"]}) content = json.loads(token_response.content.decode('utf-8')) token = content['token'] client = Client(HTTP_AUTHORIZATION='token '+token) - response = client.post(reverse('add-lokasi'), lokasi_data_post) + response = client.post(reverse('add-lokasi'), + self.lokasi_test_1) response_json = json.loads(response.content.decode("utf-8")) - expected_json = {"id": 3, - 'name': 'Mall', - 'latitude': 0.0, - 'longitude': 0.0, - 'alamat': 'Jl. Raya Bogor no.1, Jakarta', - 'no_telp': '081212123131', - "image": None - } - + expected_json = copy.deepcopy(self.lokasi_test_1) + expected_json["id"] = 2 + expected_json["image"] = None self.assertEqual(response_json, expected_json) def test_put_update_detail_lokasi_success(self): - Client().post('/api/register/', user_post) - token_response = Client().post('/api-token-auth/', {'username': email_test, - 'password': password_test}) + Client().post('/api/register/', self.user_post) + token_response = Client().post('/api-token-auth/', {'username': self.user_post["email"], + 'password': self.user_post["password"]}) content = json.loads(token_response.content.decode('utf-8')) token = content['token'] client = Client(HTTP_AUTHORIZATION='token '+token) - lokasi = lokasi_test - lokasi.save() - - urls = reverse('update-lokasi', kwargs={'nama_lokasi': 'Mall'}) + urls = reverse('update-lokasi', kwargs={'nama_lokasi': self.lokasi_test_1["name"]}) response = client.put(urls, data={'no_telp': '0000000121', }, content_type="multipart/form-data") self.assertEqual(response.status_code, HTTPStatus.ACCEPTED) - - def test_cannot_get_add_lokasi(self): - Client().post('/api/register/', user_post) - token_response = Client().post('/api-token-auth/', {'username': email_test, - 'password': password_test}) - content = json.loads(token_response.content.decode('utf-8')) - token = content['token'] - client = Client(HTTP_AUTHORIZATION='token '+token) - - response = client.get(reverse('add-lokasi')) - self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) - - -- GitLab From f8c9853551a720662199089c7fbf3bff4f6d640b Mon Sep 17 00:00:00 2001 From: Bimo Iman Smartadi Date: Sun, 3 May 2020 20:21:44 +0700 Subject: [PATCH 06/14] [REFACTOR, RED] Refactored test on fasilitas --- informasi_fasilitas/base_test.py | 46 +++ informasi_fasilitas/test_views_fasilitas.py | 121 ++++--- informasi_fasilitas/test_views_lokasi.py | 40 +-- informasi_fasilitas/tests_views.py | 344 -------------------- 4 files changed, 102 insertions(+), 449 deletions(-) delete mode 100644 informasi_fasilitas/tests_views.py diff --git a/informasi_fasilitas/base_test.py b/informasi_fasilitas/base_test.py index 40e9acc..d84c48f 100644 --- a/informasi_fasilitas/base_test.py +++ b/informasi_fasilitas/base_test.py @@ -12,6 +12,7 @@ from .serializers import LokasiSerializer not_null_constraint_failed_message = 'NOT NULL constraint failed' + class InformasiFasilitasTest(TestCase): default_username_email = "user_test@gmail.com" default_last_name = "name" @@ -28,6 +29,18 @@ class InformasiFasilitasTest(TestCase): default_rating = 3 default_deskripsi = "penjelasan" + user_post = {'name': 'name', + 'email': "self.user_post@gmail.com", + 'phone_number': 000000000, + 'password': "hahagotim"} + + lokasi_test_1 = {'name': 'Ma Homie', + 'latitude': 0.1, + 'longitude': 0.1, + 'alamat': 'Jl. Raya Bogor no.2, Jakarta', + 'no_telp': '081212123132', + } + def create_user_test(self, username=default_username_email, last_name=default_last_name, password=default_password): @@ -114,3 +127,36 @@ class InformasiFasilitasTest(TestCase): fasilitas=fasilitas) dislike_test.save() return dislike_test + + def client_user_token(self): + Client().post('/api/register/', self.user_post) + token_response = Client().post('/api-token-auth/', {'username': self.user_post["email"], + 'password': self.user_post["password"]}) + content = json.loads(token_response.content.decode('utf-8')) + token = content['token'] + client = Client(HTTP_AUTHORIZATION='token '+token) + return client + + +class InformasiFasilitasViewTest(InformasiFasilitasTest): + urlpatterns = [ + path('informasi-fasilitas/', include('informasi_fasilitas.urls')), + ] + + def setUp(self): + email = 'usersetup@gmail.com' + password = 'hahagotim' + Client().post('/api/register/', + {'name': 'name', + 'email': email, + 'phone_number': 1000000, + 'password': password}) + token_response = Client().post('/api-token-auth/', + {'username': email, + 'password': password}) + content = json.loads(token_response.content.decode('utf-8')) + token = content['token'] + client = Client(HTTP_AUTHORIZATION='token '+token) + + client.post(reverse('add-lokasi'), + self.lokasi_test_1) diff --git a/informasi_fasilitas/test_views_fasilitas.py b/informasi_fasilitas/test_views_fasilitas.py index a6776f8..462aa85 100644 --- a/informasi_fasilitas/test_views_fasilitas.py +++ b/informasi_fasilitas/test_views_fasilitas.py @@ -1,33 +1,50 @@ import json import tempfile +import copy from http import HTTPStatus +from datetime import datetime from django.test import TestCase, Client from django.db.utils import IntegrityError from django.contrib.auth.models import User from django.urls import reverse, path, include -from registrasi.models import BisaGoUser -from .models import Lokasi, Fasilitas, Komentar, KURSI_RODA, RUNNING_TEXT, Likes, Dislikes +from .base_test import InformasiFasilitasViewTest +from .models import Lokasi, Fasilitas, Komentar, Likes, Dislikes from .serializers import LokasiSerializer + class FasilitasRelatedViewTest(InformasiFasilitasViewTest): def test_can_get_list_fasilitas(self): - user = user_test - user.save() - lokasi = lokasi_test - lokasi.save() - fasilitas = fasilitas_test - fasilitas.save() + self.create_fasilitas_test() response = Client().get( - reverse('list-fasilitas', kwargs={'nama_lokasi': 'Mall'})) + reverse('list-fasilitas', kwargs={'nama_lokasi': self.default_lokasi_name})) self.assertEqual(response.status_code, HTTPStatus.OK) + def test_can_get_list_fasilitas_json(self): + fasilitas = self.create_fasilitas_test() + response = Client().get( + reverse('list-fasilitas', kwargs={'nama_lokasi': self.default_lokasi_name})) + content = json.loads(response.content.decode('utf-8')) + expected_json = {'1': {'id': 1, + 'nama_lokasi': self.default_lokasi_name, + 'deskripsi': self.default_deskripsi, + 'creator': self.default_last_name, + 'like': self.default_like, + 'dislike': self.default_dislike, + 'rating': self.default_rating, + 'tag': ['RT', 'KR'], + 'image': fasilitas.image, + 'is_verified': False} + } + + time = fasilitas.date_time.strftime("%d-%m-%Y %H:%M:%S") + expected_json["1"]['date_time'] = time + self.assertEqual(content, expected_json) + def test_cannot_post_list_fasilitas(self): - lokasi = lokasi_test - lokasi.save() response = Client().post( - reverse('list-fasilitas', kwargs={'nama_lokasi': 'Mall'})) + reverse('list-fasilitas', kwargs={'nama_lokasi': self.lokasi_test_1["name"]})) self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) def test_get_list_fasilitas_not_found(self): @@ -36,29 +53,24 @@ class FasilitasRelatedViewTest(InformasiFasilitasViewTest): self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) def test_can_get_detail_fasilitas(self): - user = user_test - user.save() - lokasi = lokasi_test - lokasi.save() - - fasilitas = fasilitas_test - fasilitas.save() + self.create_fasilitas_test() + response = Client().get(reverse('detail-fasilitas', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1})) + self.assertEqual(response.status_code, HTTPStatus.OK) - fasilitas_id = fasilitas.id - response = Client().get(reverse('detail-fasilitas', kwargs={'nama_lokasi': 'Mall', - 'id': fasilitas_id})) + def test_can_get_detail_fasilitas_json(self): + #TODO + self.create_fasilitas_test() + response = Client().get(reverse('detail-fasilitas', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1})) self.assertEqual(response.status_code, HTTPStatus.OK) def test_cannot_post_detail_fasilitas(self): - user = user_test - user.save() - lokasi = lokasi_test - lokasi.save() - fasilitas = fasilitas_test - fasilitas.save() - id = fasilitas.id - response = Client().post(reverse('detail-fasilitas', kwargs={'nama_lokasi': 'Mall', - 'id': id})) + fasilitas = self.create_fasilitas_test() + response = Client().post(reverse('detail-fasilitas', kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': fasilitas.id})) self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) def test_get_detail_fasilitas_not_found(self): @@ -67,64 +79,41 @@ class FasilitasRelatedViewTest(InformasiFasilitasViewTest): self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) def test_can_post_add_fasilitas(self): - Client().post('/api/register/', user_post) - token_response = Client().post('/api-token-auth/', {'username': email_test, - 'password': password_test}) + Client().post('/api/register/', self.user_post) + token_response = Client().post('/api-token-auth/', {'username': self.user_post["email"], + 'password': self.user_post["password"]}) content = json.loads(token_response.content.decode('utf-8')) token = content['token'] client = Client(HTTP_AUTHORIZATION='token '+token) - lokasi = lokasi_test - lokasi.save() - - urls = reverse('add-fasilitas', kwargs={'nama_lokasi': 'Mall'}) + self.create_lokasi_test() + urls = reverse('add-fasilitas', kwargs={'nama_lokasi': self.default_lokasi_name}) response = client.post(urls, {'deskripsi': 'penjelasan fasilitas', 'rating': 2, 'tag': 'KR RT'}) self.assertEqual(response.status_code, HTTPStatus.CREATED) def test_cannot_get_add_fasilitas(self): - Client().post('/api/register/', user_post) - token_response = Client().post('/api-token-auth/', {'username': email_test, - 'password': password_test}) - content = json.loads(token_response.content.decode('utf-8')) - token = content['token'] - client = Client(HTTP_AUTHORIZATION='token '+token) - - lokasi = lokasi_test - lokasi.save() - + client = self.client_user_token() + self.create_lokasi_test() response = client.get( - reverse('add-fasilitas', kwargs={'nama_lokasi': 'Mall'})) + reverse('add-fasilitas', kwargs={'nama_lokasi': self.default_lokasi_name})) self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) def test_post_add_fasilitas_not_found(self): ''' Check this method later ''' - Client().post('/api/register/', user_post) - token_response = Client().post('/api-token-auth/', {'username': email_test, - 'password': password_test}) - content = json.loads(token_response.content.decode('utf-8')) - token = content['token'] - client = Client(HTTP_AUTHORIZATION='token '+token) - + client = self.client_user_token() urls = reverse('add-fasilitas', kwargs={'nama_lokasi': 'Mall'}) response = client.post(urls, {'deskripsi': 'penjelasan fasilitas', 'rating': 2}) self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) def test_put_update_detail_fasilitas_success(self): - Client().post('/api/register/', user_post) - token_response = Client().post('/api-token-auth/', {'username': email_test, - 'password': password_test}) - content = json.loads(token_response.content.decode('utf-8')) - token = content['token'] - client = Client(HTTP_AUTHORIZATION='token '+token) - - lokasi = lokasi_test - lokasi.save() - urls_post = reverse('add-fasilitas', kwargs={'nama_lokasi': 'Mall'}) + client = self.client_user_token() + self.create_lokasi_test() + urls_post = reverse('add-fasilitas', kwargs={'nama_lokasi': self.default_lokasi_name}) data_post = {'deskripsi': 'penjelasan fasilitas', 'rating': 2, 'tag': 'KR RT'} diff --git a/informasi_fasilitas/test_views_lokasi.py b/informasi_fasilitas/test_views_lokasi.py index 4c5c771..cf5c016 100644 --- a/informasi_fasilitas/test_views_lokasi.py +++ b/informasi_fasilitas/test_views_lokasi.py @@ -8,48 +8,10 @@ from django.contrib.auth.models import User from django.urls import reverse, path, include from django.core.files import File -from .base_test import InformasiFasilitasTest +from .base_test import InformasiFasilitasViewTest from .models import Lokasi, Fasilitas, Komentar, Likes, Dislikes from .serializers import LokasiSerializer - -class InformasiFasilitasViewTest(InformasiFasilitasTest): - urlpatterns = [ - path('informasi-fasilitas/', include('informasi_fasilitas.urls')), - ] - default_image = tempfile.NamedTemporaryFile(suffix=".jpg") - - user_post = {'name': 'name', - 'email': "self.user_post@gmail.com", - 'phone_number': 000000000, - 'password': "hahagotim"} - - lokasi_test_1 = {'name': 'Ma Homie', - 'latitude': 0.1, - 'longitude': 0.1, - 'alamat': 'Jl. Raya Bogor no.2, Jakarta', - 'no_telp': '081212123132', - } - - def setUp(self): - email = 'usersetup@gmail.com' - password = 'hahagotim' - Client().post('/api/register/', - {'name': 'name', - 'email': email, - 'phone_number': 1000000, - 'password': password}) - token_response = Client().post('/api-token-auth/', - {'username': email, - 'password': password}) - content = json.loads(token_response.content.decode('utf-8')) - token = content['token'] - client = Client(HTTP_AUTHORIZATION='token '+token) - - client.post(reverse('add-lokasi'), - self.lokasi_test_1) - - class LokasiRelatedViewTest(InformasiFasilitasViewTest): def test_LokasiSerializer_valid(self): diff --git a/informasi_fasilitas/tests_views.py b/informasi_fasilitas/tests_views.py deleted file mode 100644 index e97d165..0000000 --- a/informasi_fasilitas/tests_views.py +++ /dev/null @@ -1,344 +0,0 @@ -import json -import tempfile -from http import HTTPStatus -from django.test import TestCase, Client -from django.db.utils import IntegrityError -from django.contrib.auth.models import User -from django.urls import reverse, path, include - -from registrasi.models import BisaGoUser -from .models import Lokasi, Fasilitas, Komentar, KURSI_RODA, RUNNING_TEXT, Likes, Dislikes -from .serializers import LokasiSerializer - -not_null_constraint_failed_message = 'NOT NULL constraint failed' -image_test = tempfile.NamedTemporaryFile(suffix=".jpg").name -user_test = User(username='user@gmail.com', - last_name='name', - email='user@gmail.com', - password='hahagotim') - -lokasi_test = Lokasi(name='Mall', - latitude=0.0, - longitude=0.0, - alamat='Jl. Raya Bogor no.1, Jakarta', - no_telp='081212123131', - image=tempfile.NamedTemporaryFile(suffix=".jpg").name) - -fasilitas_test = Fasilitas(lokasi=lokasi_test, - user=user_test, - deskripsi="penjelasan panjang", - like=0, - dislike=0, - rating=5, - tag={KURSI_RODA, RUNNING_TEXT}, - image=image_test) - -lokasi_data_post = {'name' : 'Mall', - 'latitude' : 0.0, - 'longitude' : 0.0, - 'alamat' : 'Jl. Raya Bogor no.1, Jakarta', - 'no_telp' : '081212123131'} - -email_test = "user@gmail.com" -password_test = "hahagotim" - -user_post = {'name':'name', - 'email':email_test, - 'phone_number':000000000, - 'password':password_test} - - -class InformasiFasilitasViewTest(TestCase): - urlpatterns = [ - path('informasi-fasilitas/', include('informasi_fasilitas.urls')), - ] - - def setUp(self): - email = 'usersetup@gmail.com' - password = 'hahagotim' - Client().post('/api/register/', - {'name':'name', - 'email':email, - 'phone_number':1000000, - 'password':password}) - token_response = Client().post('/api-token-auth/', - {'username' : email, - 'password' : password}) - content = json.loads(token_response.content.decode('utf-8')) - token = content['token'] - client = Client(HTTP_AUTHORIZATION='token '+token) - - client.post(reverse('add-lokasi'), - {'name' : 'Ma Homie', - 'latitude' : 0.1, - 'longitude' : 0.1, - 'alamat' : 'Jl. Raya Bogor no.2, Jakarta', - 'no_telp' : '081212123132'}) - - client.post(reverse('add-lokasi'), - {'name' : 'Ma Homies', - 'latitude' : 0.2, - 'longitude' : 0.1, - 'alamat' : 'Jl. Raya Bogor no.3, Jakarta', - 'no_telp' : '081212123134'}) - - client.post(reverse('add-fasilitas', kwargs={"nama_lokasi":"Ma Homie"}), - {'deskripsi' : 'kayaknya deskrispi', - 'rating' : 3, - 'tag' : "KR RT", - 'image' : 'gambar.jpg'}) - -class LokasiRelatedViewTest(InformasiFasilitasViewTest): - - def test_LokasiSerializer_valid(self): - serializer = LokasiSerializer(data={ - 'name' : 'Mall1', - 'latitude' : 0.0, - 'longitude' : 0.0, - 'alamat' : 'Jl. Raya Bogor no.1, Jakarta', - 'no_telp' : '081212123131' - }) - self.assertTrue(serializer.is_valid) - - def test_can_get_lokasi_list_url(self): - response = Client().get(reverse('lokasi-list')) - self.assertEqual(response.status_code, HTTPStatus.OK) - - def test_get_lokasi_list_json(self): - response = Client().get(reverse('lokasi-list')) - content = json.loads(response.content.decode('utf-8')) - expected_json = [{'id': 1, - 'name':'Ma Homie', - 'latitude' : 0.1, - 'longitude' : 0.1, - 'alamat' : 'Jl. Raya Bogor no.2, Jakarta', - 'no_telp' : '081212123132', - 'image':None}, - {'id': 2, - 'name':'Ma Homies', - 'latitude' : 0.2, - 'longitude' : 0.1, - 'alamat' : 'Jl. Raya Bogor no.3, Jakarta', - 'no_telp' : '081212123134', - 'image':None} - ] - self.assertEqual(content, expected_json) - - def test_cannot_post_lokasi_list_url(self): - response = Client().post(reverse('lokasi-list')) - self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) - - def test_can_get_lokasi_details(self): - lokasi = lokasi_test - lokasi.save() - response = Client().get(reverse('lokasi-details', kwargs={'nama_lokasi':'Mall'})) - self.assertEqual(response.status_code, HTTPStatus.OK) - - def test_can_get_lokasi_details_json(self): - response = Client().get(reverse('lokasi-details', kwargs={'nama_lokasi':'Ma Homie'})) - content = json.loads(response.content.decode('utf-8')) - expected_json = {'id': 1, - 'name':'Ma Homie', - 'latitude' : 0.1, - 'longitude' : 0.1, - 'alamat' : 'Jl. Raya Bogor no.2, Jakarta', - 'no_telp' : '081212123132', - 'image':None} - self.assertEqual(content, expected_json) - - def test_cannot_post_lokasi_details(self): - lokasi = lokasi_test - lokasi.save() - response = Client().post(reverse('lokasi-details', kwargs={'nama_lokasi':'Mall'})) - self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) - - def test_get_lokasi_details_not_found(self): - response = Client().get(reverse('lokasi-details', kwargs={'nama_lokasi':'Mall'})) - self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) - - def test_can_post_add_lokasi(self): - Client().post('/api/register/', user_post) - token_response = Client().post('/api-token-auth/', {'username' : email_test, - 'password' : password_test}) - content = json.loads(token_response.content.decode('utf-8')) - token = content['token'] - client = Client(HTTP_AUTHORIZATION='token '+token) - - response = client.post(reverse('add-lokasi'), lokasi_data_post) - self.assertEqual(response.status_code, HTTPStatus.CREATED) - - def test_can_post_add_json(self): - Client().post('/api/register/', user_post) - token_response = Client().post('/api-token-auth/', {'username' : email_test, - 'password' : password_test}) - content = json.loads(token_response.content.decode('utf-8')) - token = content['token'] - client = Client(HTTP_AUTHORIZATION='token '+token) - - response = client.post(reverse('add-lokasi'), lokasi_data_post) - response_json = json.loads(response.content.decode("utf-8")) - - expected_json = {"id": 3, - 'name' : 'Mall', - 'latitude' : 0.0, - 'longitude' : 0.0, - 'alamat' : 'Jl. Raya Bogor no.1, Jakarta', - 'no_telp' : '081212123131', - "image" : None - } - - self.assertEqual(response_json, expected_json) - - def test_put_update_detail_lokasi_success(self): - Client().post('/api/register/', user_post) - token_response = Client().post('/api-token-auth/', {'username' : email_test, - 'password' : password_test}) - content = json.loads(token_response.content.decode('utf-8')) - token = content['token'] - client = Client(HTTP_AUTHORIZATION='token '+token) - - lokasi = lokasi_test - lokasi.save() - - urls = reverse('update-lokasi', kwargs={'nama_lokasi':'Mall'}) - response = client.put(urls, data={'no_telp' : '0000000121',}, - content_type="multipart/form-data") - self.assertEqual(response.status_code, HTTPStatus.ACCEPTED) - - - def test_cannot_get_add_lokasi(self): - Client().post('/api/register/', user_post) - token_response = Client().post('/api-token-auth/', {'username' : email_test, - 'password' : password_test}) - content = json.loads(token_response.content.decode('utf-8')) - token = content['token'] - client = Client(HTTP_AUTHORIZATION='token '+token) - - response = client.get(reverse('add-lokasi')) - self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) - -class FasilitasRelatedViewTest(InformasiFasilitasViewTest): - - def test_can_get_list_fasilitas(self): - user = user_test - user.save() - lokasi = lokasi_test - lokasi.save() - fasilitas = fasilitas_test - fasilitas.save() - response = Client().get(reverse('list-fasilitas', kwargs={'nama_lokasi':'Mall'})) - self.assertEqual(response.status_code, HTTPStatus.OK) - - def test_cannot_post_list_fasilitas(self): - lokasi = lokasi_test - lokasi.save() - response = Client().post(reverse('list-fasilitas', kwargs={'nama_lokasi':'Mall'})) - self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) - - def test_get_list_fasilitas_not_found(self): - response = Client().get(reverse('list-fasilitas', kwargs={'nama_lokasi':'Mall'})) - self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) - - def test_can_get_detail_fasilitas(self): - user = user_test - user.save() - lokasi = lokasi_test - lokasi.save() - - fasilitas = fasilitas_test - fasilitas.save() - - fasilitas_id = fasilitas.id - response = Client().get(reverse('detail-fasilitas', kwargs={'nama_lokasi':'Mall', - 'id':fasilitas_id})) - self.assertEqual(response.status_code, HTTPStatus.OK) - - def test_cannot_post_detail_fasilitas(self): - user = user_test - user.save() - lokasi = lokasi_test - lokasi.save() - fasilitas = fasilitas_test - fasilitas.save() - id = fasilitas.id - response = Client().post(reverse('detail-fasilitas', kwargs={'nama_lokasi':'Mall', - 'id':id})) - self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) - - def test_get_detail_fasilitas_not_found(self): - response = Client().get(reverse('detail-fasilitas', kwargs={'nama_lokasi':'Mall', 'id':0})) - self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) - - def test_can_post_add_fasilitas(self): - Client().post('/api/register/', user_post) - token_response = Client().post('/api-token-auth/', {'username' : email_test, - 'password' : password_test}) - content = json.loads(token_response.content.decode('utf-8')) - token = content['token'] - client = Client(HTTP_AUTHORIZATION='token '+token) - - lokasi = lokasi_test - lokasi.save() - - urls = reverse('add-fasilitas', kwargs={'nama_lokasi':'Mall'}) - response = client.post(urls, {'deskripsi' : 'penjelasan fasilitas', - 'rating' : 2, - 'tag' : 'KR RT'}) - self.assertEqual(response.status_code, HTTPStatus.CREATED) - - def test_cannot_get_add_fasilitas(self): - Client().post('/api/register/', user_post) - token_response = Client().post('/api-token-auth/', {'username' : email_test, - 'password' : password_test}) - content = json.loads(token_response.content.decode('utf-8')) - token = content['token'] - client = Client(HTTP_AUTHORIZATION='token '+token) - - lokasi = lokasi_test - lokasi.save() - - response = client.get(reverse('add-fasilitas', kwargs={'nama_lokasi':'Mall'})) - self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) - - def test_post_add_fasilitas_not_found(self): - ''' - Check this method later - ''' - Client().post('/api/register/', user_post) - token_response = Client().post('/api-token-auth/', {'username' : email_test, - 'password' : password_test}) - content = json.loads(token_response.content.decode('utf-8')) - token = content['token'] - client = Client(HTTP_AUTHORIZATION='token '+token) - - urls = reverse('add-fasilitas', kwargs={'nama_lokasi':'Mall'}) - response = client.post(urls, {'deskripsi' : 'penjelasan fasilitas', - 'rating' : 2}) - self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) - - def test_put_update_detail_fasilitas_success(self): - Client().post('/api/register/', user_post) - token_response = Client().post('/api-token-auth/', {'username' : email_test, - 'password' : password_test}) - content = json.loads(token_response.content.decode('utf-8')) - token = content['token'] - client = Client(HTTP_AUTHORIZATION='token '+token) - - lokasi = lokasi_test - lokasi.save() - urls_post = reverse('add-fasilitas', kwargs={'nama_lokasi':'Mall'}) - data_post = {'deskripsi' : 'penjelasan fasilitas', - 'rating' : 2, - 'tag' : 'KR RT'} - response = client.post(urls_post, data=data_post) - - response_json = json.loads(response.content.decode("utf-8")) - fasilitas_id = response_json["id"] - urls_put = reverse('update-fasilitas', kwargs={'nama_lokasi':'Mall', "id":fasilitas_id}) - send_data = {'deskripsi' : 'penjelasan fasilitases', - 'rating' : 3, - 'tag' : 'KR'} - response = client.put(urls_put, data=send_data, content_type="multipart/form-data") - response_json = json.loads(response.content.decode("utf-8")) - self.assertEqual(response.status_code, HTTPStatus.ACCEPTED) - \ No newline at end of file -- GitLab From 9044cf5a3e3ef1cc612c95008063e8d21605ce15 Mon Sep 17 00:00:00 2001 From: Bimo Iman Smartadi Date: Sun, 3 May 2020 20:48:42 +0700 Subject: [PATCH 07/14] [REFACTOR, GREEN] Refactored unnecessary code on views. and moved a template from test to base test --- informasi_fasilitas/base_test.py | 2 +- informasi_fasilitas/test_views_fasilitas.py | 4 ++-- informasi_fasilitas/views.py | 21 +++------------------ 3 files changed, 6 insertions(+), 21 deletions(-) diff --git a/informasi_fasilitas/base_test.py b/informasi_fasilitas/base_test.py index d84c48f..d0aefbc 100644 --- a/informasi_fasilitas/base_test.py +++ b/informasi_fasilitas/base_test.py @@ -25,7 +25,7 @@ class InformasiFasilitasTest(TestCase): default_image = tempfile.NamedTemporaryFile(suffix=".jpg").name default_like = 0 default_dislike = 0 - default_tag = {KURSI_RODA, RUNNING_TEXT} + default_tag = [KURSI_RODA, RUNNING_TEXT] default_rating = 3 default_deskripsi = "penjelasan" diff --git a/informasi_fasilitas/test_views_fasilitas.py b/informasi_fasilitas/test_views_fasilitas.py index 462aa85..14a3fba 100644 --- a/informasi_fasilitas/test_views_fasilitas.py +++ b/informasi_fasilitas/test_views_fasilitas.py @@ -33,8 +33,8 @@ class FasilitasRelatedViewTest(InformasiFasilitasViewTest): 'like': self.default_like, 'dislike': self.default_dislike, 'rating': self.default_rating, - 'tag': ['RT', 'KR'], - 'image': fasilitas.image, + 'tag': ['KR', 'RT'], + 'image': str(fasilitas.image), 'is_verified': False} } diff --git a/informasi_fasilitas/views.py b/informasi_fasilitas/views.py index d7b0fe1..4213ecc 100644 --- a/informasi_fasilitas/views.py +++ b/informasi_fasilitas/views.py @@ -1,8 +1,10 @@ from http import HTTPStatus +from datetime import datetime from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt from django.contrib.auth.models import User + from rest_framework import viewsets from rest_framework.decorators import api_view, permission_classes, authentication_classes from rest_framework.authentication import TokenAuthentication @@ -11,9 +13,6 @@ from rest_framework.permissions import IsAuthenticated from .serializers import LokasiSerializer from .models import Lokasi, Fasilitas, Komentar, Likes, Dislikes -def request_error_message(request_kind): - return "get {} request instead".format(request_kind) - def missing_key_message(key): return "bad request. {} key needed".format(key) @@ -26,8 +25,6 @@ def lokasi_list(request): lokasi_list = Lokasi.objects.all() serializer = LokasiSerializer(lokasi_list, many=True) return JsonResponse(serializer.data, safe=False, status=HTTPStatus.OK) - else: - return JsonResponse({'response' : request_error_message("get")}, status=HTTPStatus.NOT_FOUND) @api_view(['GET']) @authentication_classes([]) @@ -38,8 +35,6 @@ def lokasi_details(request, nama_lokasi): lokasi = Lokasi.objects.get(name=nama_lokasi) serializer = LokasiSerializer(lokasi) return JsonResponse(serializer.data, safe=False, status=HTTPStatus.OK) - else: - return JsonResponse({'response' : request_error_message("get")}, status=HTTPStatus.METHOD_NOT_ALLOWED) except KeyError as missing_key: return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) except Exception: @@ -58,8 +53,6 @@ def add_lokasi(request): return JsonResponse(serializer.data, status=HTTPStatus.CREATED) else: return JsonResponse(serializer.errors, status=HTTPStatus.BAD_REQUEST) - else: - return JsonResponse({'response' : request_error_message("post")}, status=HTTPStatus.METHOD_NOT_ALLOWED) except KeyError as missing_key: return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) @@ -74,8 +67,6 @@ def update_lokasi_details(request, nama_lokasi): lokasi.no_telp = request.data['no_telp'] lokasi.save() return JsonResponse({'response' : "phone changed to {}".format(lokasi.no_telp)}, status=HTTPStatus.ACCEPTED) - else: - return JsonResponse({'response' : request_error_message("put")}, status=HTTPStatus.METHOD_NOT_ALLOWED) except KeyError as missing_key: return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) @@ -96,7 +87,7 @@ def list_fasilitas(request, nama_lokasi): fasilitas_details["nama_lokasi"] = fasilitas.lokasi.name fasilitas_details["deskripsi"] = fasilitas.deskripsi fasilitas_details["creator"] = fasilitas.user.last_name - fasilitas_details["date_time"] = fasilitas.date_time + fasilitas_details["date_time"] = fasilitas.date_time.strftime("%d-%m-%Y %H:%M:%S") fasilitas_details["like"] = fasilitas.like fasilitas_details["dislike"] = fasilitas.dislike fasilitas_details["rating"] = fasilitas.rating @@ -130,8 +121,6 @@ def add_fasilitas(request, nama_lokasi): tag=tag, image=image) return JsonResponse({'response' : 'fasilitas added', 'id':fasilitas.id}, status=HTTPStatus.CREATED) - else: - return JsonResponse({'response' : request_error_message("post")}, status=HTTPStatus.METHOD_NOT_ALLOWED) except KeyError as missing_key: return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) except Exception as error: @@ -160,8 +149,6 @@ def detail_fasilitas(request, nama_lokasi, id): "image":str(fasilitas.image), "is_verified":fasilitas.is_verified} return JsonResponse(return_json, status=HTTPStatus.OK) - else: - return JsonResponse({'response' : request_error_message("get")}, status=HTTPStatus.METHOD_NOT_ALLOWED) except KeyError as missing_key: return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) except Exception as error: @@ -248,8 +235,6 @@ def add_komentar(request, nama_lokasi): user=user, deskripsi=deskripsi) return JsonResponse({'response' : 'komentar added', 'id':komentar.id}, status = 201) - else: - return JsonResponse({'response' : request_error_message("post")}, status = 400) except KeyError as e: return JsonResponse({'response': missing_key_message(str(e))}, status = 500) except Exception as e: -- GitLab From 89ce7a878eccf156b773f1e1a8264b1f01258966 Mon Sep 17 00:00:00 2001 From: Bimo Iman Smartadi Date: Sun, 3 May 2020 23:38:02 +0700 Subject: [PATCH 08/14] [REFACTOR, RED] Added test for like and dislike in a well mannered way --- informasi_fasilitas/test_base.py | 172 ++++++++++++++++++ informasi_fasilitas/test_views_fasilitas.py | 55 +++--- .../test_views_like_dislike.py | 142 +++++++++++++++ informasi_fasilitas/test_views_lokasi.py | 56 +++--- 4 files changed, 379 insertions(+), 46 deletions(-) create mode 100644 informasi_fasilitas/test_base.py diff --git a/informasi_fasilitas/test_base.py b/informasi_fasilitas/test_base.py new file mode 100644 index 0000000..7201882 --- /dev/null +++ b/informasi_fasilitas/test_base.py @@ -0,0 +1,172 @@ +import json +import tempfile +from http import HTTPStatus +from django.test import TestCase, Client +from django.db.utils import IntegrityError +from django.contrib.auth.models import User +from django.urls import reverse, path, include + +from registrasi.models import BisaGoUser +from .models import Lokasi, Fasilitas, Komentar, KURSI_RODA, RUNNING_TEXT, Likes, Dislikes +from .serializers import LokasiSerializer + +not_null_constraint_failed_message = 'NOT NULL constraint failed' + + +class InformasiFasilitasTest(TestCase): + default_username_email = "user_test@gmail.com" + default_last_name = "name" + default_password = "hahagotim" + default_lokasi_name = "Mall" + default_latitude = 0.0 + default_longitude = 0.0 + default_alamat = "Jl. Raya Bogor no.1 Jakarta" + default_no_telp = "08123456789" + default_image = tempfile.NamedTemporaryFile(suffix=".jpg").name + default_like = 0 + default_dislike = 0 + default_tag = [KURSI_RODA, RUNNING_TEXT] + default_rating = 3 + default_deskripsi = "penjelasan" + + user_post = {'name': 'name', + 'email': "self.user_post@gmail.com", + 'phone_number': 000000000, + 'password': "hahagotim"} + + lokasi_test_1 = {'name': 'Ma Homie', + 'latitude': 0.1, + 'longitude': 0.1, + 'alamat': 'Jl. Raya Bogor no.2, Jakarta', + 'no_telp': '081212123132', + } + + def create_user_test(self, username=default_username_email, + last_name=default_last_name, + password=default_password): + user_test = User(username=username, + last_name=last_name, + email=username, + password=password) + user_test.save() + return user_test + + def create_lokasi_test(self, name=default_lokasi_name, + latitude=default_latitude, + longitude=default_longitude, + alamat=default_alamat, + no_telp=default_no_telp, + image=default_image): + + lokasi_test = Lokasi(name=name, + latitude=latitude, + longitude=longitude, + alamat=alamat, + no_telp=no_telp, + image=image) + lokasi_test.save() + return lokasi_test + + def create_fasilitas_test(self, deskripsi=default_deskripsi, + like=default_like, + dislike=default_dislike, + rating=default_rating, + tag=default_tag, + image=default_image, + lokasi=None, + user=None): + if (user == None): + user = self.create_user_test() + if (lokasi == None): + lokasi = self.create_lokasi_test() + fasilitas_test = Fasilitas(lokasi=lokasi, + user=user, + deskripsi=deskripsi, + like=like, + dislike=dislike, + rating=rating, + tag=tag, + image=image) + fasilitas_test.save() + return fasilitas_test + + def create_komentar_test(self, deskripsi=default_deskripsi, + user=None, + fasilitas=None): + if (user == None): + user = self.create_user_test() + if (fasilitas == None): + lokasi = self.create_lokasi_test() + fasilitas = self.create_fasilitas_test(user=user, lokasi=lokasi) + komentar_test = Komentar(deskripsi=deskripsi, + user=user, + fasilitas=fasilitas) + komentar_test.save() + return komentar_test + + def create_likes_test(self, user=None, + fasilitas=None): + if (user == None): + user = self.create_user_test() + if (fasilitas == None): + lokasi = self.create_lokasi_test(user) + fasilitas = self.create_fasilitas_test(user=user, lokasi=lokasi) + like_test = Likes(user=user, + fasilitas=fasilitas) + like_test.save() + return like_test + + def create_dislikes_test(self, user=None, + fasilitas=None): + if (user == None): + user = self.create_user_test() + if (fasilitas == None): + lokasi = self.create_lokasi_test(user) + fasilitas = self.create_fasilitas_test(user=user, lokasi=lokasi) + dislike_test = Dislikes(user=user, + fasilitas=fasilitas) + dislike_test.save() + return dislike_test + + def client_user_token(self): + Client().post('/api/register/', self.user_post) + token_response = Client().post('/api-token-auth/', {'username': self.user_post["email"], + 'password': self.user_post["password"]}) + content = json.loads(token_response.content.decode('utf-8')) + token = content['token'] + client = Client(HTTP_AUTHORIZATION='token '+token) + return client + + def client_user_token2(self): + Client().post('/api/register/', self.user_post) + token_response = Client().post('/api-token-auth/', {'username': self.default_username_email, + 'password': self.default_password}) + content = json.loads(token_response.content.decode('utf-8')) + token = content['token'] + client = Client(HTTP_AUTHORIZATION='token '+token) + return client + + + +class InformasiFasilitasViewTest(InformasiFasilitasTest): + urlpatterns = [ + path('informasi-fasilitas/', include('informasi_fasilitas.urls')), + ] + + def setUp(self): + email = 'usersetup@gmail.com' + password = 'hahagotim' + Client().post('/api/register/', + {'name': 'name', + 'email': email, + 'phone_number': 1000000, + 'password': password}) + token_response = Client().post('/api-token-auth/', + {'username': email, + 'password': password}) + content = json.loads(token_response.content.decode('utf-8')) + token = content['token'] + client = Client(HTTP_AUTHORIZATION='token '+token) + + client.post(reverse('add-lokasi'), + self.lokasi_test_1) diff --git a/informasi_fasilitas/test_views_fasilitas.py b/informasi_fasilitas/test_views_fasilitas.py index 14a3fba..b0ba13d 100644 --- a/informasi_fasilitas/test_views_fasilitas.py +++ b/informasi_fasilitas/test_views_fasilitas.py @@ -1,6 +1,7 @@ import json import tempfile import copy +from django.utils.http import urlencode from http import HTTPStatus from datetime import datetime from django.test import TestCase, Client @@ -8,7 +9,7 @@ from django.db.utils import IntegrityError from django.contrib.auth.models import User from django.urls import reverse, path, include -from .base_test import InformasiFasilitasViewTest +from .test_base import InformasiFasilitasViewTest from .models import Lokasi, Fasilitas, Komentar, Likes, Dislikes from .serializers import LokasiSerializer @@ -27,17 +28,17 @@ class FasilitasRelatedViewTest(InformasiFasilitasViewTest): reverse('list-fasilitas', kwargs={'nama_lokasi': self.default_lokasi_name})) content = json.loads(response.content.decode('utf-8')) expected_json = {'1': {'id': 1, - 'nama_lokasi': self.default_lokasi_name, - 'deskripsi': self.default_deskripsi, - 'creator': self.default_last_name, - 'like': self.default_like, - 'dislike': self.default_dislike, - 'rating': self.default_rating, - 'tag': ['KR', 'RT'], - 'image': str(fasilitas.image), - 'is_verified': False} - } - + 'nama_lokasi': self.default_lokasi_name, + 'deskripsi': self.default_deskripsi, + 'creator': self.default_last_name, + 'like': self.default_like, + 'dislike': self.default_dislike, + 'rating': self.default_rating, + 'tag': ['KR', 'RT'], + 'image': str(fasilitas.image), + 'is_verified': False} + } + time = fasilitas.date_time.strftime("%d-%m-%Y %H:%M:%S") expected_json["1"]['date_time'] = time self.assertEqual(content, expected_json) @@ -60,7 +61,7 @@ class FasilitasRelatedViewTest(InformasiFasilitasViewTest): self.assertEqual(response.status_code, HTTPStatus.OK) def test_can_get_detail_fasilitas_json(self): - #TODO + # TODO self.create_fasilitas_test() response = Client().get(reverse('detail-fasilitas', kwargs={'nama_lokasi': self.default_lokasi_name, @@ -79,15 +80,10 @@ class FasilitasRelatedViewTest(InformasiFasilitasViewTest): self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) def test_can_post_add_fasilitas(self): - Client().post('/api/register/', self.user_post) - token_response = Client().post('/api-token-auth/', {'username': self.user_post["email"], - 'password': self.user_post["password"]}) - content = json.loads(token_response.content.decode('utf-8')) - token = content['token'] - client = Client(HTTP_AUTHORIZATION='token '+token) - + client = self.client_user_token() self.create_lokasi_test() - urls = reverse('add-fasilitas', kwargs={'nama_lokasi': self.default_lokasi_name}) + urls = reverse('add-fasilitas', + kwargs={'nama_lokasi': self.default_lokasi_name}) response = client.post(urls, {'deskripsi': 'penjelasan fasilitas', 'rating': 2, 'tag': 'KR RT'}) @@ -101,19 +97,28 @@ class FasilitasRelatedViewTest(InformasiFasilitasViewTest): self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) def test_post_add_fasilitas_not_found(self): - ''' - Check this method later - ''' client = self.client_user_token() urls = reverse('add-fasilitas', kwargs={'nama_lokasi': 'Mall'}) response = client.post(urls, {'deskripsi': 'penjelasan fasilitas', 'rating': 2}) self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND) + def test_post_add_fasilitas_cannot_authorized(self): + client = Client() + self.create_lokasi_test() + urls = reverse('add-fasilitas', + kwargs={'nama_lokasi': self.default_lokasi_name}) + response = client.post(urls, {'deskripsi': 'penjelasan fasilitas', + 'rating': 2, + 'tag': 'KR RT'}) + self.assertEqual(response.status_code, HTTPStatus.UNAUTHORIZED) + + def test_put_update_detail_fasilitas_success(self): client = self.client_user_token() self.create_lokasi_test() - urls_post = reverse('add-fasilitas', kwargs={'nama_lokasi': self.default_lokasi_name}) + urls_post = reverse( + 'add-fasilitas', kwargs={'nama_lokasi': self.default_lokasi_name}) data_post = {'deskripsi': 'penjelasan fasilitas', 'rating': 2, 'tag': 'KR RT'} diff --git a/informasi_fasilitas/test_views_like_dislike.py b/informasi_fasilitas/test_views_like_dislike.py index e69de29..cb332f5 100644 --- a/informasi_fasilitas/test_views_like_dislike.py +++ b/informasi_fasilitas/test_views_like_dislike.py @@ -0,0 +1,142 @@ +import json +import tempfile +import copy +from django.utils.http import urlencode +from http import HTTPStatus +from datetime import datetime +from django.test import TestCase, Client +from django.db.utils import IntegrityError +from django.contrib.auth.models import User +from django.urls import reverse, path, include + +from .test_base import InformasiFasilitasViewTest +from .models import Lokasi, Fasilitas, Komentar, Likes, Dislikes +from .serializers import LokasiSerializer + + +class LikeDislikeRelatedViewTest(InformasiFasilitasViewTest): + + def test_can_like_facility(self): + client = self.client_user_token() + fasilitas = self.create_fasilitas_test() + urls = reverse('update-like-fasilitas', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + 'operation': "like" + }) + client.put(urls) + count = Likes.objects.filter(fasilitas=fasilitas).count() + self.assertEqual(count, 1) + + def test_can_like_facility_status_code(self): + client = self.client_user_token() + self.create_fasilitas_test() + urls = reverse('update-like-fasilitas', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + 'operation': "like" + }) + response = client.put(urls) + self.assertEqual(response.status_code, HTTPStatus.CREATED) + + def test_like_like_facility_status_code(self): + client = self.client_user_token() + self.create_fasilitas_test() + urls = reverse('update-like-fasilitas', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + 'operation': "like" + }) + response = client.put(urls) + response = client.put(urls) # like and like + self.assertEqual(response.status_code, HTTPStatus.NOT_ACCEPTABLE) + + def test_like_like_facility_response(self): + client = self.client_user_token() + self.create_fasilitas_test() + urls = reverse('update-like-fasilitas', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + 'operation': "like" + }) + response = client.put(urls) + response = client.put(urls) # like and like + json_response = json.loads(response.content.decode("utf-8")) + expected_json = {"response" : "You have already disliked this facility"} + self.assertEqual(json_response, expected_json) + + def test_like_like_facility_only_count_one(self): + client = self.client_user_token() + fasilitas = self.create_fasilitas_test() + urls = reverse('update-like-fasilitas', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + 'operation': "like" + }) + client.put(urls) + client.put(urls) # like and like + count = Likes.objects.filter(fasilitas=fasilitas).count() + self.assertEqual(count, 1) + + + def test_can_dislike_facility(self): + client = self.client_user_token() + fasilitas = self.create_fasilitas_test() + urls = reverse('update-like-fasilitas', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + 'operation': "dislike" + }) + client.put(urls) + count = Dislikes.objects.filter(fasilitas=fasilitas).count() + self.assertEqual(count, 1) + + def test_can_dislike_facility_status_code(self): + client = self.client_user_token() + self.create_fasilitas_test() + urls = reverse('update-like-fasilitas', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + 'operation': "dislike" + }) + response = client.put(urls) + self.assertEqual(response.status_code, HTTPStatus.CREATED) + + def test_dislike_dislike_facility_status_code(self): + client = self.client_user_token() + self.create_fasilitas_test() + urls = reverse('update-like-fasilitas', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + 'operation': "dislike" + }) + response = client.put(urls) + response = client.put(urls) # Dislike and dislike + self.assertEqual(response.status_code, HTTPStatus.NOT_ACCEPTABLE) + + def test_dislike_dislike_facility_response(self): + client = self.client_user_token() + self.create_fasilitas_test() + urls = reverse('update-like-fasilitas', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + 'operation': "dislike" + }) + response = client.put(urls) + response = client.put(urls) # Dislike and dislike + json_response = json.loads(response.content.decode("utf-8")) + expected_json = {"response" : "You have already disliked this facility"} + self.assertEqual(json_response, expected_json) + + def test_dislike_dislike_facility_only_count_one(self): + client = self.client_user_token() + fasilitas = self.create_fasilitas_test() + urls = reverse('update-like-fasilitas', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + 'operation': "dislike" + }) + client.put(urls) + client.put(urls) # Dislike and dislike + count = Dislikes.objects.filter(fasilitas=fasilitas).count() + self.assertEqual(count, 1) diff --git a/informasi_fasilitas/test_views_lokasi.py b/informasi_fasilitas/test_views_lokasi.py index cf5c016..e9758e7 100644 --- a/informasi_fasilitas/test_views_lokasi.py +++ b/informasi_fasilitas/test_views_lokasi.py @@ -1,6 +1,7 @@ import json import tempfile import copy +from django.utils.http import urlencode from http import HTTPStatus from django.test import TestCase, Client from django.db.utils import IntegrityError @@ -8,10 +9,11 @@ from django.contrib.auth.models import User from django.urls import reverse, path, include from django.core.files import File -from .base_test import InformasiFasilitasViewTest +from .test_base import InformasiFasilitasViewTest from .models import Lokasi, Fasilitas, Komentar, Likes, Dislikes from .serializers import LokasiSerializer + class LokasiRelatedViewTest(InformasiFasilitasViewTest): def test_LokasiSerializer_valid(self): @@ -27,9 +29,6 @@ class LokasiRelatedViewTest(InformasiFasilitasViewTest): self.assertEqual(response.status_code, HTTPStatus.OK) def test_get_lokasi_list_json(self): - ''' - Not detecting setup lokasi - ''' response = Client().get(reverse('lokasi-list')) content = json.loads(response.content.decode('utf-8')) expected_first_entry = copy.deepcopy(self.lokasi_test_1) @@ -78,24 +77,29 @@ class LokasiRelatedViewTest(InformasiFasilitasViewTest): self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) def test_can_post_add_lokasi(self): - Client().post('/api/register/', self.user_post) - token_response = Client().post('/api-token-auth/', {'username': self.user_post["email"], - 'password': self.user_post["password"]}) - content = json.loads(token_response.content.decode('utf-8')) - token = content['token'] - client = Client(HTTP_AUTHORIZATION='token '+token) - + client = self.client_user_token() response = client.post(reverse('add-lokasi'), self.lokasi_test_1) self.assertEqual(response.status_code, HTTPStatus.CREATED) - def test_can_post_add_lokasi_json(self): - Client().post('/api/register/', self.user_post) - token_response = Client().post('/api-token-auth/', {'username': self.user_post["email"], - 'password': self.user_post["password"]}) - content = json.loads(token_response.content.decode('utf-8')) - token = content['token'] - client = Client(HTTP_AUTHORIZATION='token '+token) + def test_post_add_lokasi_missing_key(self): + test_lokasi = copy.deepcopy(self.lokasi_test_1) + del test_lokasi["name"] + client = self.client_user_token() + response = client.post(reverse('add-lokasi'), test_lokasi) + self.assertEqual(response.status_code, HTTPStatus.BAD_REQUEST) + + def test_post_add_lokasi_missing_key_return_message(self): + test_lokasi = copy.deepcopy(self.lokasi_test_1) + del test_lokasi["name"] + client = self.client_user_token() + response = client.post(reverse('add-lokasi'), test_lokasi) + response_json = json.loads(response.content.decode('utf-8')) + expected_json = {"name": ["This field is required."]} + self.assertEqual(response_json, expected_json) + + def test_can_post_add_lokasi_json(self): + client = self.client_user_token() response = client.post(reverse('add-lokasi'), self.lokasi_test_1) response_json = json.loads(response.content.decode("utf-8")) @@ -113,7 +117,17 @@ class LokasiRelatedViewTest(InformasiFasilitasViewTest): token = content['token'] client = Client(HTTP_AUTHORIZATION='token '+token) - urls = reverse('update-lokasi', kwargs={'nama_lokasi': self.lokasi_test_1["name"]}) - response = client.put(urls, data={'no_telp': '0000000121', }, - content_type="multipart/form-data") + urls = reverse('update-lokasi', + kwargs={'nama_lokasi': self.lokasi_test_1["name"]}) + response = client.put(urls, data=urlencode({'no_telp': '0000000121', }), + content_type="application/x-www-form-urlencoded") self.assertEqual(response.status_code, HTTPStatus.ACCEPTED) + + def test_put_update_detail_lokasi_missing_key(self): + client = self.client_user_token() + + urls = reverse('update-lokasi', + kwargs={'nama_lokasi': self.lokasi_test_1["name"]}) + response = client.put(urls, data={"latitude": 100}, + content_type="multipart/form-data") + self.assertEqual(response.status_code, HTTPStatus.BAD_REQUEST) -- GitLab From 01dc51899269f67be4fa6ddf7e4392161c8cdd50 Mon Sep 17 00:00:00 2001 From: Bimo Iman Smartadi Date: Sun, 3 May 2020 23:43:42 +0700 Subject: [PATCH 09/14] [REFACTOR] Refactor test model and base_test --- informasi_fasilitas/base_test.py | 162 ------------------ .../{tests_models.py => test_models.py} | 6 +- 2 files changed, 5 insertions(+), 163 deletions(-) delete mode 100644 informasi_fasilitas/base_test.py rename informasi_fasilitas/{tests_models.py => test_models.py} (93%) diff --git a/informasi_fasilitas/base_test.py b/informasi_fasilitas/base_test.py deleted file mode 100644 index d0aefbc..0000000 --- a/informasi_fasilitas/base_test.py +++ /dev/null @@ -1,162 +0,0 @@ -import json -import tempfile -from http import HTTPStatus -from django.test import TestCase, Client -from django.db.utils import IntegrityError -from django.contrib.auth.models import User -from django.urls import reverse, path, include - -from registrasi.models import BisaGoUser -from .models import Lokasi, Fasilitas, Komentar, KURSI_RODA, RUNNING_TEXT, Likes, Dislikes -from .serializers import LokasiSerializer - -not_null_constraint_failed_message = 'NOT NULL constraint failed' - - -class InformasiFasilitasTest(TestCase): - default_username_email = "user_test@gmail.com" - default_last_name = "name" - default_password = "hahagotim" - default_lokasi_name = "Mall" - default_latitude = 0.0 - default_longitude = 0.0 - default_alamat = "Jl. Raya Bogor no.1 Jakarta" - default_no_telp = "08123456789" - default_image = tempfile.NamedTemporaryFile(suffix=".jpg").name - default_like = 0 - default_dislike = 0 - default_tag = [KURSI_RODA, RUNNING_TEXT] - default_rating = 3 - default_deskripsi = "penjelasan" - - user_post = {'name': 'name', - 'email': "self.user_post@gmail.com", - 'phone_number': 000000000, - 'password': "hahagotim"} - - lokasi_test_1 = {'name': 'Ma Homie', - 'latitude': 0.1, - 'longitude': 0.1, - 'alamat': 'Jl. Raya Bogor no.2, Jakarta', - 'no_telp': '081212123132', - } - - def create_user_test(self, username=default_username_email, - last_name=default_last_name, - password=default_password): - user_test = User(username=username, - last_name=last_name, - email=username, - password=password) - user_test.save() - return user_test - - def create_lokasi_test(self, name=default_lokasi_name, - latitude=default_latitude, - longitude=default_longitude, - alamat=default_alamat, - no_telp=default_no_telp, - image=default_image): - - lokasi_test = Lokasi(name=name, - latitude=latitude, - longitude=longitude, - alamat=alamat, - no_telp=no_telp, - image=image) - lokasi_test.save() - return lokasi_test - - def create_fasilitas_test(self, deskripsi=default_deskripsi, - like=default_like, - dislike=default_dislike, - rating=default_rating, - tag=default_tag, - image=default_image, - lokasi=None, - user=None): - if (user == None): - user = self.create_user_test() - if (lokasi == None): - lokasi = self.create_lokasi_test() - fasilitas_test = Fasilitas(lokasi=lokasi, - user=user, - deskripsi=deskripsi, - like=like, - dislike=dislike, - rating=rating, - tag=tag, - image=image) - fasilitas_test.save() - return fasilitas_test - - def create_komentar_test(self, deskripsi=default_deskripsi, - user=None, - fasilitas=None): - if (user == None): - user = self.create_user_test() - if (fasilitas == None): - lokasi = self.create_lokasi_test() - fasilitas = self.create_fasilitas_test(user=user, lokasi=lokasi) - komentar_test = Komentar(deskripsi=deskripsi, - user=user, - fasilitas=fasilitas) - komentar_test.save() - return komentar_test - - def create_likes_test(self, user=None, - fasilitas=None): - if (user == None): - user = self.create_user_test() - if (fasilitas == None): - lokasi = self.create_lokasi_test(user) - fasilitas = self.create_fasilitas_test(user=user, lokasi=lokasi) - like_test = Likes(user=user, - fasilitas=fasilitas) - like_test.save() - return like_test - - def create_dislikes_test(self, user=None, - fasilitas=None): - if (user == None): - user = self.create_user_test() - if (fasilitas == None): - lokasi = self.create_lokasi_test(user) - fasilitas = self.create_fasilitas_test(user=user, lokasi=lokasi) - dislike_test = Dislikes(user=user, - fasilitas=fasilitas) - dislike_test.save() - return dislike_test - - def client_user_token(self): - Client().post('/api/register/', self.user_post) - token_response = Client().post('/api-token-auth/', {'username': self.user_post["email"], - 'password': self.user_post["password"]}) - content = json.loads(token_response.content.decode('utf-8')) - token = content['token'] - client = Client(HTTP_AUTHORIZATION='token '+token) - return client - - -class InformasiFasilitasViewTest(InformasiFasilitasTest): - urlpatterns = [ - path('informasi-fasilitas/', include('informasi_fasilitas.urls')), - ] - - def setUp(self): - email = 'usersetup@gmail.com' - password = 'hahagotim' - Client().post('/api/register/', - {'name': 'name', - 'email': email, - 'phone_number': 1000000, - 'password': password}) - token_response = Client().post('/api-token-auth/', - {'username': email, - 'password': password}) - content = json.loads(token_response.content.decode('utf-8')) - token = content['token'] - client = Client(HTTP_AUTHORIZATION='token '+token) - - client.post(reverse('add-lokasi'), - self.lokasi_test_1) diff --git a/informasi_fasilitas/tests_models.py b/informasi_fasilitas/test_models.py similarity index 93% rename from informasi_fasilitas/tests_models.py rename to informasi_fasilitas/test_models.py index cbae9bc..bc2d700 100644 --- a/informasi_fasilitas/tests_models.py +++ b/informasi_fasilitas/test_models.py @@ -6,7 +6,7 @@ from django.db.utils import IntegrityError from django.contrib.auth.models import User from django.urls import reverse, path, include -from .base_test import InformasiFasilitasTest +from .test_base import InformasiFasilitasTest from .models import Lokasi, Fasilitas, Komentar, Likes, Dislikes from .serializers import LokasiSerializer @@ -25,6 +25,10 @@ class InformasiFasilitasModelTest(InformasiFasilitasTest): self.create_lokasi_test() count = Lokasi.objects.all().count() self.assertNotEqual(count, 0) + + def test_models_lokasi_string(self): + lokasi = self.create_lokasi_test() + self.assertEqual(str(lokasi), lokasi.name) def test_models_fasilitas_not_created(self): with self.assertRaises(IntegrityError) as err_message: -- GitLab From 635e9c889c6e52bfc3c17f3ee9cfa754656a3902 Mon Sep 17 00:00:00 2001 From: Bimo Iman Smartadi Date: Mon, 4 May 2020 00:05:06 +0700 Subject: [PATCH 10/14] [RED] Added test for komentar --- informasi_fasilitas/test_views_komentar.py | 65 ++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 informasi_fasilitas/test_views_komentar.py diff --git a/informasi_fasilitas/test_views_komentar.py b/informasi_fasilitas/test_views_komentar.py new file mode 100644 index 0000000..f017e97 --- /dev/null +++ b/informasi_fasilitas/test_views_komentar.py @@ -0,0 +1,65 @@ +import json +import tempfile +import copy +from django.utils.http import urlencode +from http import HTTPStatus +from datetime import datetime +from django.test import TestCase, Client +from django.db.utils import IntegrityError +from django.contrib.auth.models import User +from django.urls import reverse, path, include + +from .test_base import InformasiFasilitasViewTest +from .models import Lokasi, Fasilitas, Komentar, Likes, Dislikes +from .serializers import LokasiSerializer + + +class KomentarRelatedViewTest(InformasiFasilitasViewTest): + + def test_can_comment_facility(self): + client = self.client_user_token() + fasilitas = self.create_fasilitas_test() + urls = reverse('add-komentar', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + 'operation': "like" + }) + comment_data = {"deskripsi": "halo saya komen"} + client.post(urls, comment_data) + count = Komentar.objects.filter(fasilitas=fasilitas).count() + self.assertEqual(count, 1) + + def test_can_comment_facility_status_code(self): + client = self.client_user_token() + self.create_fasilitas_test() + urls = reverse('add-komentar', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + }) + comment_data = {"deskripsi": "halo saya komen"} + response = client.post(urls, comment_data) + self.assertEqual(response.status_code, HTTPStatus.CREATED) + + def test_not_comment_facility_empty(self): + client = self.client_user_token() + self.create_fasilitas_test() + urls = reverse('add-komentar', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + }) + comment_data = {} + response = client.post(urls, comment_data) + self.assertEqual(response.status_code, HTTPStatus.BAD_REQUEST) + + def test_not_comment_facility_empty_response(self): + client = self.client_user_token() + self.create_fasilitas_test() + urls = reverse('add-komentar', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + }) + comment_data = {} + response = client.post(urls, comment_data) + response_json = json.loads(response.content.decode('utf-8')) + expected_json = {"response": "bad request. deskripsi key is needed"} + self.assertEqual(expected_json, response_json) -- GitLab From e64171467fbc080c80f921f6b959bcb47c78fff3 Mon Sep 17 00:00:00 2001 From: Bimo Iman Smartadi Date: Mon, 4 May 2020 00:12:29 +0700 Subject: [PATCH 11/14] [RED] Updated test on test komentar and like dislike --- informasi_fasilitas/test_views_komentar.py | 3 +-- informasi_fasilitas/test_views_like_dislike.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/informasi_fasilitas/test_views_komentar.py b/informasi_fasilitas/test_views_komentar.py index f017e97..0b1fea3 100644 --- a/informasi_fasilitas/test_views_komentar.py +++ b/informasi_fasilitas/test_views_komentar.py @@ -22,7 +22,6 @@ class KomentarRelatedViewTest(InformasiFasilitasViewTest): urls = reverse('add-komentar', kwargs={'nama_lokasi': self.default_lokasi_name, 'id': 1, - 'operation': "like" }) comment_data = {"deskripsi": "halo saya komen"} client.post(urls, comment_data) @@ -61,5 +60,5 @@ class KomentarRelatedViewTest(InformasiFasilitasViewTest): comment_data = {} response = client.post(urls, comment_data) response_json = json.loads(response.content.decode('utf-8')) - expected_json = {"response": "bad request. deskripsi key is needed"} + expected_json = {"response": "Bad Request. 'deskripsi' key is needed"} self.assertEqual(expected_json, response_json) diff --git a/informasi_fasilitas/test_views_like_dislike.py b/informasi_fasilitas/test_views_like_dislike.py index cb332f5..ce1074b 100644 --- a/informasi_fasilitas/test_views_like_dislike.py +++ b/informasi_fasilitas/test_views_like_dislike.py @@ -62,7 +62,7 @@ class LikeDislikeRelatedViewTest(InformasiFasilitasViewTest): response = client.put(urls) response = client.put(urls) # like and like json_response = json.loads(response.content.decode("utf-8")) - expected_json = {"response" : "You have already disliked this facility"} + expected_json = {"response" : "You have already liked this facility"} self.assertEqual(json_response, expected_json) def test_like_like_facility_only_count_one(self): -- GitLab From ca0487b70b772d0c15951678f8897a79df3ab82e Mon Sep 17 00:00:00 2001 From: Bimo Iman Smartadi Date: Mon, 4 May 2020 00:13:22 +0700 Subject: [PATCH 12/14] [GREEN] Passed test --- informasi_fasilitas/urls.py | 2 +- informasi_fasilitas/views.py | 111 ++++++++++++++++++++--------------- 2 files changed, 66 insertions(+), 47 deletions(-) diff --git a/informasi_fasilitas/urls.py b/informasi_fasilitas/urls.py index 6de031c..2eb144d 100644 --- a/informasi_fasilitas/urls.py +++ b/informasi_fasilitas/urls.py @@ -9,7 +9,7 @@ urlpatterns = [ path('lokasi/add-fasilitas//', views.add_fasilitas, name='add-fasilitas'), path('lokasi/list-fasilitas//', views.list_fasilitas, name='list-fasilitas'), path('lokasi/detail-fasilitas///', views.detail_fasilitas, name='detail-fasilitas'), - path('lokasi/add-komentar//', views.add_komentar, name='add-komentar'), + path('lokasi/add-komentar///', views.add_komentar, name='add-komentar'), path('lokasi/list-komentar///', views.list_komentar, name='list-komentar'), path('lokasi/update-fasilitas///', views.update_fasilitas, name='update-fasilitas'), path('lokasi/like-fasilitas////', views.update_like_fasilitas, name='update-like-fasilitas'), diff --git a/informasi_fasilitas/views.py b/informasi_fasilitas/views.py index 4213ecc..4d1ea08 100644 --- a/informasi_fasilitas/views.py +++ b/informasi_fasilitas/views.py @@ -3,7 +3,7 @@ from datetime import datetime from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt from django.contrib.auth.models import User - +from django.core.exceptions import ObjectDoesNotExist from rest_framework import viewsets from rest_framework.decorators import api_view, permission_classes, authentication_classes @@ -13,8 +13,10 @@ from rest_framework.permissions import IsAuthenticated from .serializers import LokasiSerializer from .models import Lokasi, Fasilitas, Komentar, Likes, Dislikes + def missing_key_message(key): - return "bad request. {} key needed".format(key) + return "Bad Request. {} key is needed".format(key) + @csrf_exempt @api_view(['GET']) @@ -26,6 +28,7 @@ def lokasi_list(request): serializer = LokasiSerializer(lokasi_list, many=True) return JsonResponse(serializer.data, safe=False, status=HTTPStatus.OK) + @api_view(['GET']) @authentication_classes([]) @permission_classes([]) @@ -35,10 +38,9 @@ def lokasi_details(request, nama_lokasi): lokasi = Lokasi.objects.get(name=nama_lokasi) serializer = LokasiSerializer(lokasi) return JsonResponse(serializer.data, safe=False, status=HTTPStatus.OK) - except KeyError as missing_key: - return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) - except Exception: - return JsonResponse({'response':'lokasi not found'}, status=HTTPStatus.NOT_FOUND) + except ObjectDoesNotExist as err: + return JsonResponse({'response': str(err)}, status=HTTPStatus.NOT_FOUND) + @api_view(['POST']) @authentication_classes([TokenAuthentication]) @@ -53,8 +55,9 @@ def add_lokasi(request): return JsonResponse(serializer.data, status=HTTPStatus.CREATED) else: return JsonResponse(serializer.errors, status=HTTPStatus.BAD_REQUEST) - except KeyError as missing_key: - return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) + except Exception as err: + return JsonResponse({'response': str(err)}, status=HTTPStatus.NOT_FOUND) + @api_view(['PUT']) @authentication_classes([TokenAuthentication]) @@ -63,12 +66,13 @@ def update_lokasi_details(request, nama_lokasi): try: if request.method == 'PUT': lokasi = Lokasi.objects.get(name=nama_lokasi) - if 'no_telp' in request.data.keys(): - lokasi.no_telp = request.data['no_telp'] + lokasi.no_telp = request.data['no_telp'] lokasi.save() - return JsonResponse({'response' : "phone changed to {}".format(lokasi.no_telp)}, status=HTTPStatus.ACCEPTED) + return JsonResponse({'response': "phone changed to {}".format(lokasi.no_telp)}, + status=HTTPStatus.ACCEPTED) except KeyError as missing_key: - return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) + return JsonResponse({'response': missing_key_message(str(missing_key))}, + status=HTTPStatus.BAD_REQUEST) @api_view(['GET']) @@ -81,13 +85,18 @@ def list_fasilitas(request, nama_lokasi): list_fasilitas = Fasilitas.objects.filter(lokasi=lokasi) return_json = {} for fasilitas in list_fasilitas: + fasilitas.like = Likes.objects.filter( + fasilitas=fasilitas).count() + fasilitas.dislike = Dislikes.objects.filter( + fasilitas=fasilitas).count() return_json[fasilitas.id] = {} fasilitas_details = return_json[fasilitas.id] fasilitas_details["id"] = fasilitas.id fasilitas_details["nama_lokasi"] = fasilitas.lokasi.name fasilitas_details["deskripsi"] = fasilitas.deskripsi fasilitas_details["creator"] = fasilitas.user.last_name - fasilitas_details["date_time"] = fasilitas.date_time.strftime("%d-%m-%Y %H:%M:%S") + fasilitas_details["date_time"] = fasilitas.date_time.strftime( + "%d-%m-%Y %H:%M:%S") fasilitas_details["like"] = fasilitas.like fasilitas_details["dislike"] = fasilitas.dislike fasilitas_details["rating"] = fasilitas.rating @@ -95,11 +104,10 @@ def list_fasilitas(request, nama_lokasi): fasilitas_details["image"] = str(fasilitas.image) fasilitas_details["is_verified"] = fasilitas.is_verified return JsonResponse(return_json, status=HTTPStatus.OK) - except KeyError as missing_key: - return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) except Exception as error: return JsonResponse({'response': str(error)}, status=HTTPStatus.NOT_FOUND) + @api_view(['POST']) @authentication_classes([TokenAuthentication]) @permission_classes([IsAuthenticated]) @@ -120,12 +128,15 @@ def add_fasilitas(request, nama_lokasi): rating=rating, tag=tag, image=image) - return JsonResponse({'response' : 'fasilitas added', 'id':fasilitas.id}, status=HTTPStatus.CREATED) + return JsonResponse({'response': 'fasilitas added', 'id': fasilitas.id}, + status=HTTPStatus.CREATED) except KeyError as missing_key: - return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) + return JsonResponse({'response': missing_key_message(str(missing_key))}, + status=HTTPStatus.BAD_REQUEST) except Exception as error: return JsonResponse({'response': str(error)}, status=HTTPStatus.NOT_FOUND) + @api_view(['GET']) @authentication_classes([]) @permission_classes([]) @@ -136,24 +147,27 @@ def detail_fasilitas(request, nama_lokasi, id): fasilitas = Fasilitas.objects.get(lokasi=lokasi, id=id) user = fasilitas.user fasilitas.like = Likes.objects.filter(fasilitas=fasilitas).count() - fasilitas.dislike = Dislikes.objects.filter(fasilitas=fasilitas).count() + fasilitas.dislike = Dislikes.objects.filter( + fasilitas=fasilitas).count() return_json = {"nama_lokasi": lokasi.name, - "deskripsi":fasilitas.deskripsi, - "creator":user.last_name, + "deskripsi": fasilitas.deskripsi, + "creator": user.last_name, "creator_email": user.email, - "date_time":fasilitas.date_time, - "like":fasilitas.like, - "dislike":fasilitas.dislike, - "rating":fasilitas.rating, - "tag":fasilitas.tag, - "image":str(fasilitas.image), - "is_verified":fasilitas.is_verified} + "date_time": fasilitas.date_time, + "like": fasilitas.like, + "dislike": fasilitas.dislike, + "rating": fasilitas.rating, + "tag": fasilitas.tag, + "image": str(fasilitas.image), + "is_verified": fasilitas.is_verified} return JsonResponse(return_json, status=HTTPStatus.OK) except KeyError as missing_key: - return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) + return JsonResponse({'response': missing_key_message(str(missing_key))}, + status=HTTPStatus.BAD_REQUEST) except Exception as error: return JsonResponse({'response': str(error)}, status=HTTPStatus.NOT_FOUND) + @api_view(['PUT']) @authentication_classes([TokenAuthentication]) @permission_classes([IsAuthenticated]) @@ -173,13 +187,17 @@ def update_fasilitas(request, nama_lokasi, id): fasilitas.deskripsi = desc fasilitas.tag = tag fasilitas.save() - return JsonResponse({'response' : '{} in fasilitas edited'.format(str(request.data.keys())),}, status=HTTPStatus.ACCEPTED) - return JsonResponse({'response' : 'Authentication failed'}, status=HTTPStatus.UNAUTHORIZED) + return JsonResponse({'response': '{} in fasilitas edited'.format(str(request.data.keys())), }, + status=HTTPStatus.ACCEPTED) + return JsonResponse({'response': 'Authentication failed'}, + status=HTTPStatus.UNAUTHORIZED) except KeyError as missing_key: - return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) + return JsonResponse({'response': missing_key_message(str(missing_key))}, + status=HTTPStatus.BAD_REQUEST) except Exception as error: return JsonResponse({'response': str(error)}, status=HTTPStatus.NOT_FOUND) + @api_view(['PUT']) @authentication_classes([TokenAuthentication]) @permission_classes([IsAuthenticated]) @@ -200,45 +218,46 @@ def update_like_fasilitas(request, nama_lokasi, id, operation): dislike = None if operation == "like": if like != None: - return JsonResponse({'response': "you've already liked this facility"}) + return JsonResponse({'response': "You have already liked this facility"}, status=HTTPStatus.NOT_ACCEPTABLE) else: Likes.objects.create(fasilitas=fasilitas, user=user) if dislike != None: dislike.delete() elif operation == "dislike": if dislike != None: - return JsonResponse({'response': "you've already disliked this facility"}) + return JsonResponse({'response': "You have already disliked this facility"}, status=HTTPStatus.NOT_ACCEPTABLE) else: Dislikes.objects.create(fasilitas=fasilitas, user=user) if like != None: like.delete() fasilitas.like = Likes.objects.filter(fasilitas=fasilitas).count() - fasilitas.dislike = Dislikes.objects.filter(fasilitas=fasilitas).count() - return JsonResponse({'response': "you've successfuly {}d this facility".format(operation)}, status=HTTPStatus.CREATED) + fasilitas.dislike = Dislikes.objects.filter( + fasilitas=fasilitas).count() + return JsonResponse({'response': "You have successfuly {}d this facility".format(operation)}, status=HTTPStatus.CREATED) except KeyError as missing_key: return JsonResponse({'response': missing_key_message(str(missing_key))}, status=HTTPStatus.BAD_REQUEST) except Exception as error: return JsonResponse({'response': str(error)}, status=HTTPStatus.NOT_FOUND) - + @api_view(['POST']) @authentication_classes([TokenAuthentication]) @permission_classes([IsAuthenticated]) -def add_komentar(request, nama_lokasi): +def add_komentar(request, nama_lokasi, id): try: if request.method == 'POST': - lokasi = Lokasi.objects.get(name = nama_lokasi) + lokasi = Lokasi.objects.get(name=nama_lokasi) fasilitas = Fasilitas.objects.get(lokasi=lokasi, id=id) user = User.objects.get(email=str(request.user)) deskripsi = request.POST['deskripsi'] komentar = Komentar.objects.create(fasilitas=fasilitas, - user=user, - deskripsi=deskripsi) - return JsonResponse({'response' : 'komentar added', 'id':komentar.id}, status = 201) + user=user, + deskripsi=deskripsi) + return JsonResponse({'response': 'komentar added', 'id': komentar.id}, status=HTTPStatus.CREATED) except KeyError as e: - return JsonResponse({'response': missing_key_message(str(e))}, status = 500) + return JsonResponse({'response': missing_key_message(str(e))}, status=HTTPStatus.BAD_REQUEST) except Exception as e: - return JsonResponse({'response': str(e)}, status = 404) + return JsonResponse({'response': str(e)}, status=HTTPStatus.NOT_FOUND) @api_view(['GET']) @@ -258,8 +277,8 @@ def list_komentar(request, nama_lokasi, id): komentar_details["deskripsi"] = komentar.deskripsi komentar_details["creator"] = komentar.user.last_name komentar_details["date_time"] = komentar.date_time - return JsonResponse(return_json, status = 200) + return JsonResponse(return_json, status=200) except KeyError as e: - return JsonResponse({'response': missing_key_message(str(e))}, status = 500) + return JsonResponse({'response': missing_key_message(str(e))}, status=500) except Exception as e: - return JsonResponse({'response': str(e)}, status = 404) + return JsonResponse({'response': str(e)}, status=404) -- GitLab From 4b752b0f158e542e9cae131a539743646da0a21e Mon Sep 17 00:00:00 2001 From: Bimo Iman Smartadi Date: Mon, 4 May 2020 00:16:35 +0700 Subject: [PATCH 13/14] [REFACTOR] Fixed code formatting on commited file --- coverage.xml | 185 ------------------ informasi_fasilitas/test_base.py | 3 +- informasi_fasilitas/test_models.py | 3 +- informasi_fasilitas/test_views_fasilitas.py | 1 - .../test_views_like_dislike.py | 11 +- informasi_fasilitas/test_views_lokasi.py | 3 +- informasi_fasilitas/urls.py | 37 +++- 7 files changed, 37 insertions(+), 206 deletions(-) delete mode 100644 coverage.xml diff --git a/coverage.xml b/coverage.xml deleted file mode 100644 index 7dacca4..0000000 --- a/coverage.xml +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - D:\Arato\Documents\unistuff\class\ppl\poipole-dtb-beasiswa-miskin-dan-disabilitas - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/informasi_fasilitas/test_base.py b/informasi_fasilitas/test_base.py index 7201882..f46732d 100644 --- a/informasi_fasilitas/test_base.py +++ b/informasi_fasilitas/test_base.py @@ -136,7 +136,7 @@ class InformasiFasilitasTest(TestCase): token = content['token'] client = Client(HTTP_AUTHORIZATION='token '+token) return client - + def client_user_token2(self): Client().post('/api/register/', self.user_post) token_response = Client().post('/api-token-auth/', {'username': self.default_username_email, @@ -145,7 +145,6 @@ class InformasiFasilitasTest(TestCase): token = content['token'] client = Client(HTTP_AUTHORIZATION='token '+token) return client - class InformasiFasilitasViewTest(InformasiFasilitasTest): diff --git a/informasi_fasilitas/test_models.py b/informasi_fasilitas/test_models.py index bc2d700..df72c82 100644 --- a/informasi_fasilitas/test_models.py +++ b/informasi_fasilitas/test_models.py @@ -12,6 +12,7 @@ from .serializers import LokasiSerializer NOT_NULL_CONSTRAINT_FAILED_MESSAGE = 'NOT NULL constraint failed' + class InformasiFasilitasModelTest(InformasiFasilitasTest): def test_models_lokasi_not_created(self): @@ -25,7 +26,7 @@ class InformasiFasilitasModelTest(InformasiFasilitasTest): self.create_lokasi_test() count = Lokasi.objects.all().count() self.assertNotEqual(count, 0) - + def test_models_lokasi_string(self): lokasi = self.create_lokasi_test() self.assertEqual(str(lokasi), lokasi.name) diff --git a/informasi_fasilitas/test_views_fasilitas.py b/informasi_fasilitas/test_views_fasilitas.py index b0ba13d..efb2f37 100644 --- a/informasi_fasilitas/test_views_fasilitas.py +++ b/informasi_fasilitas/test_views_fasilitas.py @@ -113,7 +113,6 @@ class FasilitasRelatedViewTest(InformasiFasilitasViewTest): 'tag': 'KR RT'}) self.assertEqual(response.status_code, HTTPStatus.UNAUTHORIZED) - def test_put_update_detail_fasilitas_success(self): client = self.client_user_token() self.create_lokasi_test() diff --git a/informasi_fasilitas/test_views_like_dislike.py b/informasi_fasilitas/test_views_like_dislike.py index ce1074b..1354098 100644 --- a/informasi_fasilitas/test_views_like_dislike.py +++ b/informasi_fasilitas/test_views_like_dislike.py @@ -38,7 +38,7 @@ class LikeDislikeRelatedViewTest(InformasiFasilitasViewTest): }) response = client.put(urls) self.assertEqual(response.status_code, HTTPStatus.CREATED) - + def test_like_like_facility_status_code(self): client = self.client_user_token() self.create_fasilitas_test() @@ -62,9 +62,9 @@ class LikeDislikeRelatedViewTest(InformasiFasilitasViewTest): response = client.put(urls) response = client.put(urls) # like and like json_response = json.loads(response.content.decode("utf-8")) - expected_json = {"response" : "You have already liked this facility"} + expected_json = {"response": "You have already liked this facility"} self.assertEqual(json_response, expected_json) - + def test_like_like_facility_only_count_one(self): client = self.client_user_token() fasilitas = self.create_fasilitas_test() @@ -78,7 +78,6 @@ class LikeDislikeRelatedViewTest(InformasiFasilitasViewTest): count = Likes.objects.filter(fasilitas=fasilitas).count() self.assertEqual(count, 1) - def test_can_dislike_facility(self): client = self.client_user_token() fasilitas = self.create_fasilitas_test() @@ -125,9 +124,9 @@ class LikeDislikeRelatedViewTest(InformasiFasilitasViewTest): response = client.put(urls) response = client.put(urls) # Dislike and dislike json_response = json.loads(response.content.decode("utf-8")) - expected_json = {"response" : "You have already disliked this facility"} + expected_json = {"response": "You have already disliked this facility"} self.assertEqual(json_response, expected_json) - + def test_dislike_dislike_facility_only_count_one(self): client = self.client_user_token() fasilitas = self.create_fasilitas_test() diff --git a/informasi_fasilitas/test_views_lokasi.py b/informasi_fasilitas/test_views_lokasi.py index e9758e7..0eb1ffd 100644 --- a/informasi_fasilitas/test_views_lokasi.py +++ b/informasi_fasilitas/test_views_lokasi.py @@ -87,7 +87,7 @@ class LokasiRelatedViewTest(InformasiFasilitasViewTest): client = self.client_user_token() response = client.post(reverse('add-lokasi'), test_lokasi) self.assertEqual(response.status_code, HTTPStatus.BAD_REQUEST) - + def test_post_add_lokasi_missing_key_return_message(self): test_lokasi = copy.deepcopy(self.lokasi_test_1) del test_lokasi["name"] @@ -96,7 +96,6 @@ class LokasiRelatedViewTest(InformasiFasilitasViewTest): response_json = json.loads(response.content.decode('utf-8')) expected_json = {"name": ["This field is required."]} self.assertEqual(response_json, expected_json) - def test_can_post_add_lokasi_json(self): client = self.client_user_token() diff --git a/informasi_fasilitas/urls.py b/informasi_fasilitas/urls.py index 2eb144d..4a79490 100644 --- a/informasi_fasilitas/urls.py +++ b/informasi_fasilitas/urls.py @@ -3,14 +3,33 @@ from . import views urlpatterns = [ path('lokasi/list/', views.lokasi_list, name='lokasi-list'), - path('lokasi/detail//', views.lokasi_details, name='lokasi-details'), - path('lokasi/update-detail//', views.update_lokasi_details, name='update-lokasi'), + + path('lokasi/detail//', + views.lokasi_details, name='lokasi-details'), + + path('lokasi/update-detail//', + views.update_lokasi_details, name='update-lokasi'), + path('lokasi/add/', views.add_lokasi, name='add-lokasi'), - path('lokasi/add-fasilitas//', views.add_fasilitas, name='add-fasilitas'), - path('lokasi/list-fasilitas//', views.list_fasilitas, name='list-fasilitas'), - path('lokasi/detail-fasilitas///', views.detail_fasilitas, name='detail-fasilitas'), - path('lokasi/add-komentar///', views.add_komentar, name='add-komentar'), - path('lokasi/list-komentar///', views.list_komentar, name='list-komentar'), - path('lokasi/update-fasilitas///', views.update_fasilitas, name='update-fasilitas'), - path('lokasi/like-fasilitas////', views.update_like_fasilitas, name='update-like-fasilitas'), + + path('lokasi/add-fasilitas//', + views.add_fasilitas, name='add-fasilitas'), + + path('lokasi/list-fasilitas//', + views.list_fasilitas, name='list-fasilitas'), + + path('lokasi/detail-fasilitas///', + views.detail_fasilitas, name='detail-fasilitas'), + + path('lokasi/add-komentar///', + views.add_komentar, name='add-komentar'), + + path('lokasi/list-komentar///', + views.list_komentar, name='list-komentar'), + + path('lokasi/update-fasilitas///', + views.update_fasilitas, name='update-fasilitas'), + + path('lokasi/like-fasilitas////', + views.update_like_fasilitas, name='update-like-fasilitas'), ] -- GitLab From 85eab5ae545bcf21ccaa63e19ebce91a411635ba Mon Sep 17 00:00:00 2001 From: Bimo Iman Smartadi Date: Mon, 4 May 2020 00:35:27 +0700 Subject: [PATCH 14/14] [GREEN] Added more test that is already passed on like dislike --- informasi_fasilitas/test_views_fasilitas.py | 5 ++- informasi_fasilitas/test_views_komentar.py | 16 ++++++++ .../test_views_like_dislike.py | 39 +++++++++++++++++++ 3 files changed, 58 insertions(+), 2 deletions(-) diff --git a/informasi_fasilitas/test_views_fasilitas.py b/informasi_fasilitas/test_views_fasilitas.py index efb2f37..b4be413 100644 --- a/informasi_fasilitas/test_views_fasilitas.py +++ b/informasi_fasilitas/test_views_fasilitas.py @@ -70,8 +70,9 @@ class FasilitasRelatedViewTest(InformasiFasilitasViewTest): def test_cannot_post_detail_fasilitas(self): fasilitas = self.create_fasilitas_test() - response = Client().post(reverse('detail-fasilitas', kwargs={'nama_lokasi': self.default_lokasi_name, - 'id': fasilitas.id})) + response = Client().post(reverse('detail-fasilitas', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': fasilitas.id})) self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED) def test_get_detail_fasilitas_not_found(self): diff --git a/informasi_fasilitas/test_views_komentar.py b/informasi_fasilitas/test_views_komentar.py index 0b1fea3..774b184 100644 --- a/informasi_fasilitas/test_views_komentar.py +++ b/informasi_fasilitas/test_views_komentar.py @@ -62,3 +62,19 @@ class KomentarRelatedViewTest(InformasiFasilitasViewTest): response_json = json.loads(response.content.decode('utf-8')) expected_json = {"response": "Bad Request. 'deskripsi' key is needed"} self.assertEqual(expected_json, response_json) + + def test_get_list_komentar(self): + client = self.client_user_token() + self.create_fasilitas_test() + urls = reverse('add-komentar', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + }) + comment_data = {"deskripsi": "halo saya komen"} + client.post(urls, comment_data) + urls_get = reverse('list-komentar', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + }) + response = client.get(urls_get) + self.assertEqual(response.status_code, HTTPStatus.OK) diff --git a/informasi_fasilitas/test_views_like_dislike.py b/informasi_fasilitas/test_views_like_dislike.py index 1354098..567c8ff 100644 --- a/informasi_fasilitas/test_views_like_dislike.py +++ b/informasi_fasilitas/test_views_like_dislike.py @@ -78,6 +78,25 @@ class LikeDislikeRelatedViewTest(InformasiFasilitasViewTest): count = Likes.objects.filter(fasilitas=fasilitas).count() self.assertEqual(count, 1) + def test_like_dislike_facility_count_like(self): + client = self.client_user_token() + fasilitas = self.create_fasilitas_test() + urls_like = reverse('update-like-fasilitas', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + 'operation': "like" + }) + urls_dislike = reverse('update-like-fasilitas', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + 'operation': "dislike" + }) + client.put(urls_like) + + client.put(urls_dislike) # like and dislike + count = Likes.objects.filter(fasilitas=fasilitas).count() + self.assertEqual(count, 0) + def test_can_dislike_facility(self): client = self.client_user_token() fasilitas = self.create_fasilitas_test() @@ -139,3 +158,23 @@ class LikeDislikeRelatedViewTest(InformasiFasilitasViewTest): client.put(urls) # Dislike and dislike count = Dislikes.objects.filter(fasilitas=fasilitas).count() self.assertEqual(count, 1) + + def test_dislike_like_facility_count_dislike(self): + client = self.client_user_token() + fasilitas = self.create_fasilitas_test() + urls_like = reverse('update-like-fasilitas', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + 'operation': "like" + }) + urls_dislike = reverse('update-like-fasilitas', + kwargs={'nama_lokasi': self.default_lokasi_name, + 'id': 1, + 'operation': "dislike" + }) + + client.put(urls_dislike) + client.put(urls_like) + + count = Dislikes.objects.filter(fasilitas=fasilitas).count() + self.assertEqual(count, 0) -- GitLab