From 534a739d21d428a826954b900628ac54021a9481 Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Sun, 6 Oct 2019 17:28:07 +0700
Subject: [PATCH 01/21] [RED] Add test for open time vacancy not before today

---
 core/tests/test_create_vacancies.py | 121 +++++++++++++++++++++++-----
 1 file changed, 103 insertions(+), 18 deletions(-)

diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py
index 9d8cd65b..c4cdbf14 100644
--- a/core/tests/test_create_vacancies.py
+++ b/core/tests/test_create_vacancies.py
@@ -16,8 +16,10 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.client.force_authenticate(user=superuser)
 
         url = '/api/vacancies/'
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.fromtimestamp(0),
-        	 'close_time': datetime.today(), 'name': 'new_vacancy', 'description': 'new_vacancy	'}, format='json')
+        day = datetime.timedelta(days=1)
+        today = datetime.today()
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
+        	 'close_time': today + day, 'name': 'new_vacancy', 'description': 'new_vacancy	'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
         vacancies = Vacancy.objects.count()
@@ -30,8 +32,11 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.client.force_authenticate(user=superuser)
 
         url = '/api/vacancies/'
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.fromtimestamp(0),
-                                          'close_time': datetime.today(), 'name': 'new_vacancy',
+
+        day = datetime.timedelta(days=1)
+        today = datetime.today()
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
+                                          'close_time': today + day, 'name': 'new_vacancy',
                                           'description': 'new_vacancy	', 'amount': 10}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
@@ -59,8 +64,10 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.client.force_authenticate(user=superuser)
 
         url = '/api/vacancies/'
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.fromtimestamp(0),
-                                          'close_time': datetime.today(), 'name': 'new_vacancy',
+        day = datetime.timedelta(days=1)
+        today = datetime.today()
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
+                                          'close_time': today + day, 'name': 'new_vacancy',
                                           'description': 'new_vacancy	', 'amount': 'sepuluh'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
@@ -73,11 +80,14 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
-                                              description="lalala", close_time=datetime.today(), name='new_company')
+        day = datetime.timedelta(days=1)
+        today = datetime.today()
+
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time= today,
+                                              description="lalala", close_time= today + day, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-        response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(),
+        response = self.client.patch(url, {'open_time': today, 'close_time': today + day,
         	'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
@@ -87,11 +97,14 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
-                                              description="lalala", close_time=datetime.today(), name='new_company')
+        day = datetime.timedelta(days=1)
+        today = datetime.today()
+
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
+                                              description="lalala", close_time=today + day, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-        response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(),
+        response = self.client.patch(url, {'open_time': today, 'close_time': today + day,
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 10}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
@@ -104,11 +117,14 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
-                                              description="lalala", close_time=datetime.today(), name='new_company')
+        day = datetime.timedelta(days=1)
+        today = datetime.today()
+
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
+                                              description="lalala", close_time= today + day, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-        response = self.client.patch(url, {'open_time': datetime.today(), 'close_time': datetime.fromtimestamp(0),
+        response = self.client.patch(url, {'open_time': today + day, 'close_time': today,
         	'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
@@ -118,13 +134,82 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
-                                              description="lalala", close_time=datetime.today(), name='new_company')
+        day = datetime.timedelta(days=1)
+        today = datetime.today()
+
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
+                                              description="lalala", close_time= today + day, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-        response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(),
+        response = self.client.patch(url, {'open_time': today, 'close_time': today + day,
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
         vacancy = Vacancy.objects.first()
         self.assertEqual(vacancy.amount, None)
+
+    def test_create_vacancy_with_same_date_failed(self):
+        superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123')
+        new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None,
+                                             address=None)
+        self.client.force_authenticate(user=superuser)
+
+        today = datetime.today()
+
+        url = '/api/vacancies/'
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
+             'close_time': today, 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json')
+        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
+
+        vacancies = Vacancy.objects.count()
+        self.assertEqual(vacancies,0)
+
+    def test_update_vacancy_with_same_date_failed(self):
+        superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123')
+        new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None,
+                                             address=None)
+        self.client.force_authenticate(user=superuser)
+
+        today = datetime.today()
+
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
+                                              description="lalala", close_time=datetime.today(), name='new_company')
+
+        url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
+        response = self.client.patch(url, {'open_time': today, 'close_time': today,
+            'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json')
+        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
+
+    def test_create_vacancy_with_the_date_before_today(self):
+        superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123')
+        new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None,
+                                             address=None)
+        self.client.force_authenticate(user=superuser)
+
+        day = datetime.timedelta(days=1)
+        today = datetime.today()
+
+        url = '/api/vacancies/'
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': today - day,
+             'close_time': today + day, 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json')
+        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
+
+        vacancies = Vacancy.objects.count()
+        self.assertEqual(vacancies,0)
+
+    def test_update_vacancy_with_the_day_before_today(self):
+        superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123')
+        new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None,
+                                             address=None)
+        self.client.force_authenticate(user=superuser)
+
+        day = datetime.timedelta(days=1)
+        today = datetime.today()
+
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time= today - day,
+                                              description="lalala", close_time= today + day, name='new_company')
+
+        url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
+        response = self.client.patch(url, {'open_time': today - day, 'close_time': today + day,
+            'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json')
+        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
-- 
GitLab


From c5dd45c6a7d607258350c6d4d641a5e732c581e1 Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Sun, 6 Oct 2019 17:29:05 +0700
Subject: [PATCH 02/21] [GREEN] Implement open time vacancy not before today

---
 core/views/vacancies.py | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/core/views/vacancies.py b/core/views/vacancies.py
index f51cfd3a..4f1bd8bf 100644
--- a/core/views/vacancies.py
+++ b/core/views/vacancies.py
@@ -1,4 +1,7 @@
 import requests
+
+from dateutil.parser import parse as parse_date
+from django.utils import timezone
 from django.conf import settings
 from rest_framework import viewsets, status
 from rest_framework.decorators import detail_route
@@ -57,7 +60,10 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet):
         close_time = data['close_time']
         name = data['name']
         description = data['description']
-        if close_time < open_time:
+        today_date = timezone.now() - timezone.timedelta(days=1)
+        if parse_date(open_time) < today_date:
+            raise ValidationError('Waktu buka lowongan harus lebih dari hari ini!')
+        elif close_time < open_time:
             raise ValidationError('Waktu tutup lowongan harus lebih dari waktu buka lowongan!')
         vacancy = Vacancy(company=company, open_time=open_time, close_time=close_time, name=name, description=description)
         if 'amount' in data:
@@ -75,7 +81,10 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet):
         close_time = data['close_time']
         name = data['name']
         description = data['description']
-        if close_time < open_time:
+        today_date = timezone.now() - timezone.timedelta(days=1)
+        if parse_date(open_time) < today_date:
+            raise ValidationError('Waktu buka lowongan harus lebih dari hari ini!')
+        elif close_time < open_time:
             raise ValidationError('Waktu tutup lowongan harus lebih dari waktu buka lowongan!')
         vacancy.open_time = open_time
         vacancy.close_time = close_time
-- 
GitLab


From a5f9d9e4248987da800540c7b4e0082e511a641b Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Mon, 7 Oct 2019 12:31:21 +0700
Subject: [PATCH 03/21] Solve migrations conflict

---
 core/migrations/0015_merge_20191005_1951.py | 16 ++++++++++++++++
 core/migrations/0017_merge_20191006_0146.py | 16 ++++++++++++++++
 core/migrations/0020_merge_20191006_1456.py | 17 +++++++++++++++++
 3 files changed, 49 insertions(+)
 create mode 100644 core/migrations/0015_merge_20191005_1951.py
 create mode 100644 core/migrations/0017_merge_20191006_0146.py
 create mode 100644 core/migrations/0020_merge_20191006_1456.py

diff --git a/core/migrations/0015_merge_20191005_1951.py b/core/migrations/0015_merge_20191005_1951.py
new file mode 100644
index 00000000..81ba3fd0
--- /dev/null
+++ b/core/migrations/0015_merge_20191005_1951.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.5 on 2019-10-05 12:51
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0014_feedback'),
+        ('core', '0014_company_category'),
+    ]
+
+    operations = [
+    ]
diff --git a/core/migrations/0017_merge_20191006_0146.py b/core/migrations/0017_merge_20191006_0146.py
new file mode 100644
index 00000000..e6dd3d99
--- /dev/null
+++ b/core/migrations/0017_merge_20191006_0146.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.5 on 2019-10-05 18:46
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0015_merge_20191005_1951'),
+        ('core', '0016_merge_20191005_2235'),
+    ]
+
+    operations = [
+    ]
diff --git a/core/migrations/0020_merge_20191006_1456.py b/core/migrations/0020_merge_20191006_1456.py
new file mode 100644
index 00000000..3d0cb5de
--- /dev/null
+++ b/core/migrations/0020_merge_20191006_1456.py
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.5 on 2019-10-06 07:56
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0017_vacancy_amount'),
+        ('core', '0019_merge_20191006_0852'),
+        ('core', '0017_merge_20191006_0146'),
+    ]
+
+    operations = [
+    ]
-- 
GitLab


From 325e3a6d117f9c6bf5c1ee55c64a8db286ee9a2d Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Mon, 7 Oct 2019 16:20:20 +0700
Subject: [PATCH 04/21] updat gilab ci

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 53ce6292..0921767e 100755
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -24,7 +24,7 @@ test:
     - npm install
     - npm run build-production
     - pip install -r requirements.txt
-    - python manage.py makemigrations
+    - python manage.py makemigrations --merge
     - python manage.py migrate
     - python manage.py test
     - npm run karma
-- 
GitLab


From 364ebcea41eb607029ec1e678e700fb6524a7e63 Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Mon, 7 Oct 2019 18:38:12 +0700
Subject: [PATCH 05/21] fix migration conflict

---
 .gitlab-ci.yml                              |  2 +-
 core/migrations/0023_merge_20191007_1837.py | 17 +++++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)
 create mode 100644 core/migrations/0023_merge_20191007_1837.py

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 0921767e..53ce6292 100755
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -24,7 +24,7 @@ test:
     - npm install
     - npm run build-production
     - pip install -r requirements.txt
-    - python manage.py makemigrations --merge
+    - python manage.py makemigrations
     - python manage.py migrate
     - python manage.py test
     - npm run karma
diff --git a/core/migrations/0023_merge_20191007_1837.py b/core/migrations/0023_merge_20191007_1837.py
new file mode 100644
index 00000000..51252218
--- /dev/null
+++ b/core/migrations/0023_merge_20191007_1837.py
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.5 on 2019-10-07 11:37
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0022_merge_20191006_1851'),
+        ('core', '0020_merge_20191006_1456'),
+        ('core', '0021_vacancy_salary'),
+    ]
+
+    operations = [
+    ]
-- 
GitLab


From 407c47bc4f911b21a0f2feedaa3837cdf97d9c7f Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Mon, 7 Oct 2019 20:25:03 +0700
Subject: [PATCH 06/21] fix error

---
 core/migrations/0024_auto_20191007_2023.py | 26 ++++++++++++++++++++++
 1 file changed, 26 insertions(+)
 create mode 100644 core/migrations/0024_auto_20191007_2023.py

diff --git a/core/migrations/0024_auto_20191007_2023.py b/core/migrations/0024_auto_20191007_2023.py
new file mode 100644
index 00000000..2b693546
--- /dev/null
+++ b/core/migrations/0024_auto_20191007_2023.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.5 on 2019-10-07 13:23
+from __future__ import unicode_literals
+
+import django.core.validators
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0023_merge_20191007_1837'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='company',
+            name='website',
+            field=models.CharField(default=b'Belum ada link website', max_length=100),
+        ),
+        migrations.AlterField(
+            model_name='student',
+            name='phone_number',
+            field=models.CharField(blank=True, db_index=True, max_length=12, null=True, validators=[django.core.validators.RegexValidator(b'^0\\d{1,11}$')]),
+        ),
+    ]
-- 
GitLab


From 90c4db2b3304bb880761939a603a208b0b817083 Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Tue, 8 Oct 2019 16:09:26 +0700
Subject: [PATCH 07/21] reset migrations

