From 271db254c38ac1273dedd7fde192b48564a838b1 Mon Sep 17 00:00:00 2001 From: refoilmiya <refo.ilmiya@gmail.com> Date: Sun, 6 Oct 2019 02:35:27 +0700 Subject: [PATCH 1/4] [RED] created testcases for create and update vacancies with amount --- core/tests/test_create_vacancies.py | 66 ++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/core/tests/test_create_vacancies.py b/core/tests/test_create_vacancies.py index 3a8fd4ad..f33198b8 100644 --- a/core/tests/test_create_vacancies.py +++ b/core/tests/test_create_vacancies.py @@ -23,6 +23,21 @@ class CreateAndUpdateVacancyTest(APITestCase): vacancies = Vacancy.objects.count() self.assertEqual(vacancies,1) + def test_new_vacancy_with_amount_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, + address=None) + 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 ', 'amount': 10}, format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + vacancy = Vacancy.objects.first() + self.assertEqual(vacancy.amount, 10) + def test_new_vacancy_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, @@ -37,6 +52,21 @@ class CreateAndUpdateVacancyTest(APITestCase): vacancies = Vacancy.objects.count() self.assertEqual(vacancies,0) + def test_new_vacancy_with_amount_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': datetime.fromtimestamp(0), + 'close_time': datetime.today(), 'name': 'new_vacancy', + 'description': 'new_vacancy ', 'amount': 'sepuluh'}, format='json') + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + + vacancies_count = Vacancy.objects.count() + self.assertEqual(vacancies_count, 0) + def test_update_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, @@ -51,6 +81,23 @@ class CreateAndUpdateVacancyTest(APITestCase): 'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) + def test_update_vacancy_with_amount_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, + 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') + + url = '/api/vacancies/' + str(new_vacancy.pk) + '/' + response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(), + 'name': 'new_vacancy2', 'description': 'new_vacancy2', 'acmount': 10}, format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + vacancy = Vacancy.objects.first() + self.assertEqual(vacancy.amount, 10) + def test_update_vacancy_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, @@ -63,4 +110,21 @@ class CreateAndUpdateVacancyTest(APITestCase): url = '/api/vacancies/' + str(new_vacancy.pk) + '/' response = self.client.patch(url, {'open_time': datetime.today(), 'close_time': datetime.fromtimestamp(0), 'name': 'new_vacancy2', 'description': 'new_vacancy2'}, format='json') - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) \ No newline at end of file + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + + def test_update_vacancy_with_amount_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=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': datetime.fromtimestamp(0), 'close_time': datetime.today(), + 'name': 'new_vacancy2', 'description': 'new_vacancy2', 'acmount': 'sepuluh'}, format='json') + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + + vacancies_count = Vacancy.objects.count() + self.assertEqual(vacancies_count, 0) -- GitLab From cc45e727f0148c81086080ab6b4ab460d3c0c88d Mon Sep 17 00:00:00 2001 From: refoilmiya <refo.ilmiya@gmail.com> Date: Sun, 6 Oct 2019 02:36:21 +0700 Subject: [PATCH 2/4] [RED] altered table Vacancy in models.py --- core/migrations/0017_vacancy_amount.py | 20 ++++++++++++++++++++ core/models/vacancies.py | 1 + 2 files changed, 21 insertions(+) create mode 100644 core/migrations/0017_vacancy_amount.py diff --git a/core/migrations/0017_vacancy_amount.py b/core/migrations/0017_vacancy_amount.py new file mode 100644 index 00000000..e4c4c91e --- /dev/null +++ b/core/migrations/0017_vacancy_amount.py @@ -0,0 +1,20 @@ +# -*- 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/models/vacancies.py b/core/models/vacancies.py index f2b5dc49..9d3db16a 100644 --- a/core/models/vacancies.py +++ b/core/models/vacancies.py @@ -12,6 +12,7 @@ class Vacancy(models.Model): created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) name = models.CharField(max_length=100, null=False) + amount = models.IntegerField(null=True) class Meta: ordering = ['-updated'] -- GitLab From 484715e9cf99d8c18178ad526b2b431a661434b0 Mon Sep 17 00:00:00 2001 From: refoilmiya <refo.ilmiya@gmail.com> Date: Sun, 6 Oct 2019 02:46:49 +0700 Subject: [PATCH 3/4] [RED] fixing testcases for update vacancies with amount unittests --- 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 f33198b8..9d8cd65b 100644 --- a/core/tests/test_create_vacancies.py +++ b/core/tests/test_create_vacancies.py @@ -92,7 +92,7 @@ class CreateAndUpdateVacancyTest(APITestCase): url = '/api/vacancies/' + str(new_vacancy.pk) + '/' response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(), - 'name': 'new_vacancy2', 'description': 'new_vacancy2', 'acmount': 10}, format='json') + 'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 10}, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) vacancy = Vacancy.objects.first() @@ -123,8 +123,8 @@ class CreateAndUpdateVacancyTest(APITestCase): url = '/api/vacancies/' + str(new_vacancy.pk) + '/' response = self.client.patch(url, {'open_time': datetime.fromtimestamp(0), 'close_time': datetime.today(), - 'name': 'new_vacancy2', 'description': 'new_vacancy2', 'acmount': 'sepuluh'}, format='json') + 'name': 'new_vacancy2', 'description': 'new_vacancy2', 'amount': 'sepuluh'}, format='json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - vacancies_count = Vacancy.objects.count() - self.assertEqual(vacancies_count, 0) + vacancy = Vacancy.objects.first() + self.assertEqual(vacancy.amount, None) -- GitLab From d36f7ac88d1313ddadc98d617fec93ef3055d2c6 Mon Sep 17 00:00:00 2001 From: refoilmiya <refo.ilmiya@gmail.com> Date: Sun, 6 Oct 2019 02:49:58 +0700 Subject: [PATCH 4/4] [GREEN] Finished implementing amount for vacancies create and update --- core/views/vacancies.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/core/views/vacancies.py b/core/views/vacancies.py index 56165caa..64643c4f 100644 --- a/core/views/vacancies.py +++ b/core/views/vacancies.py @@ -57,6 +57,11 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet): if 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: + if isinstance(data['amount'], int): + vacancy.amount = data['amount'] + else: + return Response(status=status.HTTP_400_BAD_REQUEST) vacancy.save() return Response(status=status.HTTP_200_OK) @@ -73,6 +78,11 @@ class VacancyViewSet(MultiSerializerViewSetMixin, viewsets.ModelViewSet): vacancy.close_time = close_time vacancy.name = name vacancy.description = description + if 'amount' in data: + if isinstance(data['amount'], int): + vacancy.amount = data['amount'] + else: + return Response(status=status.HTTP_400_BAD_REQUEST) vacancy.save() return Response(status=status.HTTP_200_OK) @@ -255,11 +265,11 @@ class CompanyApplicationViewSet(viewsets.GenericViewSet): company = get_object_or_404(Company.objects.all().order_by('-updated'), pk=company_id) if not self.__validating_user(request, company): raise UnauthorizeError - return company + return company def __validating_user(self, request, company): return request.user.is_superuser or request.user == company.user - + def __get_vacancy_list_by_pk(self, pk, company): vacancy = get_object_or_404(Vacancy.objects.all(), pk=pk) if not self.__validating_vacancy(vacancy, company): @@ -280,7 +290,7 @@ class CompanyApplicationViewSet(viewsets.GenericViewSet): def __get_status_from_request_param(self, request): return request.query_params.get('status', None) - + def __validating_application_status(self, status): list_status = {0 : "NEW", 1 : "READ", 2 : "BOOKMARKED", 3 : "REJECTED", 4: "ACCEPTED"} if status not in list_status: -- GitLab