diff --git a/app/templates/app/katalog_materi.html b/app/templates/app/katalog_materi.html index 34051b5b01acc4892b0f15d9d751844c1cb17b78..bd49b2d93fc8ba0d0416e2088640618e17fc414e 100644 --- a/app/templates/app/katalog_materi.html +++ b/app/templates/app/katalog_materi.html @@ -75,7 +75,9 @@ </div> </header> - <a href="/download-history/" class="btn-history">Riwayat Unduh</a><br><br> + <a href="/download-history/" class="btn-history">Riwayat Unduh</a><br><br> + + <a href="?random=1" class="btn-history">Acak Materi</a><br><br> <div class="container"> <div class="row content"> diff --git a/app/tests.py b/app/tests.py index 5c99fd002d2f7a4ce6f6eea2e78af092a2c1163e..303ed2861d9c2761193e344b0a297854bdb9d2f2 100644 --- a/app/tests.py +++ b/app/tests.py @@ -2274,6 +2274,49 @@ class MateriModelTest(TestCase): Like.objects.create(timestamp=datetime.now(), materi=self.materi, session_id="dummysessionid2") self.assertEqual(2, self.materi.like_count) +class RandomizedMateriTest(TestCase): + def setUp(self): + self.contributor = User.objects.create( + email="kontributor@gov.id", password="passwordtest", name="kontributor", is_contributor=True + ) + + self.cover = SimpleUploadedFile("ExampleCover221.jpg", b"Test file") + self.content = SimpleUploadedFile("ExampleFile221.pdf", b"Test file") + + self.materi = Materi.objects.create( + title="Materi 1", + author="Nandhika", + uploader=self.contributor, + publisher="Kelas SC", + descriptions="Deskripsi Materi 1", + status="APPROVE", + cover=self.cover, + content=self.content, + date_modified=datetime.now(), + date_created=datetime.now(), + ) + + self.materi = Materi.objects.create( + title="Materi 2", + author="Prayoga", + uploader=self.contributor, + publisher="Kelas SC", + descriptions="Deskripsi Materi 2", + status="APPROVE", + cover=self.cover, + content=self.content, + date_modified=datetime.now(), + date_created=datetime.now(), + ) + + def test_randomized_materi_returns_200(self): + response = Client().get("/?random=1") + self.assertEqual(response.status_code, 200) + + def test_randomized_materi_remains_same_materi(self): + response = Client().get("/?random=1") + self.assertIn("Materi 1", response.content.decode()) + self.assertIn("Materi 2", response.content.decode()) class YearChoicesTest(TestCase): def test_release_year_contains_the_right_current_year(self): diff --git a/app/views.py b/app/views.py index a42118b080da8daf030d1b703c2f292072f7e4b6..66b96f602abe4c0033ad5efdb02ec8cd51f90950 100644 --- a/app/views.py +++ b/app/views.py @@ -39,6 +39,7 @@ from django.contrib import messages from pydrive.auth import GoogleAuth from pydrive.drive import GoogleDrive from pydrive.auth import AuthenticationRejected +import random def permission_denied(request, exception, template_name="error_403.html"): return defaults.permission_denied(request, exception, template_name) @@ -96,6 +97,10 @@ class DaftarKatalog(TemplateView): elif(getSort == "jumlah_unduh"): lstMateri = lstMateri.annotate(count=Count('unduh__id')).order_by('-count') + should_random = bool(request.GET.get("random")) + if should_random: + lstMateri = random.sample(list(lstMateri), len(lstMateri)) + context["materi_list"] = lstMateri paginator = Paginator(context["materi_list"], 15) page_number = request.GET.get("page")