---
 core/migrations/0001_initial.py               | 92 -------------------
 core/migrations/0002_auto_20170328_1131.py    | 36 --------
 core/migrations/0003_auto_20170328_1400.py    | 33 -------
 core/migrations/0004_auto_20170328_1417.py    | 20 ----
 core/migrations/0005_auto_20170328_1904.py    | 43 ---------
 core/migrations/0006_auto_20170328_1950.py    | 19 ----
 core/migrations/0007_auto_20170424_0720.py    | 40 --------
 core/migrations/0007_auto_20170425_1550.py    | 24 -----
 core/migrations/0008_auto_20170424_0725.py    | 25 -----
 core/migrations/0009_auto_20170424_0909.py    | 20 ----
 core/migrations/0010_student_photo.py         | 21 -----
 core/migrations/0011_merge_20170425_2214.py   | 16 ----
 core/migrations/0012_auto_20170502_0925.py    | 40 --------
 core/migrations/0013_auto_20170602_1130.py    | 32 -------
 core/migrations/0014_auto_20191004_1340.py    | 21 -----
 core/migrations/0014_company_category.py      | 20 ----
 core/migrations/0014_feedback.py              | 27 ------
 core/migrations/0014_student_linkedin_url.py  | 20 ----
 core/migrations/0014_student_region.py        | 20 ----
 core/migrations/0014_vacancymilestone.py      | 27 ------
 core/migrations/0015_merge_20191005_1926.py   | 16 ----
 core/migrations/0015_merge_20191005_1951.py   | 16 ----
 core/migrations/0015_merge_20191005_1957.py   | 17 ----
 core/migrations/0015_merge_20191005_2038.py   | 16 ----
 core/migrations/0016_merge_20191005_2235.py   | 16 ----
 core/migrations/0016_merge_20191005_2256.py   | 16 ----
 core/migrations/0017_merge_20191006_0134.py   | 16 ----
 core/migrations/0017_merge_20191006_0146.py   | 16 ----
 core/migrations/0017_vacancy_amount.py        | 20 ----
 core/migrations/0018_merge_20191006_0603.py   | 16 ----
 core/migrations/0018_student_intro.py         | 20 ----
 .../0018_student_ui_ux_portofolio.py          | 22 -----
 core/migrations/0019_auto_20191006_0922.py    | 25 -----
 core/migrations/0019_merge_20191006_0852.py   | 16 ----
 core/migrations/0020_auto_20191006_1507.py    | 25 -----
 core/migrations/0020_merge_20191006_1406.py   | 16 ----
 core/migrations/0020_merge_20191006_1444.py   | 16 ----
 core/migrations/0020_merge_20191006_1456.py   | 17 ----
 core/migrations/0020_merge_20191006_1513.py   | 17 ----
 core/migrations/0020_merge_20191006_1558.py   | 16 ----
 core/migrations/0020_merge_20191006_1737.py   | 17 ----
 core/migrations/0020_merge_20191007_0648.py   | 17 ----
 core/migrations/0021_auto_20191006_1608.py    | 20 ----
 core/migrations/0021_auto_20191007_0648.py    | 26 ------
 core/migrations/0021_merge_20191006_1640.py   | 16 ----
 core/migrations/0021_vacancy_salary.py        | 20 ----
 core/migrations/0022_merge_20191006_1851.py   | 18 ----
 core/migrations/0023_merge_20191007_1533.py   | 16 ----
 core/migrations/0023_merge_20191007_1837.py   | 17 ----
 core/migrations/0024_auto_20191007_1533.py    | 26 ------
 core/migrations/0024_auto_20191007_2023.py    | 26 ------
 core/migrations/0025_merge_20191007_1810.py   | 16 ----
 core/migrations/0025_merge_20191007_2124.py   | 16 ----
 core/migrations/0025_merge_20191008_0014.py   | 16 ----
 core/migrations/0025_merge_20191008_0048.py   | 16 ----
 core/migrations/0026_merge_20191008_0256.py   | 17 ----
 core/migrations/0026_merge_20191008_0525.py   | 17 ----
 core/migrations/0027_merge_20191008_0646.py   | 16 ----
 core/migrations/0027_merge_20191008_0652.py   | 16 ----
 core/migrations/0028_merge_20191008_0843.py   | 16 ----
 core/migrations/0028_merge_20191008_0921.py   | 16 ----
 core/migrations/0029_merge_20191008_1146.py   | 16 ----
 62 files changed, 1348 deletions(-)
 delete mode 100644 core/migrations/0001_initial.py
 delete mode 100644 core/migrations/0002_auto_20170328_1131.py
 delete mode 100644 core/migrations/0003_auto_20170328_1400.py
 delete mode 100644 core/migrations/0004_auto_20170328_1417.py
 delete mode 100644 core/migrations/0005_auto_20170328_1904.py
 delete mode 100644 core/migrations/0006_auto_20170328_1950.py
 delete mode 100644 core/migrations/0007_auto_20170424_0720.py
 delete mode 100644 core/migrations/0007_auto_20170425_1550.py
 delete mode 100644 core/migrations/0008_auto_20170424_0725.py
 delete mode 100644 core/migrations/0009_auto_20170424_0909.py
 delete mode 100644 core/migrations/0010_student_photo.py
 delete mode 100644 core/migrations/0011_merge_20170425_2214.py
 delete mode 100644 core/migrations/0012_auto_20170502_0925.py
 delete mode 100644 core/migrations/0013_auto_20170602_1130.py
 delete mode 100644 core/migrations/0014_auto_20191004_1340.py
 delete mode 100644 core/migrations/0014_company_category.py
 delete mode 100644 core/migrations/0014_feedback.py
 delete mode 100644 core/migrations/0014_student_linkedin_url.py
 delete mode 100644 core/migrations/0014_student_region.py
 delete mode 100644 core/migrations/0014_vacancymilestone.py
 delete mode 100644 core/migrations/0015_merge_20191005_1926.py
 delete mode 100644 core/migrations/0015_merge_20191005_1951.py
 delete mode 100644 core/migrations/0015_merge_20191005_1957.py
 delete mode 100644 core/migrations/0015_merge_20191005_2038.py
 delete mode 100644 core/migrations/0016_merge_20191005_2235.py
 delete mode 100644 core/migrations/0016_merge_20191005_2256.py
 delete mode 100644 core/migrations/0017_merge_20191006_0134.py
 delete mode 100644 core/migrations/0017_merge_20191006_0146.py
 delete mode 100644 core/migrations/0017_vacancy_amount.py
 delete mode 100644 core/migrations/0018_merge_20191006_0603.py
 delete mode 100644 core/migrations/0018_student_intro.py
 delete mode 100644 core/migrations/0018_student_ui_ux_portofolio.py
 delete mode 100644 core/migrations/0019_auto_20191006_0922.py
 delete mode 100644 core/migrations/0019_merge_20191006_0852.py
 delete mode 100644 core/migrations/0020_auto_20191006_1507.py
 delete mode 100644 core/migrations/0020_merge_20191006_1406.py
 delete mode 100644 core/migrations/0020_merge_20191006_1444.py
 delete mode 100644 core/migrations/0020_merge_20191006_1456.py
 delete mode 100644 core/migrations/0020_merge_20191006_1513.py
 delete mode 100644 core/migrations/0020_merge_20191006_1558.py
 delete mode 100644 core/migrations/0020_merge_20191006_1737.py
 delete mode 100644 core/migrations/0020_merge_20191007_0648.py
 delete mode 100644 core/migrations/0021_auto_20191006_1608.py
 delete mode 100644 core/migrations/0021_auto_20191007_0648.py
 delete mode 100644 core/migrations/0021_merge_20191006_1640.py
 delete mode 100644 core/migrations/0021_vacancy_salary.py
 delete mode 100644 core/migrations/0022_merge_20191006_1851.py
 delete mode 100644 core/migrations/0023_merge_20191007_1533.py
 delete mode 100644 core/migrations/0023_merge_20191007_1837.py
 delete mode 100644 core/migrations/0024_auto_20191007_1533.py
 delete mode 100644 core/migrations/0024_auto_20191007_2023.py
 delete mode 100644 core/migrations/0025_merge_20191007_1810.py
 delete mode 100644 core/migrations/0025_merge_20191007_2124.py
 delete mode 100644 core/migrations/0025_merge_20191008_0014.py
 delete mode 100644 core/migrations/0025_merge_20191008_0048.py
 delete mode 100644 core/migrations/0026_merge_20191008_0256.py
 delete mode 100644 core/migrations/0026_merge_20191008_0525.py
 delete mode 100644 core/migrations/0027_merge_20191008_0646.py
 delete mode 100644 core/migrations/0027_merge_20191008_0652.py
 delete mode 100644 core/migrations/0028_merge_20191008_0843.py
 delete mode 100644 core/migrations/0028_merge_20191008_0921.py
 delete mode 100644 core/migrations/0029_merge_20191008_1146.py

diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py
deleted file mode 100644
index adb92dec..00000000
--- a/core/migrations/0001_initial.py
+++ /dev/null
@@ -1,92 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2017-03-28 04:06
-from __future__ import unicode_literals
-
-import core.models.accounts
-from django.conf import settings
-import django.core.validators
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    initial = True
-
-    dependencies = [
-        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='Application',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-            ],
-        ),
-        migrations.CreateModel(
-            name='Company',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('created', models.DateTimeField(auto_now_add=True)),
-                ('updated', models.DateTimeField(auto_now=True)),
-                ('description', models.TextField()),
-                ('verified', models.BooleanField(default=False)),
-                ('logo', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_company_logo_file_path)),
-                ('alamat', models.CharField(blank=True, max_length=1000, null=True)),
-                ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
-            ],
-        ),
-        migrations.CreateModel(
-            name='Student',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('created', models.DateTimeField(auto_now_add=True)),
-                ('updated', models.DateTimeField(auto_now=True)),
-                ('npm', models.IntegerField(unique=True, validators=[django.core.validators.MinValueValidator(100000000), django.core.validators.MaxValueValidator(9999999999)])),
-                ('resume', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_resume_file_path)),
-                ('phone_number', models.CharField(blank=True, db_index=True, max_length=100, null=True)),
-            ],
-        ),
-        migrations.CreateModel(
-            name='Supervisor',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('created', models.DateTimeField(auto_now_add=True)),
-                ('updated', models.DateTimeField(auto_now=True)),
-                ('nip', models.IntegerField(unique=True, validators=[django.core.validators.MinValueValidator(100000000), django.core.validators.MaxValueValidator(9999999999)])),
-                ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
-            ],
-        ),
-        migrations.CreateModel(
-            name='Vacancy',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('verified', models.BooleanField(default=False)),
-                ('open_time', models.DateTimeField()),
-                ('description', models.TextField(blank=True)),
-                ('close_time', models.DateTimeField()),
-                ('company', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='vacancies', to='core.Company')),
-            ],
-        ),
-        migrations.AddField(
-            model_name='student',
-            name='bookmarked_vacancies',
-            field=models.ManyToManyField(blank=True, to='core.Vacancy'),
-        ),
-        migrations.AddField(
-            model_name='student',
-            name='user',
-            field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
-        ),
-        migrations.AddField(
-            model_name='application',
-            name='student_npm',
-            field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='core.Student'),
-        ),
-        migrations.AddField(
-            model_name='application',
-            name='vacancy_id',
-            field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='core.Vacancy'),
-        ),
-    ]
diff --git a/core/migrations/0002_auto_20170328_1131.py b/core/migrations/0002_auto_20170328_1131.py
deleted file mode 100644
index 1b2481f4..00000000
--- a/core/migrations/0002_auto_20170328_1131.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2017-03-28 04:31
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name='application',
-            name='student_npm',
-        ),
-        migrations.RemoveField(
-            model_name='application',
-            name='vacancy_id',
-        ),
-        migrations.AddField(
-            model_name='student',
-            name='applied_vacancies',
-            field=models.ManyToManyField(blank=True, related_name='applied_vacancies', to='core.Vacancy'),
-        ),
-        migrations.AlterField(
-            model_name='student',
-            name='bookmarked_vacancies',
-            field=models.ManyToManyField(blank=True, related_name='bookmarked_vacancies', to='core.Vacancy'),
-        ),
-        migrations.DeleteModel(
-            name='Application',
-        ),
-    ]
diff --git a/core/migrations/0003_auto_20170328_1400.py b/core/migrations/0003_auto_20170328_1400.py
deleted file mode 100644
index 51e0a302..00000000
--- a/core/migrations/0003_auto_20170328_1400.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2017-03-28 07:00
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.utils.timezone
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0002_auto_20170328_1131'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='vacancy',
-            name='created',
-            field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
-            preserve_default=False,
-        ),
-        migrations.AddField(
-            model_name='vacancy',
-            name='name',
-            field=models.CharField(default=django.utils.timezone.now, max_length=100),
-            preserve_default=False,
-        ),
-        migrations.AddField(
-            model_name='vacancy',
-            name='updated',
-            field=models.DateTimeField(auto_now=True),
-        ),
-    ]
diff --git a/core/migrations/0004_auto_20170328_1417.py b/core/migrations/0004_auto_20170328_1417.py
deleted file mode 100644
index d0801ce1..00000000
--- a/core/migrations/0004_auto_20170328_1417.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2017-03-28 07:17
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0003_auto_20170328_1400'),
-    ]
-
-    operations = [
-        migrations.RenameField(
-            model_name='company',
-            old_name='alamat',
-            new_name='address',
-        ),
-    ]
diff --git a/core/migrations/0005_auto_20170328_1904.py b/core/migrations/0005_auto_20170328_1904.py
deleted file mode 100644
index bde81294..00000000
--- a/core/migrations/0005_auto_20170328_1904.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2017-03-28 12:04
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0004_auto_20170328_1417'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='Application',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('cover_letter', models.TextField(blank=True, null=True)),
-                ('allow_transcript', models.BooleanField(default=True)),
-            ],
-        ),
-        migrations.RemoveField(
-            model_name='student',
-            name='applied_vacancies',
-        ),
-        migrations.AddField(
-            model_name='student',
-            name='applied_vacancies',
-            field=models.ManyToManyField(blank=True, related_name='applied_vacancies', through='core.Application', to='core.Vacancy'),
-        ),
-        migrations.AddField(
-            model_name='application',
-            name='student',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Student'),
-        ),
-        migrations.AddField(
-            model_name='application',
-            name='vacancy',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Vacancy'),
-        ),
-    ]
diff --git a/core/migrations/0006_auto_20170328_1950.py b/core/migrations/0006_auto_20170328_1950.py
deleted file mode 100644
index 85ba09d0..00000000
--- a/core/migrations/0006_auto_20170328_1950.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2017-03-28 12:50
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0005_auto_20170328_1904'),
-    ]
-
-    operations = [
-        migrations.AlterUniqueTogether(
-            name='application',
-            unique_together=set([('student', 'vacancy')]),
-        ),
-    ]
diff --git a/core/migrations/0007_auto_20170424_0720.py b/core/migrations/0007_auto_20170424_0720.py
deleted file mode 100644
index 23313a73..00000000
--- a/core/migrations/0007_auto_20170424_0720.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2017-04-24 07:20
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0006_auto_20170328_1950'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='student',
-            name='batch',
-            field=models.CharField(blank=True, max_length=4, null=True),
-        ),
-        migrations.AddField(
-            model_name='student',
-            name='birth_date',
-            field=models.DateField(blank=True, null=True),
-        ),
-        migrations.AddField(
-            model_name='student',
-            name='birth_place',
-            field=models.TextField(blank=True, max_length=100, null=True),
-        ),
-        migrations.AddField(
-            model_name='student',
-            name='major',
-            field=models.CharField(blank=True, max_length=100, null=True),
-        ),
-        migrations.AddField(
-            model_name='student',
-            name='show_resume',
-            field=models.BooleanField(default=False),
-        ),
-    ]
diff --git a/core/migrations/0007_auto_20170425_1550.py b/core/migrations/0007_auto_20170425_1550.py
deleted file mode 100644
index ce925a36..00000000
--- a/core/migrations/0007_auto_20170425_1550.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2017-04-25 15:50
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0006_auto_20170328_1950'),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name='application',
-            name='allow_transcript',
-        ),
-        migrations.AddField(
-            model_name='application',
-            name='status',
-            field=models.IntegerField(default=0),
-        ),
-    ]
diff --git a/core/migrations/0008_auto_20170424_0725.py b/core/migrations/0008_auto_20170424_0725.py
deleted file mode 100644
index bacc0ebe..00000000
--- a/core/migrations/0008_auto_20170424_0725.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2017-04-24 07:25
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0007_auto_20170424_0720'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='student',
-            name='birth_place',
-            field=models.CharField(blank=True, max_length=30, null=True),
-        ),
-        migrations.AlterField(
-            model_name='student',
-            name='major',
-            field=models.CharField(blank=True, max_length=30, null=True),
-        ),
-    ]
diff --git a/core/migrations/0009_auto_20170424_0909.py b/core/migrations/0009_auto_20170424_0909.py
deleted file mode 100644
index 151a05cf..00000000
--- a/core/migrations/0009_auto_20170424_0909.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2017-04-24 09:09
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0008_auto_20170424_0725'),
-    ]
-
-    operations = [
-        migrations.RenameField(
-            model_name='student',
-            old_name='show_resume',
-            new_name='show_transcript',
-        ),
-    ]
diff --git a/core/migrations/0010_student_photo.py b/core/migrations/0010_student_photo.py
deleted file mode 100644
index 2ed279ad..00000000
--- a/core/migrations/0010_student_photo.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2017-04-24 13:34
-from __future__ import unicode_literals
-
-import core.models.accounts
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0009_auto_20170424_0909'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='student',
-            name='photo',
-            field=models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_photo_file_path),
-        ),
-    ]
diff --git a/core/migrations/0011_merge_20170425_2214.py b/core/migrations/0011_merge_20170425_2214.py
deleted file mode 100644
index c255ca51..00000000
--- a/core/migrations/0011_merge_20170425_2214.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2017-04-25 22:14
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0010_student_photo'),
-        ('core', '0007_auto_20170425_1550'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0012_auto_20170502_0925.py b/core/migrations/0012_auto_20170502_0925.py
deleted file mode 100644
index 692e2279..00000000
--- a/core/migrations/0012_auto_20170502_0925.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2017-05-02 02:25
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0011_merge_20170425_2214'),
-    ]
-
-    operations = [
-        migrations.AlterModelOptions(
-            name='company',
-            options={'ordering': ['-updated']},
-        ),
-        migrations.AlterModelOptions(
-            name='student',
-            options={'ordering': ['-updated']},
-        ),
-        migrations.AlterModelOptions(
-            name='supervisor',
-            options={'ordering': ['-updated']},
-        ),
-        migrations.AlterModelOptions(
-            name='vacancy',
-            options={'ordering': ['-updated']},
-        ),
-        migrations.RemoveField(
-            model_name='company',
-            name='verified',
-        ),
-        migrations.AddField(
-            model_name='company',
-            name='status',
-            field=models.IntegerField(default=0),
-        ),
-    ]
diff --git a/core/migrations/0013_auto_20170602_1130.py b/core/migrations/0013_auto_20170602_1130.py
deleted file mode 100644
index 4b30a1b9..00000000
--- a/core/migrations/0013_auto_20170602_1130.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2017-06-02 04:30
-from __future__ import unicode_literals
-
-import core.lib.validators
-import core.models.accounts
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0012_auto_20170502_0925'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='company',
-            name='logo',
-            field=models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_company_logo_file_path, validators=[core.lib.validators.validate_image_file_extension]),
-        ),
-        migrations.AlterField(
-            model_name='student',
-            name='photo',
-            field=models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_photo_file_path, validators=[core.lib.validators.validate_image_file_extension]),
-        ),
-        migrations.AlterField(
-            model_name='student',
-            name='resume',
-            field=models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_resume_file_path, validators=[core.lib.validators.validate_document_file_extension]),
-        ),
-    ]
diff --git a/core/migrations/0014_auto_20191004_1340.py b/core/migrations/0014_auto_20191004_1340.py
deleted file mode 100644
index fdff75bf..00000000
--- a/core/migrations/0014_auto_20191004_1340.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-04 06:40
-from __future__ import unicode_literals
-
-import core.lib.validators
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0013_auto_20170602_1130'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='student',
-            name='npm',
-            field=models.IntegerField(unique=True, validators=[core.lib.validators.validate_npm]),
-        ),
-    ]
diff --git a/core/migrations/0014_company_category.py b/core/migrations/0014_company_category.py
deleted file mode 100644
index 7d2db3cb..00000000
--- a/core/migrations/0014_company_category.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-05 04:52
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0013_auto_20170602_1130'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='company',
-            name='category',
-            field=models.CharField(default=b'Belum ada kategori perusahaan', max_length=140),
-        ),
-    ]
diff --git a/core/migrations/0014_feedback.py b/core/migrations/0014_feedback.py
deleted file mode 100644
index e8183198..00000000
--- a/core/migrations/0014_feedback.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-03 13:39
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0013_auto_20170602_1130'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='Feedback',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('created', models.DateTimeField(auto_now_add=True)),
-                ('title', models.CharField(blank=True, default=b'', max_length=100)),
-                ('content', models.TextField()),
-            ],
-            options={
-                'ordering': ['created'],
-            },
-        ),
-    ]
diff --git a/core/migrations/0014_student_linkedin_url.py b/core/migrations/0014_student_linkedin_url.py
deleted file mode 100644
index b4bbeae2..00000000
--- a/core/migrations/0014_student_linkedin_url.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-05 08:48
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0013_auto_20170602_1130'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='student',
-            name='linkedin_url',
-            field=models.URLField(blank=True, null=True),
-        ),
-    ]
diff --git a/core/migrations/0014_student_region.py b/core/migrations/0014_student_region.py
deleted file mode 100644
index 702015e9..00000000
--- a/core/migrations/0014_student_region.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.17 on 2019-10-05 10:07
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0013_auto_20170602_1130'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='student',
-            name='region',
-            field=models.CharField(blank=True, max_length=30, null=True),
-        ),
-    ]
diff --git a/core/migrations/0014_vacancymilestone.py b/core/migrations/0014_vacancymilestone.py
deleted file mode 100644
index 4ac5eba7..00000000
--- a/core/migrations/0014_vacancymilestone.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.17 on 2019-10-06 03:23
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0013_auto_20170602_1130'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='VacancyMilestone',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=100)),
-                ('detail', models.TextField()),
-                ('expected_start', models.DateField()),
-                ('expected_finish', models.DateField()),
-                ('vacancy', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='milestones', to='core.Vacancy')),
-            ],
-        ),
-    ]
diff --git a/core/migrations/0015_merge_20191005_1926.py b/core/migrations/0015_merge_20191005_1926.py
deleted file mode 100644
index ae7f6c54..00000000
--- a/core/migrations/0015_merge_20191005_1926.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-05 12:26
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0014_feedback'),
-        ('core', '0014_company_category'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0015_merge_20191005_1951.py b/core/migrations/0015_merge_20191005_1951.py
deleted file mode 100644
index 81ba3fd0..00000000
--- a/core/migrations/0015_merge_20191005_1951.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-05 12:51
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0014_feedback'),
-        ('core', '0014_company_category'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0015_merge_20191005_1957.py b/core/migrations/0015_merge_20191005_1957.py
deleted file mode 100644
index fe7de182..00000000
--- a/core/migrations/0015_merge_20191005_1957.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.17 on 2019-10-05 12:57
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0014_feedback'),
-        ('core', '0014_company_category'),
-        ('core', '0014_student_region'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0015_merge_20191005_2038.py b/core/migrations/0015_merge_20191005_2038.py
deleted file mode 100644
index d4afc1b8..00000000
--- a/core/migrations/0015_merge_20191005_2038.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-05 13:38
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0014_feedback'),
-        ('core', '0014_company_category'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0016_merge_20191005_2235.py b/core/migrations/0016_merge_20191005_2235.py
deleted file mode 100644
index eb0946c4..00000000
--- a/core/migrations/0016_merge_20191005_2235.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-05 15:35
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0015_merge_20191005_1926'),
-        ('core', '0015_merge_20191005_1957'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0016_merge_20191005_2256.py b/core/migrations/0016_merge_20191005_2256.py
deleted file mode 100644
index e8b0c6ba..00000000
--- a/core/migrations/0016_merge_20191005_2256.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-05 15:56
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0015_merge_20191005_1957'),
-        ('core', '0014_student_linkedin_url'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0017_merge_20191006_0134.py b/core/migrations/0017_merge_20191006_0134.py
deleted file mode 100644
index d41f21a8..00000000
--- a/core/migrations/0017_merge_20191006_0134.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-05 18:34
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0015_merge_20191005_2038'),
-        ('core', '0016_merge_20191005_2235'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0017_merge_20191006_0146.py b/core/migrations/0017_merge_20191006_0146.py
deleted file mode 100644
index e6dd3d99..00000000
--- a/core/migrations/0017_merge_20191006_0146.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-05 18:46
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0015_merge_20191005_1951'),
-        ('core', '0016_merge_20191005_2235'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0017_vacancy_amount.py b/core/migrations/0017_vacancy_amount.py
deleted file mode 100644
index e4c4c91e..00000000
--- a/core/migrations/0017_vacancy_amount.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-05 19:35
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0016_merge_20191005_2235'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='vacancy',
-            name='amount',
-            field=models.IntegerField(null=True),
-        ),
-    ]
diff --git a/core/migrations/0018_merge_20191006_0603.py b/core/migrations/0018_merge_20191006_0603.py
deleted file mode 100644
index f3a0c377..00000000
--- a/core/migrations/0018_merge_20191006_0603.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-05 23:03
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0016_merge_20191005_2256'),
-        ('core', '0017_merge_20191006_0134'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0018_student_intro.py b/core/migrations/0018_student_intro.py
deleted file mode 100644
index fa1b78c4..00000000
--- a/core/migrations/0018_student_intro.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.17 on 2019-10-05 22:59
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0017_merge_20191006_0134'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='student',
-            name='intro',
-            field=models.CharField(blank=True, max_length=50, null=True),
-        ),
-    ]
diff --git a/core/migrations/0018_student_ui_ux_portofolio.py b/core/migrations/0018_student_ui_ux_portofolio.py
deleted file mode 100644
index 60dd4be1..00000000
--- a/core/migrations/0018_student_ui_ux_portofolio.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.17 on 2019-10-06 10:14
-from __future__ import unicode_literals
-
-import core.lib.validators
-import core.models.accounts
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0017_merge_20191006_0134'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='student',
-            name='ui_ux_portofolio',
-            field=models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_ui_ux_portofolio_file_path, validators=[core.lib.validators.validate_document_file_extension]),
-        ),
-    ]
diff --git a/core/migrations/0019_auto_20191006_0922.py b/core/migrations/0019_auto_20191006_0922.py
deleted file mode 100644
index 61b9d93c..00000000
--- a/core/migrations/0019_auto_20191006_0922.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-06 02:22
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0018_merge_20191006_0603'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='company',
-            name='category',
-            field=models.CharField(default='Belum ada kategori perusahaan', max_length=140),
-        ),
-        migrations.AlterField(
-            model_name='feedback',
-            name='title',
-            field=models.CharField(blank=True, default='', max_length=100),
-        ),
-    ]
diff --git a/core/migrations/0019_merge_20191006_0852.py b/core/migrations/0019_merge_20191006_0852.py
deleted file mode 100644
index 38ac5faf..00000000
--- a/core/migrations/0019_merge_20191006_0852.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.17 on 2019-10-06 01:52
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0018_student_intro'),
-        ('core', '0018_merge_20191006_0603'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0020_auto_20191006_1507.py b/core/migrations/0020_auto_20191006_1507.py
deleted file mode 100644
index df6b9016..00000000
--- a/core/migrations/0020_auto_20191006_1507.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-06 08:07
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0019_auto_20191006_0922'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='student',
-            name='latest_work',
-            field=models.CharField(blank=True, max_length=50, null=True),
-        ),
-        migrations.AddField(
-            model_name='student',
-            name='latest_work_desc',
-            field=models.TextField(blank=True, null=True),
-        ),
-    ]
diff --git a/core/migrations/0020_merge_20191006_1406.py b/core/migrations/0020_merge_20191006_1406.py
deleted file mode 100644
index 12d371c2..00000000
--- a/core/migrations/0020_merge_20191006_1406.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-06 07:06
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0017_vacancy_amount'),
-        ('core', '0019_merge_20191006_0852'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0020_merge_20191006_1444.py b/core/migrations/0020_merge_20191006_1444.py
deleted file mode 100644
index 3f808abd..00000000
--- a/core/migrations/0020_merge_20191006_1444.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-06 07:44
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0017_vacancy_amount'),
-        ('core', '0019_merge_20191006_0852'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0020_merge_20191006_1456.py b/core/migrations/0020_merge_20191006_1456.py
deleted file mode 100644
index 3d0cb5de..00000000
--- a/core/migrations/0020_merge_20191006_1456.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-06 07:56
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0017_vacancy_amount'),
-        ('core', '0019_merge_20191006_0852'),
-        ('core', '0017_merge_20191006_0146'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0020_merge_20191006_1513.py b/core/migrations/0020_merge_20191006_1513.py
deleted file mode 100644
index b3fdf59d..00000000
--- a/core/migrations/0020_merge_20191006_1513.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.17 on 2019-10-06 08:13
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0014_vacancymilestone'),
-        ('core', '0017_vacancy_amount'),
-        ('core', '0019_merge_20191006_0852'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0020_merge_20191006_1558.py b/core/migrations/0020_merge_20191006_1558.py
deleted file mode 100644
index abf6f223..00000000
--- a/core/migrations/0020_merge_20191006_1558.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.17 on 2019-10-06 08:58
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0017_vacancy_amount'),
-        ('core', '0019_merge_20191006_0852'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0020_merge_20191006_1737.py b/core/migrations/0020_merge_20191006_1737.py
deleted file mode 100644
index 26ff28ef..00000000
--- a/core/migrations/0020_merge_20191006_1737.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.17 on 2019-10-06 10:37
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0019_merge_20191006_0852'),
-        ('core', '0017_vacancy_amount'),
-        ('core', '0014_auto_20191004_1340'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0020_merge_20191007_0648.py b/core/migrations/0020_merge_20191007_0648.py
deleted file mode 100644
index 3a42b13e..00000000
--- a/core/migrations/0020_merge_20191007_0648.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-06 23:48
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0017_vacancy_amount'),
-        ('core', '0019_merge_20191006_0852'),
-        ('core', '0014_auto_20191004_1340'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0021_auto_20191006_1608.py b/core/migrations/0021_auto_20191006_1608.py
deleted file mode 100644
index 859f7864..00000000
--- a/core/migrations/0021_auto_20191006_1608.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-06 09:08
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0020_auto_20191006_1507'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='student',
-            name='latest_work',
-            field=models.CharField(blank=True, max_length=100, null=True),
-        ),
-    ]
diff --git a/core/migrations/0021_auto_20191007_0648.py b/core/migrations/0021_auto_20191007_0648.py
deleted file mode 100644
index 743bfd3c..00000000
--- a/core/migrations/0021_auto_20191007_0648.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-06 23:48
-from __future__ import unicode_literals
-
-import django.core.validators
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0020_merge_20191007_0648'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='company',
-            name='website',
-            field=models.CharField(default=b'Belum ada link website', max_length=100),
-        ),
-        migrations.AlterField(
-            model_name='student',
-            name='phone_number',
-            field=models.CharField(blank=True, db_index=True, max_length=12, null=True, validators=[django.core.validators.RegexValidator(b'^0\\d{1,11}$')]),
-        ),
-    ]
diff --git a/core/migrations/0021_merge_20191006_1640.py b/core/migrations/0021_merge_20191006_1640.py
deleted file mode 100644
index 2ed2f5ee..00000000
--- a/core/migrations/0021_merge_20191006_1640.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.17 on 2019-10-06 09:40
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0020_merge_20191006_1558'),
-        ('core', '0014_auto_20191004_1340'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0021_vacancy_salary.py b/core/migrations/0021_vacancy_salary.py
deleted file mode 100644
index 94f1f06a..00000000
--- a/core/migrations/0021_vacancy_salary.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-06 07:07
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0020_merge_20191006_1406'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='vacancy',
-            name='salary',
-            field=models.IntegerField(default=0),
-        ),
-    ]
diff --git a/core/migrations/0022_merge_20191006_1851.py b/core/migrations/0022_merge_20191006_1851.py
deleted file mode 100644
index 491bfd9f..00000000
--- a/core/migrations/0022_merge_20191006_1851.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-06 11:51
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0019_merge_20191006_0852'),
-        ('core', '0017_vacancy_amount'),
-        ('core', '0021_auto_20191006_1608'),
-        ('core', '0014_auto_20191004_1340'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0023_merge_20191007_1533.py b/core/migrations/0023_merge_20191007_1533.py
deleted file mode 100644
index 4595bb4a..00000000
--- a/core/migrations/0023_merge_20191007_1533.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-07 08:33
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0021_vacancy_salary'),
-        ('core', '0022_merge_20191006_1851'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0023_merge_20191007_1837.py b/core/migrations/0023_merge_20191007_1837.py
deleted file mode 100644
index 51252218..00000000
--- a/core/migrations/0023_merge_20191007_1837.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-07 11:37
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0022_merge_20191006_1851'),
-        ('core', '0020_merge_20191006_1456'),
-        ('core', '0021_vacancy_salary'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0024_auto_20191007_1533.py b/core/migrations/0024_auto_20191007_1533.py
deleted file mode 100644
index f6e0f4a5..00000000
--- a/core/migrations/0024_auto_20191007_1533.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-07 08:33
-from __future__ import unicode_literals
-
-import django.core.validators
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0023_merge_20191007_1533'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='company',
-            name='website',
-            field=models.CharField(default='Belum ada link website', max_length=100),
-        ),
-        migrations.AlterField(
-            model_name='student',
-            name='phone_number',
-            field=models.CharField(blank=True, db_index=True, max_length=12, null=True, validators=[django.core.validators.RegexValidator('^0\\d{1,11}$')]),
-        ),
-    ]
diff --git a/core/migrations/0024_auto_20191007_2023.py b/core/migrations/0024_auto_20191007_2023.py
deleted file mode 100644
index 2b693546..00000000
--- a/core/migrations/0024_auto_20191007_2023.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-07 13:23
-from __future__ import unicode_literals
-
-import django.core.validators
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0023_merge_20191007_1837'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='company',
-            name='website',
-            field=models.CharField(default=b'Belum ada link website', max_length=100),
-        ),
-        migrations.AlterField(
-            model_name='student',
-            name='phone_number',
-            field=models.CharField(blank=True, db_index=True, max_length=12, null=True, validators=[django.core.validators.RegexValidator(b'^0\\d{1,11}$')]),
-        ),
-    ]
diff --git a/core/migrations/0025_merge_20191007_1810.py b/core/migrations/0025_merge_20191007_1810.py
deleted file mode 100644
index 5619c262..00000000
--- a/core/migrations/0025_merge_20191007_1810.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-07 11:10
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0021_auto_20191007_0648'),
-        ('core', '0024_auto_20191007_1533'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0025_merge_20191007_2124.py b/core/migrations/0025_merge_20191007_2124.py
deleted file mode 100644
index 8e208cbf..00000000
--- a/core/migrations/0025_merge_20191007_2124.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.17 on 2019-10-07 14:24
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0024_auto_20191007_1533'),
-        ('core', '0020_merge_20191006_1737'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0025_merge_20191008_0014.py b/core/migrations/0025_merge_20191008_0014.py
deleted file mode 100644
index 29cd7ddd..00000000
--- a/core/migrations/0025_merge_20191008_0014.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-07 17:14
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0020_merge_20191006_1444'),
-        ('core', '0024_auto_20191007_1533'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0025_merge_20191008_0048.py b/core/migrations/0025_merge_20191008_0048.py
deleted file mode 100644
index 94af1f72..00000000
--- a/core/migrations/0025_merge_20191008_0048.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.17 on 2019-10-07 17:48
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0020_merge_20191006_1513'),
-        ('core', '0024_auto_20191007_1533'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0026_merge_20191008_0256.py b/core/migrations/0026_merge_20191008_0256.py
deleted file mode 100644
index 319247f3..00000000
--- a/core/migrations/0026_merge_20191008_0256.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.17 on 2019-10-07 19:56
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0018_student_ui_ux_portofolio'),
-        ('core', '0025_merge_20191008_0048'),
-        ('core', '0025_merge_20191007_2124'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0026_merge_20191008_0525.py b/core/migrations/0026_merge_20191008_0525.py
deleted file mode 100644
index 31a03215..00000000
--- a/core/migrations/0026_merge_20191008_0525.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-07 22:25
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0025_merge_20191007_1810'),
-        ('core', '0025_merge_20191007_2124'),
-        ('core', '0025_merge_20191008_0048'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0027_merge_20191008_0646.py b/core/migrations/0027_merge_20191008_0646.py
deleted file mode 100644
index 7c930150..00000000
--- a/core/migrations/0027_merge_20191008_0646.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.17 on 2019-10-07 23:46
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0026_merge_20191008_0256'),
-        ('core', '0021_merge_20191006_1640'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0027_merge_20191008_0652.py b/core/migrations/0027_merge_20191008_0652.py
deleted file mode 100644
index cd5f54dc..00000000
--- a/core/migrations/0027_merge_20191008_0652.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-07 23:52
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0026_merge_20191008_0525'),
-        ('core', '0026_merge_20191008_0256'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0028_merge_20191008_0843.py b/core/migrations/0028_merge_20191008_0843.py
deleted file mode 100644
index ddf44864..00000000
--- a/core/migrations/0028_merge_20191008_0843.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.17 on 2019-10-08 01:43
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0027_merge_20191008_0652'),
-        ('core', '0027_merge_20191008_0646'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0028_merge_20191008_0921.py b/core/migrations/0028_merge_20191008_0921.py
deleted file mode 100644
index 2e5e9f0f..00000000
--- a/core/migrations/0028_merge_20191008_0921.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-08 02:21
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0027_merge_20191008_0652'),
-        ('core', '0025_merge_20191008_0014'),
-    ]
-
-    operations = [
-    ]
diff --git a/core/migrations/0029_merge_20191008_1146.py b/core/migrations/0029_merge_20191008_1146.py
deleted file mode 100644
index f6ee5c73..00000000
--- a/core/migrations/0029_merge_20191008_1146.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.10.5 on 2019-10-08 04:46
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0028_merge_20191008_0843'),
-        ('core', '0028_merge_20191008_0921'),
-    ]
-
-    operations = [
-    ]
-- 
GitLab


From 556ade3962fea7c0c19f4284185025b9524ac053 Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Tue, 8 Oct 2019 16:32:49 +0700
Subject: [PATCH 08/21] edit error

---
 core/tests/test_create_vacancies.py | 2 +-
 core/views/vacancies.py             | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py
index 8f8c39da..54e06760 100644
--- a/core/tests/test_create_vacancies.py
+++ b/core/tests/test_create_vacancies.py
@@ -1,4 +1,4 @@
-from datetime import datetime
+from datetime import datetime, timedelta
 
 import requests_mock
 from django.contrib.auth.models import User
diff --git a/core/views/vacancies.py b/core/views/vacancies.py
index 8065daac..f23e7f1b 100644
--- a/core/views/vacancies.py
+++ b/core/views/vacancies.py
@@ -88,7 +88,7 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet):
         salary = data.get('salary') or 0
         description = data['description']
         today_date = timezone.now() - timezone.timedelta(days=1)
-        if parse_date(open_time) < today_date:
+        if open_time < today_date:
             raise ValidationError('Waktu buka lowongan harus lebih dari hari ini!')
         elif close_time <= open_time:
             raise ValidationError('Waktu tutup lowongan harus lebih dari waktu buka lowongan dan tidak sama dengan waktu pembukaan lowongan!')
@@ -110,7 +110,7 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet):
         name = data['name']
         description = data['description']
         today_date = timezone.now() - timezone.timedelta(days=1)
-        if parse_date(open_time) < today_date:
+        if open_time < today_date:
             raise ValidationError('Waktu buka lowongan harus lebih dari hari ini!')
         elif close_time <= open_time:
             raise ValidationError('Waktu tutup lowongan harus lebih dari waktu buka lowongan dan tidak sama dengan waktu pembukaan lowongan!')
-- 
GitLab


From 5311351f24009c5210e25b94f3eee981fd7e8c71 Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Fri, 11 Oct 2019 21:43:17 +0700
Subject: [PATCH 09/21] Fix error

---
 core/migrations/0001_initial.py               |  90 +++---------------
 core/migrations/0020_merge_20191006_1444.py   |  16 ++++
 .../9db3b100-d366-4834-9983-cb5ff38b3861.pdf  | Bin 0 -> 14052 bytes
 3 files changed, 28 insertions(+), 78 deletions(-)
 create mode 100644 core/migrations/0020_merge_20191006_1444.py
 create mode 100644 kape/files/student-ui-ux-portofolio/9db3b100-d366-4834-9983-cb5ff38b3861.pdf

diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py
index 1c41f1e6..adb92dec 100644
--- a/core/migrations/0001_initial.py
+++ b/core/migrations/0001_initial.py
@@ -1,8 +1,7 @@
 # -*- coding: utf-8 -*-
-# Generated by Django 1.11.17 on 2019-10-08 09:17
+# Generated by Django 1.10.5 on 2017-03-28 04:06
 from __future__ import unicode_literals
 
-import core.lib.validators
 import core.models.accounts
 from django.conf import settings
 import django.core.validators
@@ -23,8 +22,6 @@ class Migration(migrations.Migration):
             name='Application',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('cover_letter', models.TextField(blank=True, null=True)),
-                ('status', models.IntegerField(default=0)),
             ],
         ),
         migrations.CreateModel(
@@ -34,28 +31,11 @@ class Migration(migrations.Migration):
                 ('created', models.DateTimeField(auto_now_add=True)),
                 ('updated', models.DateTimeField(auto_now=True)),
                 ('description', models.TextField()),
-                ('status', models.IntegerField(default=0)),
-                ('logo', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_company_logo_file_path, validators=[core.lib.validators.validate_image_file_extension])),
-                ('address', models.CharField(blank=True, max_length=1000, null=True)),
-                ('category', models.CharField(default=b'Belum ada kategori perusahaan', max_length=140)),
-                ('website', models.CharField(default=b'Belum ada link website', max_length=100)),
+                ('verified', models.BooleanField(default=False)),
+                ('logo', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_company_logo_file_path)),
+                ('alamat', models.CharField(blank=True, max_length=1000, null=True)),
                 ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
             ],
-            options={
-                'ordering': ['-updated'],
-            },
-        ),
-        migrations.CreateModel(
-            name='Feedback',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('created', models.DateTimeField(auto_now_add=True)),
-                ('title', models.CharField(blank=True, default=b'', max_length=100)),
-                ('content', models.TextField()),
-            ],
-            options={
-                'ordering': ['created'],
-            },
         ),
         migrations.CreateModel(
             name='Student',
@@ -63,25 +43,10 @@ class Migration(migrations.Migration):
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('created', models.DateTimeField(auto_now_add=True)),
                 ('updated', models.DateTimeField(auto_now=True)),
-                ('npm', models.IntegerField(unique=True, validators=[core.lib.validators.validate_npm])),
-                ('resume', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_resume_file_path, validators=[core.lib.validators.validate_document_file_extension])),
-                ('phone_number', models.CharField(blank=True, db_index=True, max_length=12, null=True, validators=[django.core.validators.RegexValidator(b'^0\\d{1,11}$')])),
-                ('birth_place', models.CharField(blank=True, max_length=30, null=True)),
-                ('birth_date', models.DateField(blank=True, null=True)),
-                ('major', models.CharField(blank=True, max_length=30, null=True)),
-                ('batch', models.CharField(blank=True, max_length=4, null=True)),
-                ('show_transcript', models.BooleanField(default=False)),
-                ('photo', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_photo_file_path, validators=[core.lib.validators.validate_image_file_extension])),
-                ('linkedin_url', models.URLField(blank=True, null=True)),
-                ('region', models.CharField(blank=True, max_length=30, null=True)),
-                ('ui_ux_portofolio', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_ui_ux_portofolio_file_path, validators=[core.lib.validators.validate_document_file_extension])),
-                ('latest_work', models.CharField(blank=True, max_length=100, null=True)),
-                ('latest_work_desc', models.TextField(blank=True, null=True)),
-                ('intro', models.CharField(blank=True, max_length=50, null=True)),
+                ('npm', models.IntegerField(unique=True, validators=[django.core.validators.MinValueValidator(100000000), django.core.validators.MaxValueValidator(9999999999)])),
+                ('resume', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_resume_file_path)),
+                ('phone_number', models.CharField(blank=True, db_index=True, max_length=100, null=True)),
             ],
