From 84009dcca0e3d8d0836817c2e133196c6ec5a40f Mon Sep 17 00:00:00 2001 From: Ahmad Fauzan Amirul Isnain <ahmad.fauzan71@ui.ac.id> Date: Sat, 31 Oct 2020 14:02:25 +0700 Subject: [PATCH] [#130] QA: Fix Code Smells Detected by Sonarqube --- administration/choices.py | 2 +- administration/forms.py | 19 ++++++----- .../administration/data_statistik.html | 16 +-------- .../templates/kelola_kontributor.html | 2 +- administration/templates/laporan_materi.html | 2 +- .../templates/setting_verifikasi.html | 25 +------------- administration/templates/verif.html | 2 +- administration/views.py | 34 ++++++++++--------- app/forms.py | 1 - app/management/commands/generatedummy.py | 9 ++--- register/templates/index.html | 8 ----- register/templates/index_umum.html | 7 ---- register/tests.py | 6 ++-- register/urls.py | 2 +- register/views.py | 6 ++-- 15 files changed, 45 insertions(+), 96 deletions(-) diff --git a/administration/choices.py b/administration/choices.py index b4b3527..5b87902 100644 --- a/administration/choices.py +++ b/administration/choices.py @@ -18,7 +18,7 @@ BASE_PERIODE = [ ] -def genereatePeriodeChoices(): +def generate_periode_choices(): periode = BASE_PERIODE now = timezone.now() # Month diff --git a/administration/forms.py b/administration/forms.py index 3c350d4..3d6c08f 100644 --- a/administration/forms.py +++ b/administration/forms.py @@ -3,7 +3,7 @@ from crispy_forms.layout import Layout, Submit, Row, Column, Reset, ButtonHolder from crispy_forms.bootstrap import InlineCheckboxes from django import forms -from administration.choices import genereatePeriodeChoices +from administration.choices import generate_periode_choices from administration.models import VerificationSetting from app.models import Category from authentication.models import User @@ -88,7 +88,7 @@ class RegistrasiAdminForm(forms.ModelForm): class PeriodForm(forms.Form): period = forms.ChoiceField( - choices=genereatePeriodeChoices(), label="Periode", required=False) + choices=generate_periode_choices(), label="Periode", required=False) start_date = forms.DateField( widget=DateInput, label="Waktu mulai", required=False) end_date = forms.DateField( @@ -102,14 +102,16 @@ class PeriodForm(forms.Form): for field_name, field in self.fields.items(): field.widget.attrs['class'] = 'form-control' + period_css_class = 'form-group col-md-4 mb-0' + self.helper = FormHelper() self.helper.attrs["name"] = "filter-form" self.helper.form_method = 'get' self.helper.layout = Layout( Row( - Column('period', css_class='form-group col-md-4 mb-0'), - Column('start_date', css_class='form-group col-md-4 mb-0'), - Column('end_date', css_class='form-group col-md-4 mb-0'), + Column('period', css_class=period_css_class), + Column('start_date', css_class=period_css_class), + Column('end_date', css_class=period_css_class), css_class='form-row' ), InlineCheckboxes('categories'), @@ -130,10 +132,9 @@ class PeriodForm(forms.Form): if start_date is None and end_date is not None: self.add_error("start_date", "masukan waktu mulai") - if start_date is not None and end_date is not None: - if start_date > end_date: - self.add_error("end_date", - "waktu selesai sebelum waktu mulai") + if start_date is not None and end_date is not None and start_date > end_date: + self.add_error("end_date", + "waktu selesai sebelum waktu mulai") class EditAdminStatusForm(forms.ModelForm): diff --git a/administration/templates/administration/data_statistik.html b/administration/templates/administration/data_statistik.html index 17df725..6550ab0 100644 --- a/administration/templates/administration/data_statistik.html +++ b/administration/templates/administration/data_statistik.html @@ -97,20 +97,6 @@ <!-- Card Header - Dropdown --> <div class="card-header py-3 d-flex flex-row align-items-center justify-content-between"> <h6 class="m-0 font-weight-bold text-primary">Statistik</h6> - <!-- <div class="dropdown no-arrow"> - <a class="dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" - aria-haspopup="true" aria-expanded="false"> - <em class="fas fa-ellipsis-v fa-sm fa-fw text-gray-400"></em> - </a> - <div class="dropdown-menu dropdown-menu-right shadow animated--fade-in" - aria-labelledby="dropdownMenuLink"> - <div class="dropdown-header">Dropdown Header:</div> - <a class="dropdown-item" href="#">Action</a> - <a class="dropdown-item" href="#">Another action</a> - <div class="dropdown-divider"></div> - <a class="dropdown-item" href="#">Something else here</a> - </div> - </div> --> </div> <!-- Card Body --> <div class="card-body" style="overflow:auto!important; display:inline-block!important; height: 750px;"> @@ -128,7 +114,7 @@ </div> <div class="card-body"> <div class="table-responsive"> - <table class="table table-bordered" id="dataTableRiwayat" width="100%" cellspacing="0" + <table class="table table-bordered" id="dataTableRiwayat" aria-describedby="titleTabelRiwayat"> <thead> <tr> diff --git a/administration/templates/kelola_kontributor.html b/administration/templates/kelola_kontributor.html index 9fee87a..2732d03 100644 --- a/administration/templates/kelola_kontributor.html +++ b/administration/templates/kelola_kontributor.html @@ -17,7 +17,7 @@ </div> <div class="card-body"> <div class="table-responsive"> - <table aria-describedby="table-description" class="table table-bordered" id="dataTable" width="100%" cellspacing="0"> + <table aria-describedby="table-description" class="table table-bordered" id="dataTable"> <thead> <tr> <th scope="col">Nama</th> diff --git a/administration/templates/laporan_materi.html b/administration/templates/laporan_materi.html index 33e4898..25849b3 100644 --- a/administration/templates/laporan_materi.html +++ b/administration/templates/laporan_materi.html @@ -21,7 +21,7 @@ </div> <div class="card-body"> <div class="table-responsive"> - <table class="table table-bordered" id="dataTable" width="100%" cellspacing="0"> + <table class="table table-bordered" id="dataTable"> <thead> <tr> <th scope="col">Judul</th> diff --git a/administration/templates/setting_verifikasi.html b/administration/templates/setting_verifikasi.html index 754365b..8e39eb3 100644 --- a/administration/templates/setting_verifikasi.html +++ b/administration/templates/setting_verifikasi.html @@ -186,7 +186,7 @@ </div> <div class="card-body"> <div class="table-responsive"> - <table aria-describedby="table-description" class="table table-bordered" id="dataTable" width="100%" cellspacing="0"> + <table aria-describedby="table-description" class="table table-bordered" id="dataTable"> <thead> <tr> <th scope="col">Judul Verifikasi</th> @@ -235,29 +235,6 @@ <em class="fas fa-angle-up"></em> </a> - <!-- <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" - integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" - crossorigin="anonymous"></script> - <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" - integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" - crossorigin="anonymous"></script> - <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" - integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" - crossorigin="anonymous"></script> - - - <script src="https://code.jquery.com/jquery-3.5.0.min.js" - integrity="sha256-xNzN2a4ltkB44Mc/Jz3pT4iU1cmeR0FkXs4pru/JxaQ=" crossorigin="anonymous"></script> - - - <script src="{% static 'js/sb-admin-2.min.js' %}"></script> - - <script src="{% static 'vendor/datatables/jquery.dataTables.min.js' %}"></script> - <script src="{% static 'vendor/datatables/dataTables.bootstrap4.min.js' %}"></script> - - - <script src="{% static 'js/demo/datatables-demo.js' %}"></script> --> - </body> </html> \ No newline at end of file diff --git a/administration/templates/verif.html b/administration/templates/verif.html index ebbbd1d..6b1a668 100644 --- a/administration/templates/verif.html +++ b/administration/templates/verif.html @@ -61,7 +61,7 @@ </div> <div class="card-body"> <div class="table-responsive"> - <table class="table table-bordered" id="dataTableRiwayat" width="100%" cellspacing="0" aria-describedby="titleTabelRiwayat"> + <table class="table table-bordered" id="dataTableRiwayat" aria-describedby="titleTabelRiwayat"> <thead> <tr> <th scope="col">Judul Materi</th> diff --git a/administration/views.py b/administration/views.py index 65519de..43a42b8 100644 --- a/administration/views.py +++ b/administration/views.py @@ -19,6 +19,8 @@ from django.core import management ADMINISTRATION_MANAGEMENT = "/administration/kelola-admin/" ADMINISTRATION_REPORT = "/administration/laporan-materi/" +ADMINISTRATION_VERIFICATION_SETTING = "/administration/setting/verification/" +ADMINISTRATION_CATEGORY_SETTING = "/administration/setting/category/" class VerificationView(TemplateView): @@ -115,7 +117,7 @@ class VerificationSettingView(TemplateView): form = VerificationSettingForm(request.POST) if form.is_valid(): form.save() - return HttpResponseRedirect("/administration/setting/verification/") + return HttpResponseRedirect(ADMINISTRATION_VERIFICATION_SETTING) else: context = self.get_context_data(**kwargs) context["form"] = form @@ -146,7 +148,7 @@ class CategorySettingView(TemplateView): form = CategoryForm(request.POST) if form.is_valid(): form.save() - return HttpResponseRedirect("/administration/setting/category/") + return HttpResponseRedirect(ADMINISTRATION_CATEGORY_SETTING) else: context = self.get_context_data(**kwargs) context["form"] = form @@ -351,7 +353,7 @@ class EditVerificationView(TemplateView): request.POST, instance=verification_object) if form.is_valid(): form.save() - return HttpResponseRedirect("/administration/setting/verification/") + return HttpResponseRedirect(ADMINISTRATION_VERIFICATION_SETTING) else: context = self.get_context_data(**kwargs) context["form"] = form @@ -383,7 +385,7 @@ class EditCategoryView(TemplateView): request.POST, instance=category_object) if form.is_valid(): form.save() - return HttpResponseRedirect("/administration/setting/category/") + return HttpResponseRedirect(ADMINISTRATION_CATEGORY_SETTING) else: context = self.get_context_data(**kwargs) context["form"] = form @@ -483,15 +485,15 @@ def delete_contributor(request, *args, **kwargs): def delete_verification(request, *args, **kwargs): if not request.user.is_authenticated or not request.user.is_admin: raise PermissionDenied(request) - queryObject = get_object_or_404(VerificationSetting, + query_object = get_object_or_404(VerificationSetting, pk=kwargs["pk_verification"]) - queryObject.archived = True - queryObject.description = "Telah dihapus pada " + \ + query_object.archived = True + query_object.description = "Telah dihapus pada " + \ str(timezone.now().strftime("%m/%d/%Y, %H:%M:%S")) + " WIB" - queryObject.archived_by = request.user - queryObject.save() + query_object.archived_by = request.user + query_object.save() messages.success(request, "Point verifikasi berhasil dihapus") - return HttpResponseRedirect("/administration/setting/verification/") + return HttpResponseRedirect(ADMINISTRATION_VERIFICATION_SETTING) def delete_category(request, *args, **kwargs): @@ -499,16 +501,16 @@ def delete_category(request, *args, **kwargs): raise PermissionDenied(request) category_name = get_object_or_404(Category, pk=kwargs["pk_category"]).name - queryObject = get_object_or_404(Category, + query_object = get_object_or_404(Category, pk=kwargs["pk_category"]) - queryObject.archived = True - queryObject.description = "Telah dihapus pada " + \ + query_object.archived = True + query_object.description = "Telah dihapus pada " + \ str(timezone.now().strftime("%m/%d/%Y, %H:%M:%S")) + " WIB" - queryObject.archived_by = request.user - queryObject.save() + query_object.archived_by = request.user + query_object.save() messages.success(request, "Kategori " + category_name + " berhasil dihapus") - return HttpResponseRedirect("/administration/setting/category/") + return HttpResponseRedirect(ADMINISTRATION_CATEGORY_SETTING) def generatedummy(request): if request.user.is_authenticated is False or request.user.is_admin is False: diff --git a/app/forms.py b/app/forms.py index 5b8b343..266720e 100644 --- a/app/forms.py +++ b/app/forms.py @@ -10,7 +10,6 @@ def year_choices(): class UploadMateriForm(forms.ModelForm): categories = forms.ModelMultipleChoiceField(queryset=Category.objects.all(),widget=forms.CheckboxSelectMultiple(attrs={'style' : 'column-count:2'}),required=True) - #categories.widget.attrs["style"] = "column-count:2" release_year = forms.TypedChoiceField(coerce=int, choices=year_choices, initial=datetime.date.today().year) yt_video_id = forms.CharField(label="Youtube Video Id", \ help_text="This is not required.<br>\ diff --git a/app/management/commands/generatedummy.py b/app/management/commands/generatedummy.py index 3137d03..4cd4af4 100644 --- a/app/management/commands/generatedummy.py +++ b/app/management/commands/generatedummy.py @@ -24,7 +24,7 @@ class Command(BaseCommand): counter = 0 category_name = f"Kategori dummy {counter}" dummy_category = [] - for i in range(num_of_category): + for _ in range(num_of_category): while (Category.objects.filter(name=category_name).exists()): counter += 1 category_name = f"Kategori dummy {counter}" @@ -38,7 +38,7 @@ class Command(BaseCommand): counter = 0 criterion_name = f"Kriteria dummy {counter}" dummy_criteria = [] - for i in range(num_of_criteria): + for _ in range(num_of_criteria): while (VerificationSetting.objects.filter(title=criterion_name).exists()): counter += 1 criterion_name = f"Kriteria dummy {counter}" @@ -67,8 +67,7 @@ class Command(BaseCommand): counter = 0 dummy_user = [] email = f"admin-dummy-{counter}@email.com" - end_date = timezone.now() - for i in range(num_of_user): + for _ in range(num_of_user): while (User.objects.filter(email=email).exists()): counter += 1 email = f"admin-dummy-{counter}@email.com" @@ -140,8 +139,6 @@ class Command(BaseCommand): verif_report = VerificationReport( report=report_field, materi=materi, user=admin, status=materi.get_status_display(), timestamp=timestamp) verif_report.save() - else: - pass return materi diff --git a/register/templates/index.html b/register/templates/index.html index 59038d6..3870a89 100644 --- a/register/templates/index.html +++ b/register/templates/index.html @@ -42,53 +42,45 @@ Registrasi Kontributor </div> <div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz"> - <!-- <input class="input100" type="text" name="nama"> --> {{ form.name }} <span class="focus-input100"></span> <span class="label-input100">Nama</span> </div> <div class="wrap-input100 validate-input" data-validate="Password is required"> - <!-- <input class="input100" type="text" name="pekerjaan"> --> {{ form.instansi }} <span class="focus-input100"></span> <span class="label-input100">Instansi/Pekerjaan</span> </div> <div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz"> - <!-- <input class="input100" type="text" name="nama"> --> {{ form.nik.errors }} {{ form.nik }} <span class="focus-input100"></span> <span class="label-input100">NIK</span> </div> <div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz"> - <!-- <input class="input100" type="text" name="nama"> --> {{ form.alamat }} <span class="focus-input100"></span> <span class="label-input100">Alamat</span> </div> <div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz"> - <!-- <input class="input100" type="text" name="nama"> --> {{ form.email.errors }} {{ form.email }} <span class="focus-input100"></span> <span class="label-input100">Email</span> </div> <div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz"> - <!-- <input class="input100" type="text" name="nama"> --> {{ form.nomor_telpon.errors}} {{ form.nomor_telpon }} <span class="focus-input100"></span> <span class="label-input100">Nomor Telepon</span> </div> <div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz"> - <!-- <input class="input100" type="text" name="nama"> --> {{ form.password.errors }} {{ form.password }} <span class="focus-input100"></span> <span class="label-input100">Kata Sandi</span> </div> <div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz"> - <!-- <input class="input100" type="text" name="nama"> --> {{ form.password2 }} <span class="focus-input100"></span> <span class="label-input100">Ketik Ulang Kata Sandi</span> diff --git a/register/templates/index_umum.html b/register/templates/index_umum.html index 792c676..1c00bac 100644 --- a/register/templates/index_umum.html +++ b/register/templates/index_umum.html @@ -42,7 +42,6 @@ Registrasi Umum </div> <div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz"> - <!-- <input class="input100" type="text" name="nama"> --> {{ form.name }} <span class="focus-input100"></span> <span class="label-input100">Nama</span> @@ -54,41 +53,35 @@ <span class="label-input100">Instansi/Pekerjaan</span> </div> <div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz"> - <!-- <input class="input100" type="text" name="nama"> --> {{ form.nik.errors }} {{ form.nik }} <span class="focus-input100"></span> <span class="label-input100">NIK</span> </div> <div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz"> - <!-- <input class="input100" type="text" name="nama"> --> {{ form.alamat }} <span class="focus-input100"></span> <span class="label-input100">Alamat</span> </div> <div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz"> - <!-- <input class="input100" type="text" name="nama"> --> {{ form.email.errors }} {{ form.email }} <span class="focus-input100"></span> <span class="label-input100">Email</span> </div> <div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz"> - <!-- <input class="input100" type="text" name="nama"> --> {{ form.nomor_telpon.errors}} {{ form.nomor_telpon }} <span class="focus-input100"></span> <span class="label-input100">Nomor Telepon</span> </div> <div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz"> - <!-- <input class="input100" type="text" name="nama"> --> {{ form.password.errors }} {{ form.password }} <span class="focus-input100"></span> <span class="label-input100">Kata Sandi</span> </div> <div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz"> - <!-- <input class="input100" type="text" name="nama"> --> {{ form.password2 }} <span class="focus-input100"></span> <span class="label-input100">Ketik Ulang Kata Sandi</span> diff --git a/register/tests.py b/register/tests.py index 799c0d2..8aec579 100644 --- a/register/tests.py +++ b/register/tests.py @@ -29,11 +29,11 @@ class RegisterPageTest(TestCase): def test_status_using_index_func(self): # Positive tests found = resolve("/registrasi/") - self.assertEqual(found.func.__name__, views.index.__name__) + self.assertEqual(found.func.__name__, views.Index.__name__) # Negative tests found = resolve("/admin/") - self.assertNotEqual(found.func, views.index) + self.assertNotEqual(found.func, views.Index) def test_register_title(self): response = Client().get("/registrasi/") @@ -628,7 +628,7 @@ class RegisterPublicTest(TestCase): # Negative tests found = resolve("/admin/") - self.assertNotEqual(found.func, views.index) + self.assertNotEqual(found.func, views.Index) def test_register_title(self): response = Client().get(self.reg_path) diff --git a/register/urls.py b/register/urls.py index 53d6a6e..d3d7b0a 100644 --- a/register/urls.py +++ b/register/urls.py @@ -5,7 +5,7 @@ from . import views app_name = "register" urlpatterns = [ - path("", views.index.as_view()), + path("", views.Index.as_view()), path("umum/", views.RegistrasiUmum.as_view()), path("admin/", views.RegistrasiAdmin.as_view()), path("verify-email/<str:token>", views.verify_email, name='verify-email'), diff --git a/register/views.py b/register/views.py index 91952d6..c409342 100644 --- a/register/views.py +++ b/register/views.py @@ -9,12 +9,14 @@ from django.db import models from django.http import HttpResponseRedirect from django.views.generic import TemplateView from django.core.exceptions import PermissionDenied +from django.core.exceptions import ValidationError from register.forms import UserForm from register.services import RegistrationService -class index(TemplateView): + +class Index(TemplateView): template_name = "index.html" def get_context_data(self, **kwargs): @@ -134,7 +136,7 @@ def verify_email(request, token): return render(request, template_name, { 'message': f'Link verifikasi telah expire' }) - except: + except (User.DoesNotExist, ValidationError): return render(request, template_name, { 'message': f'Email gagal diverifikasi' }) -- GitLab