From 38130f3ae33a6ee9073adf427a6e6fbf87f4253b Mon Sep 17 00:00:00 2001
From: Arief <arief.pratama01@ui.ac.id>
Date: Fri, 30 Oct 2020 05:54:04 +0700
Subject: [PATCH] Add default book cover

---
 app/services.py                              |  14 ++++++++++++++
 app/static/images/book-cover-placeholder.png | Bin 0 -> 4529 bytes
 app/tests.py                                 |   9 ++++++++-
 3 files changed, 22 insertions(+), 1 deletion(-)
 create mode 100644 app/static/images/book-cover-placeholder.png

diff --git a/app/services.py b/app/services.py
index 311cb97..ab9d563 100644
--- a/app/services.py
+++ b/app/services.py
@@ -1,6 +1,7 @@
 import datetime
 import os
 import random
+import shutil
 from functools import cmp_to_key
 
 from django.contrib import messages
@@ -377,6 +378,8 @@ class UploadMateriService:
 
     @staticmethod
     def upload_materi_excel(categories, excel, request, row):
+        default_cover = 'book-cover-placeholder.png'
+
         for i in range(row):
             materi = Materi(
                 title=excel["Title"][i],
@@ -385,11 +388,22 @@ class UploadMateriService:
                 descriptions=excel["Description"][i],
                 uploader=request.user,
             )
+
+            materi.cover.name = default_cover
+            materi.content.name = default_cover
+
+            # Check if file exists in /media
+            if not os.path.exists(os.path.join(settings.MEDIA_ROOT, default_cover)):
+                shutil.copy(
+                    os.path.join('app','static','images',default_cover), 
+                    os.path.join(settings.MEDIA_ROOT,default_cover))
+
             materi.save()
 
             for c in excel["Categories"][i].split(","):
                 materi.categories.add(categories.get(name=c))
 
+
 class EditProfileService:
 
     @staticmethod
diff --git a/app/static/images/book-cover-placeholder.png b/app/static/images/book-cover-placeholder.png
new file mode 100644
index 0000000000000000000000000000000000000000..5a8df02103c48555475d42e34d6660cfc9514697
GIT binary patch
literal 4529
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

literal 0
HcmV?d00001

diff --git a/app/tests.py b/app/tests.py
index 8758a3d..d58073e 100644
--- a/app/tests.py
+++ b/app/tests.py
@@ -1303,7 +1303,12 @@ class UploadExcelPageTest(TestCase):
             response = self.client.post("/unggah_excel/", {'excel': fp})
         
         title = data_frame['Title'][0]
-        self.assertTrue(Materi.objects.get(title=title))
+        materi = Materi.objects.get(title=title)
+        default_path = 'book-cover-placeholder.png'
+
+        self.assertTrue(materi)
+        self.assertEquals(materi.cover.name, default_path)
+        self.assertTrue(os.path.exists(os.path.join(settings.MEDIA_ROOT, default_path)))
 
     def test_upload_excel_download_template(self):
         self.client.login(email="kontributor@gov.id",
@@ -1314,6 +1319,8 @@ class UploadExcelPageTest(TestCase):
         self.assertEquals(response['Content-Type'],'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
         self.assertEquals(response['Content-Disposition'],'attachment; filename=template.xlsx')
 
+        
+
 
 
 class DashboardKontributorViewTest(TestCase):
-- 
GitLab