-            options={
-                'ordering': ['-updated'],
-            },
         ),
         migrations.CreateModel(
             name='Supervisor',
@@ -92,9 +57,6 @@ class Migration(migrations.Migration):
                 ('nip', models.IntegerField(unique=True, validators=[django.core.validators.MinValueValidator(100000000), django.core.validators.MaxValueValidator(9999999999)])),
                 ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
             ],
-            options={
-                'ordering': ['-updated'],
-            },
         ),
         migrations.CreateModel(
             name='Vacancy',
@@ -104,37 +66,13 @@ class Migration(migrations.Migration):
                 ('open_time', models.DateTimeField()),
                 ('description', models.TextField(blank=True)),
                 ('close_time', models.DateTimeField()),
-                ('created', models.DateTimeField(auto_now_add=True)),
-                ('updated', models.DateTimeField(auto_now=True)),
-                ('name', models.CharField(max_length=100)),
-                ('amount', models.IntegerField(null=True)),
-                ('salary', models.IntegerField(default=0)),
                 ('company', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='vacancies', to='core.Company')),
             ],
-            options={
-                'ordering': ['-updated'],
-            },
-        ),
-        migrations.CreateModel(
-            name='VacancyMilestone',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=100)),
-                ('detail', models.TextField()),
-                ('expected_start', models.DateField()),
-                ('expected_finish', models.DateField()),
-                ('vacancy', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='milestones', to='core.Vacancy')),
-            ],
-        ),
-        migrations.AddField(
-            model_name='student',
-            name='applied_vacancies',
-            field=models.ManyToManyField(blank=True, related_name='applied_vacancies', through='core.Application', to='core.Vacancy'),
         ),
         migrations.AddField(
             model_name='student',
             name='bookmarked_vacancies',
-            field=models.ManyToManyField(blank=True, related_name='bookmarked_vacancies', to='core.Vacancy'),
+            field=models.ManyToManyField(blank=True, to='core.Vacancy'),
         ),
         migrations.AddField(
             model_name='student',
@@ -143,16 +81,12 @@ class Migration(migrations.Migration):
         ),
         migrations.AddField(
             model_name='application',
-            name='student',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Student'),
+            name='student_npm',
+            field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='core.Student'),
         ),
         migrations.AddField(
             model_name='application',
-            name='vacancy',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Vacancy'),
-        ),
-        migrations.AlterUniqueTogether(
-            name='application',
-            unique_together=set([('student', 'vacancy')]),
+            name='vacancy_id',
+            field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='core.Vacancy'),
         ),
     ]
