From 337c979175486e618bdb30ea971eb4ab83044347 Mon Sep 17 00:00:00 2001
From: Ichlasul Affan <ichlaffterlalu@gmail.com>
Date: Wed, 4 Dec 2019 14:58:28 +0700
Subject: [PATCH 1/8] Set "cover package" parameter in NOSE_ARGS to core
 instead of core.views

---
 kape/settings.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kape/settings.py b/kape/settings.py
index 7e8f3f4a..92e328f3 100755
--- a/kape/settings.py
+++ b/kape/settings.py
@@ -61,7 +61,7 @@ TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
 # Tell nose to measure coverage on the 'foo' and 'bar' apps
 NOSE_ARGS = [
     '--with-coverage',
-    '--cover-package=core.views',
+    '--cover-package=core',
     '--cover-html-dir=test/backend',
     '--cover-html',
     '--cover-xml',
@@ -201,4 +201,4 @@ MAX_UPLOAD_SIZE = 5242880
 
 API_MAHASISWA = "https://api.cs.ui.ac.id/siakngcs/mahasiswa/"
 API_RIWAYAT_MAHASISWA = API_MAHASISWA+'{npm}/riwayat/'
-API_VERIFY_USER = "https://akun.cs.ui.ac.id/oauth/token/verify/"
\ No newline at end of file
+API_VERIFY_USER = "https://akun.cs.ui.ac.id/oauth/token/verify/"
-- 
GitLab


From ebfc3dabc39d9bcd95898ccdb80be526cf9ed062 Mon Sep 17 00:00:00 2001
From: Ichlasul Affan <ichlaffterlalu@gmail.com>
Date: Wed, 4 Dec 2019 15:11:24 +0700
Subject: [PATCH 2/8] Avoid tests running twice by making
 core/tests/__init__.py empty

---
 core/tests/__init__.py | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/core/tests/__init__.py b/core/tests/__init__.py
index 27b5e544..e69de29b 100755
--- a/core/tests/__init__.py
+++ b/core/tests/__init__.py
@@ -1,6 +0,0 @@
-# __init__.py
-
-from core.tests.test_accounts import LoginTests, RegisterTests, ProfileUpdateTests
-from core.tests.test_vacancies import ApplicationTests, BookmarkApplicationTests, CompanyListsTests, VacancyTest
-from core.tests.test_create_vacancies import CreateAndUpdateVacancyTest
-from core.tests.test_feedbacks import FeedbacksTests
-- 
GitLab


From b4b31be6d656c7c0f46204c3c9074f0281ef167b Mon Sep 17 00:00:00 2001
From: Ichlasul Affan <ichlaffterlalu@gmail.com>
Date: Wed, 4 Dec 2019 15:15:26 +0700
Subject: [PATCH 3/8] Remove core.rekomendasiIPK as it is not being used

---
 core/rekomendasiIPK.py | 3 ---
 1 file changed, 3 deletions(-)
 delete mode 100644 core/rekomendasiIPK.py

diff --git a/core/rekomendasiIPK.py b/core/rekomendasiIPK.py
deleted file mode 100644
index c7ac2c7d..00000000
--- a/core/rekomendasiIPK.py
+++ /dev/null
@@ -1,3 +0,0 @@
-nilai_mahasiswa = (3.4, 3.5, 3.6)
-descending = "".join(sorted(str(nilai_mahasiswa), reverse = True))
-print(descending)
\ No newline at end of file
-- 
GitLab


From 1293297bfec55d7371d0f5a573c06e74db2ab8cd Mon Sep 17 00:00:00 2001
From: Ichlasul Affan <ichlaffterlalu@gmail.com>
Date: Wed, 4 Dec 2019 16:12:49 +0700
Subject: [PATCH 4/8] Try --cover-erase to troubleshoot models line coverage

In regular Django test, models should be all covered from the beginning except self-defined functions
---
 kape/settings.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/kape/settings.py b/kape/settings.py
index 92e328f3..6c36b919 100755
--- a/kape/settings.py
+++ b/kape/settings.py
@@ -65,6 +65,7 @@ NOSE_ARGS = [
     '--cover-html-dir=test/backend',
     '--cover-html',
     '--cover-xml',
+    '--cover-erase',
     '--cover-xml-file=test/backend/coverage.xml'
 ]
 
-- 
GitLab


From 6171a460bd6b85e6affb1331ce3a18e1ba54ded0 Mon Sep 17 00:00:00 2001
From: Ichlasul Affan <ichlaffterlalu@gmail.com>
Date: Wed, 4 Dec 2019 17:22:45 +0700
Subject: [PATCH 5/8] Fix django-nose bug, coverage should run before any
 modules load

See https://github.com/jazzband/django-nose/issues/180#issuecomment-93371418 for more info.
---
 kape/settings.py |  1 -
 manage.py        | 18 ++++++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/kape/settings.py b/kape/settings.py
index 6c36b919..a5df8d06 100755
--- a/kape/settings.py
+++ b/kape/settings.py
@@ -60,7 +60,6 @@ TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
 
 # Tell nose to measure coverage on the 'foo' and 'bar' apps
 NOSE_ARGS = [
-    '--with-coverage',
     '--cover-package=core',
     '--cover-html-dir=test/backend',
     '--cover-html',
diff --git a/manage.py b/manage.py
index 408e1c8a..a2611660 100755
--- a/manage.py
+++ b/manage.py
@@ -19,4 +19,22 @@ if __name__ == "__main__":
                 "forget to activate a virtual environment?"
             )
         raise
+
+    is_testing = 'test' in sys.argv
+    if is_testing:
+        import coverage
+        from kape.settings import NOSE_ARGS
+        sources = []
+        for x in NOSE_ARGS:
+            if "--cover-package=" in x:
+                sources.extend(x.replace("--cover-package=", "").split(","))
+        cov = coverage.coverage(source=sources, omit=['*/tests/*'])
+        cov.erase()
+        cov.start()
+
     execute_from_command_line(sys.argv)
+
+    if is_testing:
+        cov.stop()
+        cov.save()
+        cov.report()
-- 
GitLab


From d19aa143e7dc7c294be8bb10ae01a867fbf2a096 Mon Sep 17 00:00:00 2001
From: Ichlasul Affan <ichlaffterlalu@gmail.com>
Date: Wed, 4 Dec 2019 17:43:07 +0700
Subject: [PATCH 6/8] Update again manage.py and settings.py to generate report

---
 kape/settings.py |  2 +-
 manage.py        | 12 ++++++++++++
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/kape/settings.py b/kape/settings.py
index a5df8d06..9c340aac 100755
--- a/kape/settings.py
+++ b/kape/settings.py
@@ -60,11 +60,11 @@ TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
 
 # Tell nose to measure coverage on the 'foo' and 'bar' apps
 NOSE_ARGS = [
+    '--cover-erase',
     '--cover-package=core',
     '--cover-html-dir=test/backend',
     '--cover-html',
     '--cover-xml',
-    '--cover-erase',
     '--cover-xml-file=test/backend/coverage.xml'
 ]
 
diff --git a/manage.py b/manage.py
index a2611660..a4eb9b7e 100755
--- a/manage.py
+++ b/manage.py
@@ -38,3 +38,15 @@ if __name__ == "__main__":
         cov.stop()
         cov.save()
         cov.report()
+        if "--cover-html" in NOSE_ARGS:
+            html_dir = None
+            for x in NOSE_ARGS:
+                if "--cover-html-dir=" in x:
+                    html_dir = x.replace("--cover-html-dir=", "")
+            cov.html_report(directory=html_dir)
+        if "--cover-xml" in NOSE_ARGS:
+            xml_file = None
+            for x in NOSE_ARGS:
+                if "--cover-xml-file=" in x:
+                    xml_file = x.replace("--cover-xml-file=", "")
+            cov.xml_report(outfile=xml_file)
-- 
GitLab


From a268922ed52aa0351c44f3337e6ad233d24652d7 Mon Sep 17 00:00:00 2001
From: Ichlasul Affan <ichlaffterlalu@gmail.com>
Date: Wed, 4 Dec 2019 20:03:48 +0700
Subject: [PATCH 7/8] Drop django-nose at the expense of logs are not being
 grouped for each tests.

---
 kape/settings.py | 17 ++++-------------
 manage.py        | 32 +++++++++++++++-----------------
 requirements.txt |  1 -
 3 files changed, 19 insertions(+), 31 deletions(-)

diff --git a/kape/settings.py b/kape/settings.py
index 9c340aac..e4b241aa 100755
--- a/kape/settings.py
+++ b/kape/settings.py
@@ -36,7 +36,6 @@ INSTALLED_APPS = [
     'webpack_loader',
     'core',
     'rest_framework',
-    'django_nose',
     'rest_framework_swagger',
     'silk',
     'django_filters'
@@ -55,18 +54,10 @@ MIDDLEWARE = [
 
 ROOT_URLCONF = 'kape.urls'
 
-# Use nose to run all tests
-TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
-
-# Tell nose to measure coverage on the 'foo' and 'bar' apps
-NOSE_ARGS = [
-    '--cover-erase',
-    '--cover-package=core',
-    '--cover-html-dir=test/backend',
-    '--cover-html',
-    '--cover-xml',
-    '--cover-xml-file=test/backend/coverage.xml'
-]
+# Coverage parameters
+TEST_COVER_PACKAGE = ['core']
+TEST_COVERAGE_RESULT_HTML_DIR = 'test/backend'
+TEST_COVERAGE_RESULT_XML = 'test/backend/coverage.xml'
 
 TEMPLATES = [
     {
diff --git a/manage.py b/manage.py
index a4eb9b7e..6c986d74 100755
--- a/manage.py
+++ b/manage.py
@@ -20,15 +20,14 @@ if __name__ == "__main__":
             )
         raise
 
-    is_testing = 'test' in sys.argv
+    is_testing = 'test' in sys.argv and 'help' not in sys.argv
     if is_testing:
         import coverage
-        from kape.settings import NOSE_ARGS
-        sources = []
-        for x in NOSE_ARGS:
-            if "--cover-package=" in x:
-                sources.extend(x.replace("--cover-package=", "").split(","))
-        cov = coverage.coverage(source=sources, omit=['*/tests/*'])
+        try:
+            from kape.settings import TEST_COVER_PACKAGE as sources
+            cov = coverage.coverage(source=sources, omit=['*/tests/*'])
+        except ImportError:
+            cov = coverage.coverage(omit=['*/tests/*'])
         cov.erase()
         cov.start()
 
@@ -38,15 +37,14 @@ if __name__ == "__main__":
         cov.stop()
         cov.save()
         cov.report()
-        if "--cover-html" in NOSE_ARGS:
-            html_dir = None
-            for x in NOSE_ARGS:
-                if "--cover-html-dir=" in x:
-                    html_dir = x.replace("--cover-html-dir=", "")
+        try:
+            from kape.settings import TEST_COVERAGE_RESULT_HTML_DIR as html_dir
             cov.html_report(directory=html_dir)
-        if "--cover-xml" in NOSE_ARGS:
-            xml_file = None
-            for x in NOSE_ARGS:
-                if "--cover-xml-file=" in x:
-                    xml_file = x.replace("--cover-xml-file=", "")
+        except ImportError:
+            pass
+
+        try:
+            from kape.settings import TEST_COVERAGE_RESULT_XML as xml_file
             cov.xml_report(outfile=xml_file)
+        except ImportError:
+            pass
diff --git a/requirements.txt b/requirements.txt
index c83f8feb..0aa37fd4 100755
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,7 +2,6 @@ appdirs>=1,<2
 coverage
 Django>=2.2,<3
 django-filter>=2.2,<3
-django-nose
 django-rest-swagger
 django-silk
 django-webpack-loader>=0.4,<1
-- 
GitLab


From 418b521753472316959448f9234949d82e16aa10 Mon Sep 17 00:00:00 2001
From: Ichlasul Affan <ichlaffterlalu@gmail.com>
Date: Thu, 5 Dec 2019 12:34:17 +0700
Subject: [PATCH 8/8] Update GitLab CI to add more verbosity on test

It mimics the easiness of debugging like Django Nose
---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 850559ad..2247b249 100755
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -29,7 +29,7 @@ test-backend:
     - pip install -r requirements.txt
     - python3 manage.py makemigrations
     - python3 manage.py migrate
-    - python3 manage.py test
+    - python3 manage.py test -v 2
   artifacts:
     paths:
       - test/
-- 
GitLab