From 1b96a05c585facd4e22b18e01a53102e268eb0f4 Mon Sep 17 00:00:00 2001
From: Nandhika Prayoga <nandhika.prayoga@ui.ac.id>
Date: Wed, 14 Oct 2020 15:59:41 +0700
Subject: [PATCH] [#41] Material: Random Material List

---
 app/templates/app/katalog_materi.html |  4 ++-
 app/tests.py                          | 43 +++++++++++++++++++++++++++
 app/views.py                          |  5 ++++
 3 files changed, 51 insertions(+), 1 deletion(-)

diff --git a/app/templates/app/katalog_materi.html b/app/templates/app/katalog_materi.html
index 34051b5..bd49b2d 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 5c99fd0..303ed28 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 a42118b..66b96f6 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")
-- 
GitLab