diff --git a/core/migrations/0020_merge_20191006_1444.py b/core/migrations/0020_merge_20191006_1444.py
new file mode 100644
index 00000000..3f808abd
--- /dev/null
+++ b/core/migrations/0020_merge_20191006_1444.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.5 on 2019-10-06 07:44
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0017_vacancy_amount'),
+        ('core', '0019_merge_20191006_0852'),
+    ]
+
+    operations = [
+    ]
diff --git a/kape/files/student-ui-ux-portofolio/9db3b100-d366-4834-9983-cb5ff38b3861.pdf b/kape/files/student-ui-ux-portofolio/9db3b100-d366-4834-9983-cb5ff38b3861.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..379cb93fd41385e7ea21e9f02d44b2fb84fd860d
GIT binary patch
literal 14052
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
XC5c5P6-B9OTt<dwT&k+B{%%|V*fYM^

literal 0
HcmV?d00001

-- 
GitLab


From 57e259ee653196a9a8ab95d48d7a33084801c3e8 Mon Sep 17 00:00:00 2001
From: Raden Fikri Ihza Dwi Nanda <raden.fikri@ui.ac.id>
Date: Fri, 11 Oct 2019 21:49:57 +0700
Subject: [PATCH 10/21] Update test

---
 core/tests/test_create_vacancies.py | 61 -----------------------------
 1 file changed, 61 deletions(-)

diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py
index b3f30fac..25274255 100644
--- a/core/tests/test_create_vacancies.py
+++ b/core/tests/test_create_vacancies.py
@@ -102,13 +102,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                               description="lalala", close_time= today + day, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-<<<<<<< HEAD
-        response = self.client.patch(url, {'open_time': today, 'close_time': today + day,
-        	'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json')
-=======
         response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(),
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'responsibilities': 'new_vacancy2'}, format='json')
->>>>>>> 5e2c91220bc84a206d06a5a3803dc955ea8ac201
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
     def test_update_vacancy_with_amount_salary_success(self):
@@ -124,13 +119,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                               description="lalala", close_time=today + day, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-<<<<<<< HEAD
-        response = self.client.patch(url, {'open_time': today, 'close_time': today + day,
-        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 10}, format='json')
-=======
         response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(),
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 10, 'salary': 2, 'responsibilities': 'new_vacancy2'}, format='json')
->>>>>>> 5e2c91220bc84a206d06a5a3803dc955ea8ac201
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
         vacancy = Vacancy.objects.first()
@@ -166,13 +156,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                               description="lalala", close_time= today + day, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-<<<<<<< HEAD
-        response = self.client.patch(url, {'open_time': today + day, 'close_time': today,
-        	'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json')
-=======
         response = self.client.patch(url, {'open_time': datetime.today(), 'close_time': datetime.fromtimestamp(0),
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'responsibilities': 'new_vacancy2'}, format='json')
->>>>>>> 5e2c91220bc84a206d06a5a3803dc955ea8ac201
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
     def test_update_vacancy_with_amount_salary_string_failed(self):
@@ -195,8 +180,6 @@ class CreateAndUpdateVacancyTest(APITestCase):
         vacancy = Vacancy.objects.first()
         self.assertEqual(vacancy.amount, None)
 
-<<<<<<< HEAD
-=======
     def test_create_vacancy_with_same_date_failed(self):
         superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123')
         new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None,
@@ -213,7 +196,6 @@ class CreateAndUpdateVacancyTest(APITestCase):
 
         vacancies = Vacancy.objects.count()
         self.assertEqual(vacancies,0)
->>>>>>> 5e2c91220bc84a206d06a5a3803dc955ea8ac201
 
     def test_new_vacancy_on_same_day_with_failed(self):
         superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123')
@@ -224,14 +206,9 @@ class CreateAndUpdateVacancyTest(APITestCase):
         today = datetime.today()
 
         url = '/api/vacancies/'
-<<<<<<< HEAD
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
-             'close_time': today, 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json')
-=======
         response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.fromtimestamp(0),
         	 'close_time': datetime.fromtimestamp(0), 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json')
 
->>>>>>> 5e2c91220bc84a206d06a5a3803dc955ea8ac201
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
         vacancies = Vacancy.objects.count()
@@ -266,30 +243,6 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                               description="lalala", close_time=datetime.today(), name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-<<<<<<< HEAD
-        response = self.client.patch(url, {'open_time': today, 'close_time': today,
-            'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json')
-        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
-
-    def test_create_vacancy_with_the_date_before_today(self):
-        superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123')
-        new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None,
-                                             address=None)
-        self.client.force_authenticate(user=superuser)
-
-        day = datetime.timedelta(days=1)
-        today = datetime.today()
-
-        url = '/api/vacancies/'
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': today - day,
-             'close_time': today + day, 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json')
-        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
-
-        vacancies = Vacancy.objects.count()
-        self.assertEqual(vacancies,0)
-
-    def test_update_vacancy_with_the_day_before_today(self):
-=======
 
         response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.fromtimestamp(0),
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh'}, format='json')
@@ -299,24 +252,11 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.assertEqual(vacancy.amount, None)
 
     def test_update_vacancy_with_responsibilities_failed(self):
->>>>>>> 5e2c91220bc84a206d06a5a3803dc955ea8ac201
         superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123')
         new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None,
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-<<<<<<< HEAD
-        day = datetime.timedelta(days=1)
-        today = datetime.today()
-
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time= today - day,
-                                              description="lalala", close_time= today + day, name='new_company')
-
-        url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-        response = self.client.patch(url, {'open_time': today - day, 'close_time': today + day,
-            'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json')
-        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
-=======
         new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
                                               description="lalala", close_time=datetime.today(), name='new_company')
 
@@ -327,4 +267,3 @@ class CreateAndUpdateVacancyTest(APITestCase):
 
         vacancy = Vacancy.objects.first()
         self.assertEqual(vacancy.responsibilities, '')
->>>>>>> 5e2c91220bc84a206d06a5a3803dc955ea8ac201
-- 
GitLab


From 21e79061522aa9b0f6c074093f59124cac51df70 Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Fri, 11 Oct 2019 22:18:44 +0700
Subject: [PATCH 11/21] Edit functionality

---
 core/tests/test_create_vacancies.py | 119 +++++-----------------------
 core/views/vacancies.py             |   4 +-
 2 files changed, 21 insertions(+), 102 deletions(-)

diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py
index b3f30fac..5d073886 100644
--- a/core/tests/test_create_vacancies.py
+++ b/core/tests/test_create_vacancies.py
@@ -16,10 +16,9 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.client.force_authenticate(user=superuser)
 
         url = '/api/vacancies/'
-        day = datetime.timedelta(days=1)
-        today = datetime.today()
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
-        	 'close_time': today + day, 'name': 'new_vacancy', 'description': 'new_vacancy	'}, format='json')
+        day = datetime.timedelta(1)
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.today(),
+        	 'close_time': datetime.today() - day, 'name': 'new vacancy', 'description': 'new_vacancy	'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
         vacancies = Vacancy.objects.count()
@@ -32,10 +31,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.client.force_authenticate(user=superuser)
 
         url = '/api/vacancies/'
-        day = datetime.timedelta(days=1)
-        today = datetime.today()
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
-                                          'close_time': today + day, 'name': 'new_vacancy',
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.fromtimestamp(0),
+                                          'close_time': datetime.today(), 'name': 'new vacancy',
                                           'description': 'new_vacancy	', 'amount': 10}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
@@ -79,11 +76,9 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.client.force_authenticate(user=superuser)
 
         url = '/api/vacancies/'
-        day = datetime.timedelta(days=1)
-        today = datetime.today()
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
-                                          'close_time': today + day, 'name': 'new_vacancy',
-                                          'description': 'new_vacancy	', 'amount': 'sepuluh'}, format='json')
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.fromtimestamp(0),
+                                          'close_time': datetime.today(), 'name': 'new_vacancy',
+                                          'description': 'new_vacancy	', 'amount': 'sepuluh', 'salary':'dua juta'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
         vacancies_count = Vacancy.objects.count()
@@ -95,20 +90,12 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        day = datetime.timedelta(days=1)
-        today = datetime.today()
-
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time= today,
-                                              description="lalala", close_time= today + day, name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
+                                              description="lalala", close_time=datetime.today(), name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-<<<<<<< HEAD
-        response = self.client.patch(url, {'open_time': today, 'close_time': today + day,
-        	'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json')
-=======
         response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(),
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'responsibilities': 'new_vacancy2'}, format='json')
->>>>>>> 5e2c91220bc84a206d06a5a3803dc955ea8ac201
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
     def test_update_vacancy_with_amount_salary_success(self):
@@ -117,20 +104,12 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        day = datetime.timedelta(days=1)
-        today = datetime.today()
-
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
-                                              description="lalala", close_time=today + day, name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
+                                              description="lalala", close_time=datetime.today(), name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-<<<<<<< HEAD
-        response = self.client.patch(url, {'open_time': today, 'close_time': today + day,
-        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 10}, format='json')
-=======
         response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(),
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 10, 'salary': 2, 'responsibilities': 'new_vacancy2'}, format='json')
->>>>>>> 5e2c91220bc84a206d06a5a3803dc955ea8ac201
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
         vacancy = Vacancy.objects.first()
@@ -159,20 +138,12 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        day = datetime.timedelta(days=1)
-        today = datetime.today()
-
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
-                                              description="lalala", close_time= today + day, name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
+                                              description="lalala", close_time=datetime.today(), name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-<<<<<<< HEAD
-        response = self.client.patch(url, {'open_time': today + day, 'close_time': today,
-        	'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json')
-=======
         response = self.client.patch(url, {'open_time': datetime.today(), 'close_time': datetime.fromtimestamp(0),
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'responsibilities': 'new_vacancy2'}, format='json')
->>>>>>> 5e2c91220bc84a206d06a5a3803dc955ea8ac201
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
     def test_update_vacancy_with_amount_salary_string_failed(self):
@@ -181,22 +152,17 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        day = datetime.timedelta(days=1)
-        today = datetime.today()
-
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
-                                              description="lalala", close_time= today + day, name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
+                                              description="lalala", close_time=datetime.today(), name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-        response = self.client.patch(url, {'open_time': today, 'close_time': today + day,
-        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh'}, format='json')
+        response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(),
+        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh', 'salary': 'dua juta'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
         vacancy = Vacancy.objects.first()
         self.assertEqual(vacancy.amount, None)
 
-<<<<<<< HEAD
-=======
     def test_create_vacancy_with_same_date_failed(self):
         superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123')
         new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None,
@@ -213,7 +179,6 @@ class CreateAndUpdateVacancyTest(APITestCase):
 
         vacancies = Vacancy.objects.count()
         self.assertEqual(vacancies,0)
->>>>>>> 5e2c91220bc84a206d06a5a3803dc955ea8ac201
 
     def test_new_vacancy_on_same_day_with_failed(self):
         superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123')
@@ -221,17 +186,10 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        today = datetime.today()
-
         url = '/api/vacancies/'
-<<<<<<< HEAD
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
-             'close_time': today, 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json')
-=======
         response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.fromtimestamp(0),
         	 'close_time': datetime.fromtimestamp(0), 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json')
 
->>>>>>> 5e2c91220bc84a206d06a5a3803dc955ea8ac201
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
         vacancies = Vacancy.objects.count()
@@ -261,35 +219,10 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        today = datetime.today()
         new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
                                               description="lalala", close_time=datetime.today(), name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-<<<<<<< HEAD
-        response = self.client.patch(url, {'open_time': today, 'close_time': today,
-            'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json')
-        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
-
-    def test_create_vacancy_with_the_date_before_today(self):
-        superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123')
-        new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None,
-                                             address=None)
-        self.client.force_authenticate(user=superuser)
-
-        day = datetime.timedelta(days=1)
-        today = datetime.today()
-
-        url = '/api/vacancies/'
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': today - day,
-             'close_time': today + day, 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json')
-        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
-
-        vacancies = Vacancy.objects.count()
-        self.assertEqual(vacancies,0)
-
-    def test_update_vacancy_with_the_day_before_today(self):
-=======
 
         response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.fromtimestamp(0),
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh'}, format='json')
@@ -299,24 +232,11 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.assertEqual(vacancy.amount, None)
 
     def test_update_vacancy_with_responsibilities_failed(self):
->>>>>>> 5e2c91220bc84a206d06a5a3803dc955ea8ac201
         superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123')
         new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None,
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-<<<<<<< HEAD
-        day = datetime.timedelta(days=1)
-        today = datetime.today()
-
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time= today - day,
-                                              description="lalala", close_time= today + day, name='new_company')
-
-        url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-        response = self.client.patch(url, {'open_time': today - day, 'close_time': today + day,
-            'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json')
-        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
-=======
         new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
                                               description="lalala", close_time=datetime.today(), name='new_company')
 
@@ -326,5 +246,4 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
         vacancy = Vacancy.objects.first()
-        self.assertEqual(vacancy.responsibilities, '')
->>>>>>> 5e2c91220bc84a206d06a5a3803dc955ea8ac201
+        self.assertEqual(vacancy.responsibilities, '')
\ No newline at end of file
diff --git a/core/views/vacancies.py b/core/views/vacancies.py
index ba3069aa..29f9f64f 100755
--- a/core/views/vacancies.py
+++ b/core/views/vacancies.py
@@ -88,7 +88,7 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet):
         salary = data.get('salary') or 0
         description = data['description']
         today_date = timezone.now() - timezone.timedelta(days=1)
-        if open_time < today_date:
+        if parse_date(open_time) < today_date:
             raise ValidationError('Waktu buka lowongan harus lebih dari hari ini!')
         elif close_time <= open_time:
             raise ValidationError('Waktu tutup lowongan harus lebih dari waktu buka lowongan dan tidak sama dengan waktu pembukaan lowongan!')
@@ -117,7 +117,7 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet):
         name = data['name']
         description = data['description']
         today_date = timezone.now() - timezone.timedelta(days=1)
-        if open_time < today_date:
+        if parse_date(open_time) < today_date:
             raise ValidationError('Waktu buka lowongan harus lebih dari hari ini!')
         elif close_time <= open_time:
             raise ValidationError('Waktu tutup lowongan harus lebih dari waktu buka lowongan dan tidak sama dengan waktu pembukaan lowongan!')
-- 
GitLab


From b176dd43afcbd3b2e8be2a0cf6ce8b5c07a4e078 Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Fri, 11 Oct 2019 22:45:40 +0700
Subject: [PATCH 12/21] fix error

---
 core/tests/test_create_vacancies.py | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py
index 5d073886..faf54f86 100644
--- a/core/tests/test_create_vacancies.py
+++ b/core/tests/test_create_vacancies.py
@@ -47,8 +47,9 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.client.force_authenticate(user=superuser)
 
         url = '/api/vacancies/'
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.fromtimestamp(0),
-                                          'close_time': datetime.today(), 'name': 'new_vacancy',
+        day = datetime.timedelta(1)
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.today(),
+                                          'close_time': datetime.today() + day, 'name': 'new_vacancy',
                                           'description': 'new_vacancy	', 'amount': 10, 'responsibilities': 'new_vacancy'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
-- 
GitLab


From eff712ef59e45b5fff5516ca0bd5dcb3728f7874 Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Sat, 12 Oct 2019 14:54:45 +0700
Subject: [PATCH 13/21] Fix datetime error

---
 core/views/vacancies.py | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/core/views/vacancies.py b/core/views/vacancies.py
index 29f9f64f..b037e822 100755
--- a/core/views/vacancies.py
+++ b/core/views/vacancies.py
@@ -1,6 +1,6 @@
 import requests
+from datetime import datetime
 
-from dateutil.parser import parse as parse_date
 from django.utils import timezone
 from django.conf import settings
 from django.db.models import Q
@@ -87,8 +87,7 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet):
         self.name_position_validator(name)
         salary = data.get('salary') or 0
         description = data['description']
-        today_date = timezone.now() - timezone.timedelta(days=1)
-        if parse_date(open_time) < today_date:
+        if open_time < str(datetime.today()):
             raise ValidationError('Waktu buka lowongan harus lebih dari hari ini!')
         elif close_time <= open_time:
             raise ValidationError('Waktu tutup lowongan harus lebih dari waktu buka lowongan dan tidak sama dengan waktu pembukaan lowongan!')
@@ -116,8 +115,7 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet):
         close_time = data['close_time']
         name = data['name']
         description = data['description']
-        today_date = timezone.now() - timezone.timedelta(days=1)
-        if parse_date(open_time) < today_date:
+        if open_time < str(datetime.today()):
             raise ValidationError('Waktu buka lowongan harus lebih dari hari ini!')
         elif close_time <= open_time:
             raise ValidationError('Waktu tutup lowongan harus lebih dari waktu buka lowongan dan tidak sama dengan waktu pembukaan lowongan!')
-- 
GitLab


From 1aa251feac46d183d350b2d53bc47a1643a2d62b Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Sat, 12 Oct 2019 15:06:54 +0700
Subject: [PATCH 14/21] Fix error

---
 core/tests/test_create_vacancies.py | 109 ++++++++++++++++++----------
 1 file changed, 72 insertions(+), 37 deletions(-)

diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py
index faf54f86..d42cebbd 100644
--- a/core/tests/test_create_vacancies.py
+++ b/core/tests/test_create_vacancies.py
@@ -9,6 +9,12 @@ from core.models.accounts import Company, Student, Supervisor
 from core.models.vacancies import Vacancy, Application
 
 class CreateAndUpdateVacancyTest(APITestCase):
+
+    today = datetime.today()
+    day = timedelta(days = 1)
+    tomorrow = today + day
+    yesterday = today - day
+
     def test_new_vacancy_success(self):
         superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123')
         new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None,
@@ -16,9 +22,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.client.force_authenticate(user=superuser)
 
         url = '/api/vacancies/'
-        day = datetime.timedelta(1)
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.today(),
-        	 'close_time': datetime.today() - day, 'name': 'new vacancy', 'description': 'new_vacancy	'}, format='json')
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
+        	 'close_time': tomorrow, 'name': 'new vacancy', 'description': 'new_vacancy	'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
         vacancies = Vacancy.objects.count()
@@ -31,8 +36,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.client.force_authenticate(user=superuser)
 
         url = '/api/vacancies/'
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.fromtimestamp(0),
-                                          'close_time': datetime.today(), 'name': 'new vacancy',
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
+                                          'close_time': tomorrow, 'name': 'new vacancy',
                                           'description': 'new_vacancy	', 'amount': 10}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
@@ -47,9 +52,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.client.force_authenticate(user=superuser)
 
         url = '/api/vacancies/'
-        day = datetime.timedelta(1)
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.today(),
-                                          'close_time': datetime.today() + day, 'name': 'new_vacancy',
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
+                                          'close_time': tomorrow, 'name': 'new_vacancy',
                                           'description': 'new_vacancy	', 'amount': 10, 'responsibilities': 'new_vacancy'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
@@ -63,8 +67,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.client.force_authenticate(user=superuser)
 
         url = '/api/vacancies/'
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.today(),
-        	 'close_time': datetime.fromtimestamp(0), 'name': 'new_vacancy', 'description': 'new_vacancy', 'responsibilities': 'new_vacancy'}, format='json')
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
+        	 'close_time': yesterday, 'name': 'new_vacancy', 'description': 'new_vacancy', 'responsibilities': 'new_vacancy'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
         vacancies = Vacancy.objects.count()
@@ -77,8 +81,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.client.force_authenticate(user=superuser)
 
         url = '/api/vacancies/'
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': datetime.fromtimestamp(0),
-                                          'close_time': datetime.today(), 'name': 'new_vacancy',
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
+                                          'close_time': tomorrow, 'name': 'new_vacancy',
                                           'description': 'new_vacancy	', 'amount': 'sepuluh', 'salary':'dua juta'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
@@ -91,11 +95,11 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
-                                              description="lalala", close_time=datetime.today(), name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
+                                              description="lalala", close_time=tomorrow, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-        response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(),
+        response = self.client.patch(url, {'open_time': today, 'close_time': tomorrow,
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'responsibilities': 'new_vacancy2'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
@@ -105,11 +109,11 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
-                                              description="lalala", close_time=datetime.today(), name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
+                                              description="lalala", close_time=tomorrow, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-        response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(),
+        response = self.client.patch(url, {'open_time': today, 'close_time': tomorrow,
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 10, 'salary': 2, 'responsibilities': 'new_vacancy2'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
@@ -122,11 +126,11 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
-                                              description="lalala", close_time=datetime.today(), name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
+                                              description="lalala", close_time=tomorrow, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-        response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(),
+        response = self.client.patch(url, {'open_time': today, 'close_time': tomorrow,
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 10, 'responsibilities': 'new_vacancy2'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
@@ -139,11 +143,11 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
-                                              description="lalala", close_time=datetime.today(), name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time= today,
+                                              description="lalala", close_time=tomorrow, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-        response = self.client.patch(url, {'open_time': datetime.today(), 'close_time': datetime.fromtimestamp(0),
+        response = self.client.patch(url, {'open_time': today, 'close_time': yesterday,
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'responsibilities': 'new_vacancy2'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
@@ -153,11 +157,11 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
-                                              description="lalala", close_time=datetime.today(), name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
+                                              description="lalala", close_time=tomorrow, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-        response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(),
+        response = self.client.patch(url, {'open_time': today, 'close_time': yesterday,
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh', 'salary': 'dua juta'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
@@ -170,8 +174,6 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
         
-        today = datetime.today()
-
         url = '/api/vacancies/'
         response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
         	 'close_time': today, 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json')
@@ -204,8 +206,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
 
         today = datetime.today()
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
-                                              description="lalala", close_time=datetime.today(), name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
+                                              description="lalala", close_time=tomorrow, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
 
@@ -220,8 +222,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
-                                              description="lalala", close_time=datetime.today(), name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
+                                              description="lalala", close_time=tomorrow, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
 
@@ -238,13 +240,46 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=datetime.fromtimestamp(0),
-                                              description="lalala", close_time=datetime.today(), name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
+                                              description="lalala", close_time=tomorrow, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-        response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(),
+        response = self.client.patch(url, {'open_time': today, 'close_time': tomorrow,
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'responsibilities': 'new_vacancy2', 'amount': 'sepuluh'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
         vacancy = Vacancy.objects.first()
-        self.assertEqual(vacancy.responsibilities, '')
\ No newline at end of file
+        self.assertEqual(vacancy.responsibilities, '')
+    
+    def test_create_vacancy_with_open_time_before_today_failed(self):
+        superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123')
+        new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None,
+                                             address=None)
+        self.client.force_authenticate(user=superuser)
+        
+        url = '/api/vacancies/'
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': yesterday,
+        	 'close_time': today, 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json')
+        
+        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
+
+        vacancies = Vacancy.objects.count()
+        self.assertEqual(vacancies,0)
+
+    def test_update_vacancy_with_open_time_before_today_failed(self):
+        superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123')
+        new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None,
+                                             address=None)
+        self.client.force_authenticate(user=superuser)
+
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
+                                              description="lalala", close_time=tomorrow, name='new_company')
+
+        url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
+
+        response = self.client.patch(url, {'open_time': yesterday, 'close_time': today,
+        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh'}, format='json')
+        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
+
+        vacancy = Vacancy.objects.first()
+        self.assertEqual(vacancy.amount, None)
\ No newline at end of file
-- 
GitLab


From 4e39f7a649675b16142ad35b08d3c41ae3fcf18a Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Sat, 12 Oct 2019 15:20:39 +0700
Subject: [PATCH 15/21] edit global variable

---
 core/tests/test_create_vacancies.py | 78 ++++++++++++++---------------
 1 file changed, 38 insertions(+), 40 deletions(-)

diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py
index d42cebbd..310f64d6 100644
--- a/core/tests/test_create_vacancies.py
+++ b/core/tests/test_create_vacancies.py
@@ -22,8 +22,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.client.force_authenticate(user=superuser)
 
         url = '/api/vacancies/'
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
-        	 'close_time': tomorrow, 'name': 'new vacancy', 'description': 'new_vacancy	'}, format='json')
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': self.today,
+        	 'close_time': self.tomorrow, 'name': 'new vacancy', 'description': 'new_vacancy	'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
         vacancies = Vacancy.objects.count()
@@ -36,8 +36,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.client.force_authenticate(user=superuser)
 
         url = '/api/vacancies/'
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
-                                          'close_time': tomorrow, 'name': 'new vacancy',
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': self.today,
+                                          'close_time': self.tomorrow, 'name': 'new vacancy',
                                           'description': 'new_vacancy	', 'amount': 10}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
@@ -52,8 +52,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.client.force_authenticate(user=superuser)
 
         url = '/api/vacancies/'
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
-                                          'close_time': tomorrow, 'name': 'new_vacancy',
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': self.today,
+                                          'close_time': self.tomorrow, 'name': 'new_vacancy',
                                           'description': 'new_vacancy	', 'amount': 10, 'responsibilities': 'new_vacancy'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
@@ -67,8 +67,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.client.force_authenticate(user=superuser)
 
         url = '/api/vacancies/'
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
-        	 'close_time': yesterday, 'name': 'new_vacancy', 'description': 'new_vacancy', 'responsibilities': 'new_vacancy'}, format='json')
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': self.today,
+        	 'close_time': self.yesterday, 'name': 'new_vacancy', 'description': 'new_vacancy', 'responsibilities': 'new_vacancy'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
         vacancies = Vacancy.objects.count()
@@ -81,8 +81,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.client.force_authenticate(user=superuser)
 
         url = '/api/vacancies/'
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
-                                          'close_time': tomorrow, 'name': 'new_vacancy',
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': self.today,
+                                          'close_time': self.tomorrow, 'name': 'new_vacancy',
                                           'description': 'new_vacancy	', 'amount': 'sepuluh', 'salary':'dua juta'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
@@ -95,11 +95,11 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
-                                              description="lalala", close_time=tomorrow, name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time= self.today,
+                                              description="lalala", close_time= self.tomorrow, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-        response = self.client.patch(url, {'open_time': today, 'close_time': tomorrow,
+        response = self.client.patch(url, {'open_time': self.today, 'close_time': self.tomorrow,
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'responsibilities': 'new_vacancy2'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
@@ -109,11 +109,11 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
-                                              description="lalala", close_time=tomorrow, name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time= self.today,
+                                              description="lalala", close_time= self.tomorrow, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-        response = self.client.patch(url, {'open_time': today, 'close_time': tomorrow,
+        response = self.client.patch(url, {'open_time': self.today, 'close_time': self.tomorrow,
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 10, 'salary': 2, 'responsibilities': 'new_vacancy2'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
@@ -126,11 +126,11 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
-                                              description="lalala", close_time=tomorrow, name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time= self.today,
+                                              description="lalala", close_time=self.tomorrow, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-        response = self.client.patch(url, {'open_time': today, 'close_time': tomorrow,
+        response = self.client.patch(url, {'open_time': self.today, 'close_time': self.tomorrow,
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 10, 'responsibilities': 'new_vacancy2'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
@@ -143,11 +143,11 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time= today,
-                                              description="lalala", close_time=tomorrow, name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time= self.today,
+                                              description="lalala", close_time= self.tomorrow, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-        response = self.client.patch(url, {'open_time': today, 'close_time': yesterday,
+        response = self.client.patch(url, {'open_time': self.today, 'close_time': self.yesterday,
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'responsibilities': 'new_vacancy2'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
@@ -157,11 +157,11 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
-                                              description="lalala", close_time=tomorrow, name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time= self.today,
+                                              description="lalala", close_time= self.tomorrow, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-        response = self.client.patch(url, {'open_time': today, 'close_time': yesterday,
+        response = self.client.patch(url, {'open_time': self.today, 'close_time': self.yesterday,
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh', 'salary': 'dua juta'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
@@ -175,8 +175,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.client.force_authenticate(user=superuser)
         
         url = '/api/vacancies/'
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': today,
-        	 'close_time': today, 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json')
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': self.today,
+        	 'close_time': self.today, 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json')
         
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
@@ -204,14 +204,12 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        today = datetime.today()
-
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
-                                              description="lalala", close_time=tomorrow, name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time= self.today,
+                                              description="lalala", close_time= self.tomorrow, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
 
-        response = self.client.patch(url, {'open_time': today, 'close_time': today,
+        response = self.client.patch(url, {'open_time': self.today, 'close_time': self.today,
         	'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json')
 
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
@@ -222,8 +220,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
-                                              description="lalala", close_time=tomorrow, name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time= self.today,
+                                              description="lalala", close_time= self.tomorrow, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
 
@@ -240,11 +238,11 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
-                                              description="lalala", close_time=tomorrow, name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time= self.today,
+                                              description="lalala", close_time= self.tomorrow, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-        response = self.client.patch(url, {'open_time': today, 'close_time': tomorrow,
+        response = self.client.patch(url, {'open_time': self.today, 'close_time': self.tomorrow,
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'responsibilities': 'new_vacancy2', 'amount': 'sepuluh'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
@@ -258,8 +256,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
         self.client.force_authenticate(user=superuser)
         
         url = '/api/vacancies/'
-        response = self.client.post(url, {'company': new_company.pk, 'open_time': yesterday,
-        	 'close_time': today, 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json')
+        response = self.client.post(url, {'company': new_company.pk, 'open_time': self.yesterday,
+        	 'close_time': self.today, 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json')
         
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
@@ -277,7 +275,7 @@ class CreateAndUpdateVacancyTest(APITestCase):
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
 
-        response = self.client.patch(url, {'open_time': yesterday, 'close_time': today,
+        response = self.client.patch(url, {'open_time': self.yesterday, 'close_time': self.today,
         	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
-- 
GitLab


From 88ffa33f5296c7b42e04034b3e6f4f27e561d8fb Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Sat, 12 Oct 2019 15:42:51 +0700
Subject: [PATCH 16/21] fix error

---
 core/tests/test_create_vacancies.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py
index 310f64d6..28cca074 100644
--- a/core/tests/test_create_vacancies.py
+++ b/core/tests/test_create_vacancies.py
@@ -54,7 +54,7 @@ class CreateAndUpdateVacancyTest(APITestCase):
         url = '/api/vacancies/'
         response = self.client.post(url, {'company': new_company.pk, 'open_time': self.today,
                                           'close_time': self.tomorrow, 'name': 'new_vacancy',
-                                          'description': 'new_vacancy	', 'amount': 10, 'responsibilities': 'new_vacancy'}, format='json')
+                                          'description': 'new_vacancy	', 'amount': 'sepuluh', 'responsibilities': 'new_vacancy'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
         vacancy = Vacancy.objects.first()
@@ -270,8 +270,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=today,
-                                              description="lalala", close_time=tomorrow, name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=self.today,
+                                              description="lalala", close_time=self.tomorrow, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
 
-- 
GitLab


From 200523ea1c3a15b64e40d2c2bbf8a93f62b665f1 Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Sat, 12 Oct 2019 16:37:04 +0700
Subject: [PATCH 17/21] fix error

---
 core/tests/test_create_vacancies.py | 35 +++++++++++++----------------
 1 file changed, 15 insertions(+), 20 deletions(-)

diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py
index 28cca074..4138dfda 100644
--- a/core/tests/test_create_vacancies.py
+++ b/core/tests/test_create_vacancies.py
@@ -23,7 +23,7 @@ class CreateAndUpdateVacancyTest(APITestCase):
 
         url = '/api/vacancies/'
         response = self.client.post(url, {'company': new_company.pk, 'open_time': self.today,
-        	 'close_time': self.tomorrow, 'name': 'new vacancy', 'description': 'new_vacancy	'}, format='json')
+        	 'close_time': self.tomorrow, 'name': 'new vacancy', 'description': 'new_vacancy	', 'requirements': 'new_vacancy'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
         vacancies = Vacancy.objects.count()
@@ -38,7 +38,7 @@ class CreateAndUpdateVacancyTest(APITestCase):
         url = '/api/vacancies/'
         response = self.client.post(url, {'company': new_company.pk, 'open_time': self.today,
                                           'close_time': self.tomorrow, 'name': 'new vacancy',
-                                          'description': 'new_vacancy	', 'amount': 10}, format='json')
+                                          'description': 'new_vacancy	', 'amount': 10, 'requirements': 'new_vacancy'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
         vacancy = Vacancy.objects.first()
@@ -68,7 +68,7 @@ class CreateAndUpdateVacancyTest(APITestCase):
 
         url = '/api/vacancies/'
         response = self.client.post(url, {'company': new_company.pk, 'open_time': self.today,
-        	 'close_time': self.yesterday, 'name': 'new_vacancy', 'description': 'new_vacancy', 'responsibilities': 'new_vacancy'}, format='json')
+        	 'close_time': self.yesterday, 'name': 'new_vacancy', 'description': 'new_vacancy', 'responsibilities': 'new_vacancy', 'requirements': 'new_vacancy'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
         vacancies = Vacancy.objects.count()
@@ -83,7 +83,7 @@ class CreateAndUpdateVacancyTest(APITestCase):
         url = '/api/vacancies/'
         response = self.client.post(url, {'company': new_company.pk, 'open_time': self.today,
                                           'close_time': self.tomorrow, 'name': 'new_vacancy',
-                                          'description': 'new_vacancy	', 'amount': 'sepuluh', 'salary':'dua juta'}, format='json')
+                                          'description': 'new_vacancy	', 'amount': 'sepuluh', 'salary':'dua juta', 'requirements': 'new_vacancy'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
         vacancies_count = Vacancy.objects.count()
@@ -100,7 +100,7 @@ class CreateAndUpdateVacancyTest(APITestCase):
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
         response = self.client.patch(url, {'open_time': self.today, 'close_time': self.tomorrow,
-        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'responsibilities': 'new_vacancy2'}, format='json')
+        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'responsibilities': 'new_vacancy2', 'requirements': 'new_vacancy2'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
     def test_update_vacancy_with_amount_salary_success(self):
@@ -114,7 +114,7 @@ class CreateAndUpdateVacancyTest(APITestCase):
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
         response = self.client.patch(url, {'open_time': self.today, 'close_time': self.tomorrow,
-        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 10, 'salary': 2, 'responsibilities': 'new_vacancy2'}, format='json')
+        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 10, 'salary': 2, 'responsibilities': 'new_vacancy2', 'requirements': 'new_vacancy2'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
         vacancy = Vacancy.objects.first()
@@ -148,7 +148,7 @@ class CreateAndUpdateVacancyTest(APITestCase):
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
         response = self.client.patch(url, {'open_time': self.today, 'close_time': self.yesterday,
-        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'responsibilities': 'new_vacancy2'}, format='json')
+        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'responsibilities': 'new_vacancy2', 'requirements': 'new_vacancy2'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
     def test_update_vacancy_with_amount_salary_string_failed(self):
@@ -162,7 +162,7 @@ class CreateAndUpdateVacancyTest(APITestCase):
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
         response = self.client.patch(url, {'open_time': self.today, 'close_time': self.yesterday,
-        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh', 'salary': 'dua juta'}, format='json')
+        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh', 'salary': 'dua juta', 'requirements': 'new_vacancy'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
         vacancy = Vacancy.objects.first()
@@ -249,16 +249,15 @@ class CreateAndUpdateVacancyTest(APITestCase):
         vacancy = Vacancy.objects.first()
         self.assertEqual(vacancy.responsibilities, '')
     
-    def test_create_vacancy_with_open_time_before_today_failed(self):
+    def test_new_vacancy_with_open_time_before_today_failed(self):
         superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123')
         new_company = Company.objects.create(user=superuser, description="lalalaz", status=Company.VERIFIED, logo=None,
                                              address=None)
         self.client.force_authenticate(user=superuser)
-        
+
         url = '/api/vacancies/'
         response = self.client.post(url, {'company': new_company.pk, 'open_time': self.yesterday,
-        	 'close_time': self.today, 'name': 'new_vacancy', 'description': 'new_vacancy'}, format='json')
-        
+        	 'close_time': self.today, 'name': 'new_vacancy', 'description': 'new_vacancy', 'responsibilities': 'new_vacancy', 'requirements': 'new_vacancy'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
         vacancies = Vacancy.objects.count()
@@ -270,14 +269,10 @@ class CreateAndUpdateVacancyTest(APITestCase):
                                              address=None)
         self.client.force_authenticate(user=superuser)
 
-        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time=self.today,
-                                              description="lalala", close_time=self.tomorrow, name='new_company')
+        new_vacancy = Vacancy.objects.create(company=new_company, verified=False, open_time= self.today,
+                                              description="lalala", close_time= self.tomorrow, name='new_company')
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
-
         response = self.client.patch(url, {'open_time': self.yesterday, 'close_time': self.today,
-        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh'}, format='json')
-        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
-
-        vacancy = Vacancy.objects.first()
-        self.assertEqual(vacancy.amount, None)
\ No newline at end of file
+        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'responsibilities': 'new_vacancy2', 'requirements': 'new_vacancy2'}, format='json')
+        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
\ No newline at end of file
-- 
GitLab


From 71e0d3b36fde8c8db590ccd7674aa3ff2c46f151 Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Sat, 12 Oct 2019 16:45:44 +0700
Subject: [PATCH 18/21] fix error

---
 core/tests/test_create_vacancies.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py
index 4138dfda..9acd7829 100644
--- a/core/tests/test_create_vacancies.py
+++ b/core/tests/test_create_vacancies.py
@@ -131,7 +131,7 @@ class CreateAndUpdateVacancyTest(APITestCase):
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
         response = self.client.patch(url, {'open_time': self.today, 'close_time': self.tomorrow,
-        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 10, 'responsibilities': 'new_vacancy2'}, format='json')
+        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 10, 'responsibilities': 'new_vacancy2', 'requirements': 'new_vacancy2'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
         vacancy = Vacancy.objects.first()
@@ -210,7 +210,7 @@ class CreateAndUpdateVacancyTest(APITestCase):
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
 
         response = self.client.patch(url, {'open_time': self.today, 'close_time': self.today,
-        	'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json')
+        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'requirements': 'new_vacancy2'}, format='json')
 
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
@@ -226,7 +226,7 @@ class CreateAndUpdateVacancyTest(APITestCase):
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
 
         response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.fromtimestamp(0),
-        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh'}, format='json')
+        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh', 'requirements': 'new_vacancy2'}, , format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
         vacancy = Vacancy.objects.first()
@@ -243,7 +243,7 @@ class CreateAndUpdateVacancyTest(APITestCase):
 
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
         response = self.client.patch(url, {'open_time': self.today, 'close_time': self.tomorrow,
-        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'responsibilities': 'new_vacancy2', 'amount': 'sepuluh'}, format='json')
+        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'responsibilities': 'new_vacancy2', 'amount': 'sepuluh', 'requirements': 'new_vacancy2'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
         vacancy = Vacancy.objects.first()
-- 
GitLab


From a3c84271cf39f7800024a9c5fedc5c9523dea6a4 Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Sat, 12 Oct 2019 16:51:13 +0700
Subject: [PATCH 19/21] Last fix error

---
 core/tests/test_create_vacancies.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py
index 9acd7829..7b558707 100644
--- a/core/tests/test_create_vacancies.py
+++ b/core/tests/test_create_vacancies.py
@@ -226,7 +226,7 @@ class CreateAndUpdateVacancyTest(APITestCase):
         url = '/api/vacancies/' + str(new_vacancy.pk) + '/'
 
         response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.fromtimestamp(0),
-        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh', 'requirements': 'new_vacancy2'}, , format='json')
+        	'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh', 'requirements': 'new_vacancy2'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
 
         vacancy = Vacancy.objects.first()
-- 
GitLab


From d012a95b60691bd35d258f92a1a99d029defc333 Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Sat, 12 Oct 2019 17:01:00 +0700
Subject: [PATCH 20/21] fix failed test

---
 core/tests/test_create_vacancies.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py
index 7b558707..8b126724 100644
--- a/core/tests/test_create_vacancies.py
+++ b/core/tests/test_create_vacancies.py
@@ -53,8 +53,8 @@ class CreateAndUpdateVacancyTest(APITestCase):
 
         url = '/api/vacancies/'
         response = self.client.post(url, {'company': new_company.pk, 'open_time': self.today,
-                                          'close_time': self.tomorrow, 'name': 'new_vacancy',
-                                          'description': 'new_vacancy	', 'amount': 'sepuluh', 'responsibilities': 'new_vacancy'}, format='json')
+                                          'close_time': self.tomorrow, 'name': 'new vacancy',
+                                          'description': 'new_vacancy	', 'amount': 10, 'responsibilities': 'new_vacancy'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
         vacancy = Vacancy.objects.first()
-- 
GitLab


From 9e7c8ab94ab17f8035e737a28dd2c31d3257854c Mon Sep 17 00:00:00 2001
From: Raden Fikri <raden.fikri@ui.ac.id>
Date: Sat, 12 Oct 2019 17:07:35 +0700
Subject: [PATCH 21/21] fix failed test

---
 core/tests/test_create_vacancies.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py
index 8b126724..c5c960f5 100644
--- a/core/tests/test_create_vacancies.py
+++ b/core/tests/test_create_vacancies.py
@@ -54,7 +54,7 @@ class CreateAndUpdateVacancyTest(APITestCase):
         url = '/api/vacancies/'
         response = self.client.post(url, {'company': new_company.pk, 'open_time': self.today,
                                           'close_time': self.tomorrow, 'name': 'new vacancy',
-                                          'description': 'new_vacancy	', 'amount': 10, 'responsibilities': 'new_vacancy'}, format='json')
+                                          'description': 'new_vacancy	', 'amount': 10, 'responsibilities': 'new_vacancy', 'requirements':'new_vacancy'}, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
         vacancy = Vacancy.objects.first()
-- 
GitLab