Fakultas Ilmu Komputer UI

Commit e527bfeb authored by Arief Pratama's avatar Arief Pratama
Browse files

[HOTFIX] Fix Code smell and timezone-aware datetime

parent c320f26c
...@@ -4,21 +4,24 @@ import random ...@@ -4,21 +4,24 @@ import random
import shutil import shutil
from functools import cmp_to_key from functools import cmp_to_key
import requests
from administration.models import VerificationReport
from digipus import settings
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.models import AnonymousUser from django.contrib.auth.models import AnonymousUser
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db.models import Case, When, Count, Q from django.db.models import Case, Count, Q, When
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.utils import timezone
from pydrive.auth import GoogleAuth from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive from pydrive.drive import GoogleDrive
from administration.models import VerificationReport
from app.forms import SuntingProfilForm from app.forms import SuntingProfilForm
from app.models import Category, Like, LikeComment, DislikeComment, Materi, Comment, Rating, DownloadStatistics, \ from app.models import (Category, Comment, DislikeComment, DownloadStatistics,
ViewStatistics, ReadLater Like, LikeComment, Materi, Rating, ReadLater,
from app.utils.fileManagementUtil import get_random_filename, remove_image_exifdata ViewStatistics)
from digipus import settings from app.utils.fileManagementUtil import (get_random_filename,
import requests remove_image_exifdata)
class DafterKatalogService: class DafterKatalogService:
...@@ -160,7 +163,7 @@ class CitationService: ...@@ -160,7 +163,7 @@ class CitationService:
@staticmethod @staticmethod
def get_citation_ieee(request, materi): def get_citation_ieee(request, materi):
current_date = datetime.datetime.now() current_date = timezone.now()
current_day = str(current_date.day) current_day = str(current_date.day)
current_month = current_date.strftime("%b") current_month = current_date.strftime("%b")
current_year = str(current_date.year) current_year = str(current_date.year)
...@@ -483,4 +486,4 @@ class ReadLaterService: ...@@ -483,4 +486,4 @@ class ReadLaterService:
else: else:
ReadLater(materi=materi, user=current_user).save() ReadLater(materi=materi, user=current_user).save()
response = {"success": True, "read_later_checked": True} response = {"success": True, "read_later_checked": True}
return response return response
\ No newline at end of file
import json, tempfile, os, mock, base64 import base64
import pandas as pd import datetime as dt
from io import StringIO import json
import os
import random
import re import re
import tempfile
import time import time
import random from datetime import datetime
from django.test import override_settings from io import StringIO
from time import sleep
import mock
import pandas as pd
import pytz
from administration.models import VerificationReport, VerificationSetting
from administration.utils import id_generator
from authentication.models import User
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
from datetime import datetime from digipus.settings import TIME_ZONE
from django.conf import settings from django.conf import settings
from django.contrib import messages as dj_messages from django.contrib import messages as dj_messages
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.core import mail, serializers from django.core import mail, serializers
from django.core.files import File
from django.core.exceptions import PermissionDenied, ValidationError from django.core.exceptions import PermissionDenied, ValidationError
from django.core.files import File
from django.core.files.uploadedfile import SimpleUploadedFile from django.core.files.uploadedfile import SimpleUploadedFile
from django.core.management import call_command from django.core.management import call_command
from django.test import Client, TestCase, TransactionTestCase
from django.urls import resolve, reverse
from django.db.utils import IntegrityError from django.db.utils import IntegrityError
from django.test import Client, RequestFactory, TestCase, TransactionTestCase from django.test import (Client, RequestFactory, TestCase, TransactionTestCase,
from pytz import timezone override_settings)
from time import sleep from django.urls import resolve, reverse
import datetime as dt from django.utils import timezone
from administration.models import VerificationSetting, VerificationReport
from administration.utils import id_generator
from app.views import UploadMateriHTML, add_rating_materi
from authentication.models import User
from digipus.settings import TIME_ZONE
from .models import (
Category,
Comment,
Review,
DislikeComment,
DownloadStatistics,
Materi,
Like,
LikeComment,
Rating,
ReqMaterial,
RatingContributor,
ViewStatistics,
ReadLater
)
from .services import (
DetailMateriService,
)
from .views import (
DaftarKatalog,
DashboardKontributorView,
DetailMateri,
ProfilView,
SuntingProfilView,
SuksesLoginAdminView,
SuksesLoginKontributorView,
PostsView,
RevisiMateriView,
ReqMateriView,
KatalogPerKontributorView,
UploadMateriView,
UploadMateriExcelView,
PasswordChangeViews,
password_success,
MateriFavorite,
)
from app.forms import SuntingProfilForm, year_choices from app.forms import SuntingProfilForm, year_choices
from app.utils.fileManagementUtil import get_random_filename, remove_image_exifdata from app.utils.fileManagementUtil import (get_random_filename,
remove_image_exifdata)
from app.utils.PasswordValidator import PasswordPolicyValidator from app.utils.PasswordValidator import PasswordPolicyValidator
from app.views import UploadMateriHTML, add_rating_materi
from .models import (Category, Comment, DislikeComment, DownloadStatistics,
Like, LikeComment, Materi, Rating, RatingContributor,
ReadLater, ReqMaterial, Review, ViewStatistics)
from .services import DetailMateriService
from .views import (DaftarKatalog, DashboardKontributorView, DetailMateri,
KatalogPerKontributorView, MateriFavorite,
PasswordChangeViews, PostsView, ProfilView, ReqMateriView,
RevisiMateriView, SuksesLoginAdminView,
SuksesLoginKontributorView, SuntingProfilView,
UploadMateriExcelView, UploadMateriView, password_success)
ERROR_403_MESSAGE = "Kamu harus login untuk mengakses halaman ini" ERROR_403_MESSAGE = "Kamu harus login untuk mengakses halaman ini"
from statistics import mean
import requests
from django.test import LiveServerTestCase from django.test import LiveServerTestCase
from selenium import webdriver from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager from webdriver_manager.chrome import ChromeDriverManager
from selenium.common.exceptions import NoSuchElementException
import requests
from statistics import mean
class DaftarKatalogTest(TestCase): class DaftarKatalogTest(TestCase):
...@@ -343,7 +321,7 @@ class DetailMateriTest(TestCase): ...@@ -343,7 +321,7 @@ class DetailMateriTest(TestCase):
self.materi_with_published_date = Materi.objects.create(title="Materi 1", author="Agas", uploader=self.contributor, self.materi_with_published_date = Materi.objects.create(title="Materi 1", author="Agas", uploader=self.contributor,
publisher="Kelas SC", descriptions="Deskripsi Materi 1", publisher="Kelas SC", descriptions="Deskripsi Materi 1",
status="APPROVE", cover=self.cover, content=self.content, status="APPROVE", cover=self.cover, content=self.content,
date_modified=datetime.now(), date_created=datetime.now()) date_modified=timezone.now(), date_created=timezone.now())
self.materi_with_published_date_url = "/materi/" + str(self.materi_with_published_date.id) + "/" self.materi_with_published_date_url = "/materi/" + str(self.materi_with_published_date.id) + "/"
VerificationReport.objects.create(report='{"feedback": "Something", "kriteria": [{"title": "Kriteria 1", "status": true},' + \ VerificationReport.objects.create(report='{"feedback": "Something", "kriteria": [{"title": "Kriteria 1", "status": true},' + \
' {"title": "Kriteria 2", "status": true}, {"title": "Kriteria 3", "status": true}]}', \ ' {"title": "Kriteria 2", "status": true}, {"title": "Kriteria 3", "status": true}]}', \
...@@ -758,7 +736,7 @@ class DetailMateriTest(TestCase): ...@@ -758,7 +736,7 @@ class DetailMateriTest(TestCase):
def test_citation_IEEE_materi_has_no_published_date(self): def test_citation_IEEE_materi_has_no_published_date(self):
response = self.client.get(self.url) response = self.client.get(self.url)
current_date = datetime.now() current_date = timezone.now()
current_day = str(current_date.day) current_day = str(current_date.day)
current_month = current_date.strftime("%b") current_month = current_date.strftime("%b")
current_year = str(current_date.year) current_year = str(current_date.year)
...@@ -781,7 +759,7 @@ class DetailMateriTest(TestCase): ...@@ -781,7 +759,7 @@ class DetailMateriTest(TestCase):
def test_citation_IEEE_materi_has_published_date(self): def test_citation_IEEE_materi_has_published_date(self):
response = self.client.get(self.materi_with_published_date_url) response = self.client.get(self.materi_with_published_date_url)
current_date = datetime.now() current_date = timezone.now()
current_day = str(current_date.day) current_day = str(current_date.day)
current_month = current_date.strftime("%b") current_month = current_date.strftime("%b")
current_year = str(current_date.year) current_year = str(current_date.year)
...@@ -983,7 +961,7 @@ class PostsViewTest(TestCase): ...@@ -983,7 +961,7 @@ class PostsViewTest(TestCase):
for j in range (LIKES_COUNT_PER_POST[i]): for j in range (LIKES_COUNT_PER_POST[i]):
Like.objects.create( Like.objects.create(
timestamp=datetime.now(), timestamp=timezone.now(),
materi=post, materi=post,
session_id=("dummysession-" + str(i) + '-' + str(j)) session_id=("dummysession-" + str(i) + '-' + str(j))
) )
...@@ -1050,6 +1028,8 @@ class PostsViewTest(TestCase): ...@@ -1050,6 +1028,8 @@ class PostsViewTest(TestCase):
response = self._request_as_user() response = self._request_as_user()
posts = list(self.data.keys()) posts = list(self.data.keys())
posts.sort()
comments = { comments = {
i: [comment.id for comment in self.data[post_id]["comments"]] i: [comment.id for comment in self.data[post_id]["comments"]]
for i, post_id in enumerate(posts) for i, post_id in enumerate(posts)
...@@ -2740,7 +2720,7 @@ class DownloadHistoryViewTest(TestCase): ...@@ -2740,7 +2720,7 @@ class DownloadHistoryViewTest(TestCase):
self.client.get(self.download_url2) self.client.get(self.download_url2)
self.client.get(self.download_url1) self.client.get(self.download_url1)
jkt_timezone = timezone(TIME_ZONE) jkt_timezone = pytz.timezone(TIME_ZONE)
download_history = self.user_anonim.riwayat_unduh.all() download_history = self.user_anonim.riwayat_unduh.all()
response = self.client.get(self.history_url) response = self.client.get(self.history_url)
...@@ -2760,7 +2740,7 @@ class DownloadHistoryViewTest(TestCase): ...@@ -2760,7 +2740,7 @@ class DownloadHistoryViewTest(TestCase):
self.client.get(self.download_url2) self.client.get(self.download_url2)
self.client.get(self.download_url1) self.client.get(self.download_url1)
jkt_timezone = timezone(TIME_ZONE) jkt_timezone = pytz.timezone(TIME_ZONE)
response = self.client.get(self.history_url) response = self.client.get(self.history_url)
resp_html = response.content.decode('utf8') resp_html = response.content.decode('utf8')
...@@ -2780,7 +2760,7 @@ class DownloadHistoryViewTest(TestCase): ...@@ -2780,7 +2760,7 @@ class DownloadHistoryViewTest(TestCase):
self.client.logout() self.client.logout()
jkt_timezone = timezone(TIME_ZONE) jkt_timezone = pytz.timezone(TIME_ZONE)
download_history = self.user_anonim.riwayat_unduh.all() download_history = self.user_anonim.riwayat_unduh.all()
response = self.client.get(self.history_url) response = self.client.get(self.history_url)
...@@ -2856,16 +2836,16 @@ class MateriModelTest(TestCase): ...@@ -2856,16 +2836,16 @@ class MateriModelTest(TestCase):
self.materi = Materi.objects.create(title="Materi 1", author="Agas", uploader=self.contributor, self.materi = Materi.objects.create(title="Materi 1", author="Agas", uploader=self.contributor,
publisher="Kelas SC", descriptions="Deskripsi Materi 1", publisher="Kelas SC", descriptions="Deskripsi Materi 1",
status="APPROVE", cover=self.cover, content=self.content, status="APPROVE", cover=self.cover, content=self.content,
date_modified=datetime.now(), date_created=datetime.now()) date_modified=timezone.now(), date_created=timezone.now())
def test_like_count_return_zero_when_there_is_no_like(self): def test_like_count_return_zero_when_there_is_no_like(self):
self.assertEqual(0, self.materi.like_count) self.assertEqual(0, self.materi.like_count)
def test_like_count_return_right_value_when_there_is_like(self): def test_like_count_return_right_value_when_there_is_like(self):
Like.objects.create(timestamp=datetime.now(), materi=self.materi, session_id="dummysessionid1") Like.objects.create(timestamp=timezone.now(), materi=self.materi, session_id="dummysessionid1")
self.assertEqual(1, self.materi.like_count) self.assertEqual(1, self.materi.like_count)
Like.objects.create(timestamp=datetime.now(), materi=self.materi, session_id="dummysessionid2") Like.objects.create(timestamp=timezone.now(), materi=self.materi, session_id="dummysessionid2")
self.assertEqual(2, self.materi.like_count) self.assertEqual(2, self.materi.like_count)
class MateriFavoriteTest(TestCase): class MateriFavoriteTest(TestCase):
...@@ -2904,8 +2884,8 @@ class RandomizedMateriTest(TestCase): ...@@ -2904,8 +2884,8 @@ class RandomizedMateriTest(TestCase):
status="APPROVE", status="APPROVE",
cover=self.cover, cover=self.cover,
content=self.content, content=self.content,
date_modified=datetime.now(), date_modified=timezone.now(),
date_created=datetime.now(), date_created=timezone.now(),
) )
self.materi = Materi.objects.create( self.materi = Materi.objects.create(
...@@ -2917,8 +2897,8 @@ class RandomizedMateriTest(TestCase): ...@@ -2917,8 +2897,8 @@ class RandomizedMateriTest(TestCase):
status="APPROVE", status="APPROVE",
cover=self.cover, cover=self.cover,
content=self.content, content=self.content,
date_modified=datetime.now(), date_modified=timezone.now(),
date_created=datetime.now(), date_created=timezone.now(),
) )
def test_randomized_materi_returns_200(self): def test_randomized_materi_returns_200(self):
...@@ -2998,8 +2978,9 @@ class YTUrlVideoTest(TestCase): ...@@ -2998,8 +2978,9 @@ class YTUrlVideoTest(TestCase):
@override_settings(MEDIA_ROOT=tempfile.gettempdir()) @override_settings(MEDIA_ROOT=tempfile.gettempdir())
def setUpImage(self): def setUpImage(self):
from django.core.files.uploadedfile import InMemoryUploadedFile
from io import BytesIO from io import BytesIO
from django.core.files.uploadedfile import InMemoryUploadedFile
self.cover = InMemoryUploadedFile( self.cover = InMemoryUploadedFile(
BytesIO(base64.b64decode(TEST_IMAGE)), BytesIO(base64.b64decode(TEST_IMAGE)),
field_name='tempfile', field_name='tempfile',
...@@ -3367,8 +3348,8 @@ class MateriRecommendationTest(TestCase): ...@@ -3367,8 +3348,8 @@ class MateriRecommendationTest(TestCase):
status="APPROVE", status="APPROVE",
cover=self.cover, cover=self.cover,
content=self.content, content=self.content,
date_modified=datetime.now(), date_modified=timezone.now(),
date_created=datetime.now(), date_created=timezone.now(),
) )
Like.objects.create(materi=materi1) Like.objects.create(materi=materi1)
...@@ -3383,8 +3364,8 @@ class MateriRecommendationTest(TestCase): ...@@ -3383,8 +3364,8 @@ class MateriRecommendationTest(TestCase):
status="APPROVE", status="APPROVE",
cover=self.cover, cover=self.cover,
content=self.content, content=self.content,
date_modified=datetime.now(), date_modified=timezone.now(),
date_created=datetime.now(), date_created=timezone.now(),
) )
Like.objects.create(materi=materi2) Like.objects.create(materi=materi2)
...@@ -3400,8 +3381,8 @@ class MateriRecommendationTest(TestCase): ...@@ -3400,8 +3381,8 @@ class MateriRecommendationTest(TestCase):
status="APPROVE", status="APPROVE",
cover=self.cover, cover=self.cover,
content=self.content, content=self.content,
date_modified=datetime.now(), date_modified=timezone.now(),
date_created=datetime.now(), date_created=timezone.now(),
) )
response = Client().get("/?recommendation=1") response = Client().get("/?recommendation=1")
...@@ -3418,8 +3399,8 @@ class MateriRecommendationTest(TestCase): ...@@ -3418,8 +3399,8 @@ class MateriRecommendationTest(TestCase):
status="APPROVE", status="APPROVE",
cover=self.cover, cover=self.cover,
content=self.content, content=self.content,
date_modified=datetime.now(), date_modified=timezone.now(),
date_created=datetime.now(), date_created=timezone.now(),
) )
Like.objects.create(materi=materi2) Like.objects.create(materi=materi2)
...@@ -3434,8 +3415,8 @@ class MateriRecommendationTest(TestCase): ...@@ -3434,8 +3415,8 @@ class MateriRecommendationTest(TestCase):
status="APPROVE", status="APPROVE",
cover=self.cover, cover=self.cover,
content=self.content, content=self.content,
date_modified=datetime.now(), date_modified=timezone.now(),
date_created=datetime.now(), date_created=timezone.now(),
) )
Like.objects.create(materi=materi1) Like.objects.create(materi=materi1)
......
This diff is collapsed.
...@@ -346,6 +346,7 @@ def delete_materi(request, pk): ...@@ -346,6 +346,7 @@ def delete_materi(request, pk):
class UploadMateriView(TemplateView): class UploadMateriView(TemplateView):
template_name = UNGGAH_HTML template_name = UNGGAH_HTML
context = {} context = {}
redirect_path = "/unggah/"
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(UploadMateriView, self).get_context_data(**kwargs) context = super(UploadMateriView, self).get_context_data(**kwargs)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment