From 79ae3176086bd8e4925696a8dfd3c0660a133d6a Mon Sep 17 00:00:00 2001 From: root <root@Rama.localdomain> Date: Sun, 6 Oct 2019 14:37:52 +0700 Subject: [PATCH 1/3] implementasi fitur and testing --- .../js/__test__/components/Vacancy-test.jsx | 5 ++- assets/js/components/Vacancy.jsx | 2 +- core/models/vacancies.py | 10 +++++- core/serializers/vacancies.py | 2 +- core/tests/__init__.py | 2 +- core/tests/test_vacancies.py | 33 +++++++++++++++++++ core/views/vacancies.py | 2 ++ 7 files changed, 51 insertions(+), 5 deletions(-) diff --git a/assets/js/__test__/components/Vacancy-test.jsx b/assets/js/__test__/components/Vacancy-test.jsx index 9f1e253b..7a4d61b7 100644 --- a/assets/js/__test__/components/Vacancy-test.jsx +++ b/assets/js/__test__/components/Vacancy-test.jsx @@ -8,6 +8,7 @@ describe('Vacancy', () => { const fetchMock = require('fetch-mock'); const response = { close_time: '2019-03-28T05:55:42Z', + apply_before: '28 March 2019' company: { address: 'kebayoran baru', id: 1, @@ -17,7 +18,7 @@ describe('Vacancy', () => { created: '2017-03-28T07:05:47.128672Z', description: 'Lorem ipsum dolbh.', id: 3, - name: 'Software Engineer', + name: 'Software Engineer', open_time: '2017-03-28T05:55:38Z', updated: '2017-03-28T07:34:13.122093Z', verified: true, @@ -25,6 +26,7 @@ describe('Vacancy', () => { const response2 = { close_time: '2019-03-28T05:55:42Z', + apply_before: '28 March 2019' company: { address: 'kebayoran baru', id: 1, @@ -44,6 +46,7 @@ describe('Vacancy', () => { role: 'company', data: { url: 'http://localhost:8001/api/users/8/', + username: 'Tutuplapak', email: '', is_staff: false, diff --git a/assets/js/components/Vacancy.jsx b/assets/js/components/Vacancy.jsx index a755cca4..11077dce 100644 --- a/assets/js/components/Vacancy.jsx +++ b/assets/js/components/Vacancy.jsx @@ -125,7 +125,7 @@ export default class Vacancy extends React.Component { <h4>{ this.props.data.name }</h4> { this.props.data.company.name }<br /> { this.props.data.company.address }<br /><br /> - <b>{`Ditutup ${moment(moment(this.props.data.close_time)).fromNow()}`}</b> + <b>{this.props.data.apply_before}</b> </Grid.Column> <Grid.Column floated="right" > <Grid.Row textAlign="center"> diff --git a/core/models/vacancies.py b/core/models/vacancies.py index f2b5dc49..44ddc83f 100644 --- a/core/models/vacancies.py +++ b/core/models/vacancies.py @@ -1,7 +1,8 @@ from django.db import models from core.models.accounts import Company, Student - +import datetime +from django.utils import timezone class Vacancy(models.Model): company = models.ForeignKey(Company, related_name="vacancies", null=False) @@ -13,6 +14,12 @@ class Vacancy(models.Model): updated = models.DateTimeField(auto_now=True) name = models.CharField(max_length=100, null=False) + @property + def apply_before(self): + if(self.close_time<timezone.now()): + return "Pendaftaran ditutup" + return "Daftar sebelum "+self.close_time.strftime('%d')+" "+self.close_time.strftime('%B')+" "+self.close_time.strftime('%Y') + class Meta: ordering = ['-updated'] @@ -32,3 +39,4 @@ class Application(models.Model): class Meta: unique_together = (("student", "vacancy"),) + diff --git a/core/serializers/vacancies.py b/core/serializers/vacancies.py index 313f2064..eb2b1b85 100644 --- a/core/serializers/vacancies.py +++ b/core/serializers/vacancies.py @@ -32,7 +32,7 @@ class VacancySerializer(serializers.ModelSerializer): class Meta: model = Vacancy - fields = ['company', 'verified', 'open_time', 'description', 'close_time', 'created', 'updated', 'name', \ + fields = ['company', 'verified', 'open_time', 'description', 'close_time', 'created','apply_before', 'updated', 'name', \ 'status', 'bookmarked', 'id'] diff --git a/core/tests/__init__.py b/core/tests/__init__.py index e8d87c64..00530978 100755 --- a/core/tests/__init__.py +++ b/core/tests/__init__.py @@ -1,4 +1,4 @@ # __init__.py from core.tests.test_accounts import LoginTests, RegisterTests -from core.tests.test_vacancies import ApplicationTests, BookmarkApplicationTests, CompanyListsTests +from core.tests.test_vacancies import ApplicationTests, BookmarkApplicationTests, CompanyListsTests, VacancyTest from core.tests.test_feedbacks import FeedbacksTests diff --git a/core/tests/test_vacancies.py b/core/tests/test_vacancies.py index 1667ac14..12fff282 100644 --- a/core/tests/test_vacancies.py +++ b/core/tests/test_vacancies.py @@ -7,6 +7,8 @@ from rest_framework.test import APITestCase from core.models.accounts import Company, Student, Supervisor from core.models.vacancies import Vacancy, Application +from datetime import timedelta +from django.utils import timezone class ApplicationTests(APITestCase): @@ -165,6 +167,7 @@ class VacancyTest(APITestCase): response = self.client.get(url, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) + def test_unverified_vacancy_list(self): superuser = User.objects.create_superuser('dummy.company', 'dummy.company@company.com', 'lalala123') self.client.force_authenticate(user=superuser) @@ -173,12 +176,42 @@ class VacancyTest(APITestCase): response = self.client.get(url, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) + def test_fail_on_unverified_user_vacancy_list(self): url = '/api/vacancies/' response = self.client.post(url, format='json') self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + + def test_vacancy_is_closed(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) + + new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), + description="lalala", close_time=timezone.now() - timedelta(minutes = 10)) + self.client.force_authenticate(user=superuser) + + response = new_vacancy.apply_before + + self.assertEqual(response, "Pendaftaran ditutup") + + def test_vacancy_is_closed(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) + + new_vacancy = Vacancy.objects.create(company=new_company, verified=True, open_time=datetime.fromtimestamp(0), + description="lalala", close_time=timezone.now() + timedelta(minutes = 10)) + self.client.force_authenticate(user=superuser) + + response = new_vacancy.apply_before + + self.assertNotEqual(response, "Pendaftaran ditutup") + + + class CompanyListsTests(APITestCase): def test_company_vacancy_list(self): new_user = User.objects.create_user('dummy.company3', 'dummy.company3@company.com', 'lalala123') diff --git a/core/views/vacancies.py b/core/views/vacancies.py index 39f7422e..e909d3da 100644 --- a/core/views/vacancies.py +++ b/core/views/vacancies.py @@ -40,6 +40,8 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet): if verified.lower() in {"no", "false", "f", "0"}: vacancies = vacancies.filter(verified=False) page = self.paginate_queryset(vacancies) + print(vacancies) + print(request) if page is not None: return self.get_paginated_response(VacancySerializer(page, many=True, context={'request': request}).data) return Response(VacancySerializer(vacancies, many=True, context={'request': request}).data) -- GitLab From ca6b936648b5122125c4c3cbe6d6d4f4b65f4c37 Mon Sep 17 00:00:00 2001 From: root <root@Rama.localdomain> Date: Tue, 8 Oct 2019 00:16:40 +0700 Subject: [PATCH 2/3] resolve conflict makemigrations --- core/migrations/0024_auto_20191007_1120.py | 26 ------------------- ...07_1120.py => 0025_merge_20191008_0014.py} | 4 +-- 2 files changed, 2 insertions(+), 28 deletions(-) delete mode 100644 core/migrations/0024_auto_20191007_1120.py rename core/migrations/{0023_merge_20191007_1120.py => 0025_merge_20191008_0014.py} (71%) diff --git a/core/migrations/0024_auto_20191007_1120.py b/core/migrations/0024_auto_20191007_1120.py deleted file mode 100644 index 6135dec4..00000000 --- a/core/migrations/0024_auto_20191007_1120.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2019-10-07 04:20 -from __future__ import unicode_literals - -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0023_merge_20191007_1120'), - ] - - 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/0023_merge_20191007_1120.py b/core/migrations/0025_merge_20191008_0014.py similarity index 71% rename from core/migrations/0023_merge_20191007_1120.py rename to core/migrations/0025_merge_20191008_0014.py index d9ada91b..29cd7ddd 100644 --- a/core/migrations/0023_merge_20191007_1120.py +++ b/core/migrations/0025_merge_20191008_0014.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.10.5 on 2019-10-07 04:20 +# Generated by Django 1.10.5 on 2019-10-07 17:14 from __future__ import unicode_literals from django.db import migrations @@ -9,7 +9,7 @@ class Migration(migrations.Migration): dependencies = [ ('core', '0020_merge_20191006_1444'), - ('core', '0022_merge_20191006_1851'), + ('core', '0024_auto_20191007_1533'), ] operations = [ -- GitLab From 49fad0ce8f18fa84553c10b06e1baedcf76364f1 Mon Sep 17 00:00:00 2001 From: root <root@Rama.localdomain> Date: Tue, 8 Oct 2019 09:24:51 +0700 Subject: [PATCH 3/3] merge migrations --- core/migrations/0028_merge_20191008_0921.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 core/migrations/0028_merge_20191008_0921.py diff --git a/core/migrations/0028_merge_20191008_0921.py b/core/migrations/0028_merge_20191008_0921.py new file mode 100644 index 00000000..2e5e9f0f --- /dev/null +++ b/core/migrations/0028_merge_20191008_0921.py @@ -0,0 +1,16 @@ +# -*- 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 = [ + ] -- GitLab