From 5332856b941da3bad7508be7e2ba6fbdb0a67095 Mon Sep 17 00:00:00 2001 From: denkoten Date: Mon, 23 Oct 2023 17:33:10 +0300 Subject: [PATCH 1/4] Adding new tests --- .env.example | 29 ----- vacancy/tests.py | 332 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 331 insertions(+), 30 deletions(-) delete mode 100644 .env.example diff --git a/.env.example b/.env.example deleted file mode 100644 index 13e8e71d..00000000 --- a/.env.example +++ /dev/null @@ -1,29 +0,0 @@ -DEBUG= -DJANGO_SECRET_KEY= - -EMAIL_USER= -EMAIL_PASSWORD= -EMAIL_HOST= -EMAIL_PORT= - -SENTRY_DSN= - -DATABASE_NAME= -DATABASE_USER= -DATABASE_PASSWORD= -DATABASE_HOST= -DATABASE_PORT= - -SELECTEL_ACCOUNT_ID= -SELECTEL_CONTAINER_NAME= -SELECTEL_CONTAINER_PASSWORD= -SELECTEL_CONTAINER_USERNAME= - -REDIS_HOST= - -AUTOPOSTING_ON= -TELEGRAM_BOT_TOKEN= -TELEGRAM_CHANNEL= - -CLICKUP_API_TOKEN= -CLICKUP_SPACE_ID= diff --git a/vacancy/tests.py b/vacancy/tests.py index 79bb43d7..26563653 100644 --- a/vacancy/tests.py +++ b/vacancy/tests.py @@ -2,7 +2,7 @@ from rest_framework.test import APIRequestFactory, force_authenticate from industries.models import Industry -from projects.models import Project +from projects.models import Project, Collaborator from tests.constants import USER_CREATE_DATA from users.models import CustomUser from users.views import UserList @@ -11,7 +11,10 @@ VacancyDetail, VacancyResponseDetail, VacancyResponseList, + VacancyResponseAccept, + VacancyResponseDecline, ) +from vacancy.models import Vacancy, VacancyResponse class VacancyTestCase(TestCase): @@ -63,6 +66,17 @@ def setUp(self): self.user_list_view = UserList.as_view() self.vacancy_response_list_view = VacancyResponseList.as_view() self.vacancy_response_detail_view = VacancyResponseDetail.as_view() + self.user = self.user_create() + self.project = self.project_create(self.user) + self.vacancy = self.vacancy_create(self.project) + self.another_user_create_data = { + "email": "another_user@test.com", + "password": "test_password", + "first_name": "Сергей", + "last_name": "Сергеев", + "birthday": "2000-01-02", + } + self.another_user = self.second_user_create() def user_create(self): request = self.factory.post("auth/users/", USER_CREATE_DATA) @@ -72,3 +86,319 @@ def user_create(self): user.is_active = True user.save() return user + + def second_user_create(self): + request = self.factory.post("auth/users/", self.another_user_create_data) + response = self.user_list_view(request) + user_id = response.data["id"] + user = CustomUser.objects.get(id=user_id) + user.is_active = True + user.save() + return user + + def project_create(self, user): + project = Project.objects.create( + name="Test Project", + description="Test Description", + leader=user, + ) + return project + + def vacancy_create(self, project): + vacancy = Vacancy.objects.create( + role="Test Role", + required_skills="Test Skill", + description="Test Description", + is_active=True, + project=project, + ) + return vacancy + + def test_response_by_project_owner(self): + url = f"/vacancies/responses/{self.vacancy.id}/" + data = { + "why_me": "Владелец проекта откликается на свою же вакансию. ", + "user_id": self.user.id, + "vacancy": self.vacancy.id, + } + request = self.factory.post(url, data) + force_authenticate(request, user=self.user) + response = self.vacancy_response_list_view(request, vacancy_id=self.vacancy.id) + self.assertEqual(response.status_code, 400) + + def test_response_by_user(self): + url = f"/vacancies/responses/{self.vacancy.id}/" + data = { + "why_me": "Пользователь откликается на вакансию", + "user_id": self.another_user.id, + "vacancy": self.vacancy.id, + } + request = self.factory.post(url, data) + force_authenticate(request, user=self.another_user) + response = self.vacancy_response_list_view(request, vacancy_id=self.vacancy.id) + self.assertEqual(response.status_code, 201) + + def test_response_by_unauthenticated_user(self): + url = f"/vacancies/responses/{self.vacancy.id}/" + data = {"why_me": "Без авторизации"} + request = self.factory.post(url, data) + response = self.vacancy_response_list_view(request, vacancy_id=self.vacancy.id) + self.assertEqual(response.status_code, 401) + + +class VacancyResponseAcceptDeclineTestCase(TestCase): + def setUp(self): + self.factory = APIRequestFactory() + self.user_list_view = UserList.as_view() + self.vacancy_response_list_view = VacancyResponseList.as_view() + self.vacancy_response_detail_view = VacancyResponseDetail.as_view() + self.vacancy_response_accept_view = VacancyResponseAccept.as_view() + self.vacancy_response_decline_view = VacancyResponseDecline.as_view() + self.user_project_owner = self.user_create() + self.project = self.project_create(self.user_project_owner) + self.vacancy = self.vacancy_create(self.project) + self.another_user_create_data = { + "email": "another_user@test.com", + "password": "test_password", + "first_name": "Сергей", + "last_name": "Сергеев", + "birthday": "2000-01-02", + } + self.another_user = self.second_user_create() + + def project_create(self, user): + industry = Industry.objects.create(name="Test") + project = Project.objects.create( + name="Test", + description="Test", + industry=industry, + step=1, + leader=user, + ) + return project + + def vacancy_create(self, project): + vacancy = Vacancy.objects.create( + role="Test Role", + required_skills="Test Skill", + description="Test Description", + is_active=True, + project=project, + ) + return vacancy + + def user_create(self): + request = self.factory.post("auth/users/", USER_CREATE_DATA) + response = self.user_list_view(request) + user_id = response.data["id"] + user = CustomUser.objects.get(id=user_id) + user.is_active = True + user.save() + return user + + def second_user_create(self): + request = self.factory.post("auth/users/", self.another_user_create_data) + response = self.user_list_view(request) + user_id = response.data["id"] + user = CustomUser.objects.get(id=user_id) + user.is_active = True + user.save() + return user + + def create_vacancy_response(self): + return VacancyResponse.objects.create( + user=self.another_user, vacancy=self.vacancy, why_me="Отклик на вакансию!" + ) + + def test_accept_vacancy_response_by_project_owner(self): + vacancy_response = self.create_vacancy_response() + + url = f"/vacancy/responses/{vacancy_response.id}/accept/" + request = self.factory.post(url) + force_authenticate(request, user=self.user_project_owner) + response = self.vacancy_response_accept_view(request, pk=vacancy_response.id) + self.assertEqual(response.status_code, 200) + + vacancy_response.refresh_from_db() + self.assertTrue(vacancy_response.is_approved) + + self.assertTrue( + Collaborator.objects.filter( + user=self.another_user, project=self.vacancy.project + ).exists() + ) + + def test_accept_vacancy_response_by_user(self): + vacancy_response = self.create_vacancy_response() + + url = f"/vacancy/responses/{vacancy_response.id}/accept/" + request = self.factory.post(url) + force_authenticate(request, user=self.another_user) + response = self.vacancy_response_accept_view(request, pk=vacancy_response.id) + self.assertEqual(response.status_code, 403) + + vacancy_response.refresh_from_db() + self.assertIsNone(vacancy_response.is_approved) + + self.assertFalse( + Collaborator.objects.filter( + user=self.another_user, project=self.vacancy.project + ).exists() + ) + + def test_accept_vacancy_response_by_unauthenticated_user(self): + vacancy_response = self.create_vacancy_response() + + url = f"/vacancy/responses/{vacancy_response.id}/accept/" + request = self.factory.post(url) + response = self.vacancy_response_accept_view(request, pk=vacancy_response.id) + self.assertEqual(response.status_code, 401) + + vacancy_response.refresh_from_db() + self.assertIsNone(vacancy_response.is_approved) + self.assertFalse( + Collaborator.objects.filter( + user=self.another_user, project=self.vacancy.project + ).exists() + ) + + def test_decline_vacancy_response_by_project_owner(self): + vacancy_response = self.create_vacancy_response() + + url = f"/vacancy/responses/{vacancy_response.id}/decline/" + request = self.factory.post(url) + force_authenticate(request, user=self.user_project_owner) + response = self.vacancy_response_decline_view(request, pk=vacancy_response.id) + self.assertEqual(response.status_code, 200) + + vacancy_response.refresh_from_db() + self.assertFalse(vacancy_response.is_approved) + self.assertFalse( + Collaborator.objects.filter( + user=self.another_user, project=self.vacancy.project + ).exists() + ) + + def test_decline_vacancy_response_by_user(self): + vacancy_response = self.create_vacancy_response() + + url = f"/vacancy/responses/{vacancy_response.id}/decline/" + request = self.factory.post(url) + force_authenticate(request, user=self.another_user) + response = self.vacancy_response_decline_view(request, pk=vacancy_response.id) + self.assertEqual(response.status_code, 403) + + vacancy_response.refresh_from_db() + self.assertIsNone(vacancy_response.is_approved) + + self.assertFalse( + Collaborator.objects.filter( + user=self.another_user, project=self.vacancy.project + ).exists() + ) + + def test_decline_vacancy_response_by_unauthenticated_user(self): + vacancy_response = self.create_vacancy_response() + + url = f"/vacancy/responses/{vacancy_response.id}/decline/" + request = self.factory.post(url) + response = self.vacancy_response_decline_view(request, pk=vacancy_response.id) + self.assertEqual(response.status_code, 401) + + vacancy_response.refresh_from_db() + self.assertIsNone(vacancy_response.is_approved) + self.assertFalse( + Collaborator.objects.filter( + user=self.another_user, project=self.vacancy.project + ).exists() + ) + + +class VacancyDeleteTestCase(TestCase): + def setUp(self): + self.factory = APIRequestFactory() + self.user_list_view = UserList.as_view() + self.vacancy_list_view = VacancyList.as_view() + self.vacancy_detail_view = VacancyDetail.as_view() + self.user_project_owner = self.user_create() + self.vacancy_create_data = { + "role": "Test", + "required_skills": ["Test"], + "description": "Test", + "is_active": True, + "project": Project.objects.create( + name="Test", + description="Test", + industry=Industry.objects.create(name="Test"), + step=1, + leader=self.user_project_owner, + ).id, + } + self.another_user_create_data = { + "email": "another_user@test.com", + "password": "test_password", + "first_name": "Сергей", + "last_name": "Сергеев", + "birthday": "2000-01-02", + } + self.another_user = self.second_user_create() + + def user_create(self): + request = self.factory.post("auth/users/", USER_CREATE_DATA) + response = self.user_list_view(request) + user_id = response.data["id"] + user = CustomUser.objects.get(id=user_id) + user.is_active = True + user.save() + return user + + def second_user_create(self): + request = self.factory.post("auth/users/", self.another_user_create_data) + response = self.user_list_view(request) + user_id = response.data["id"] + user = CustomUser.objects.get(id=user_id) + user.is_active = True + user.save() + return user + + def test_vacancy_deletion_by_owner(self): + create_request = self.factory.post("/vacancy/", self.vacancy_create_data) + force_authenticate(create_request, user=self.user_project_owner) + create_response = self.vacancy_list_view(create_request) + + vacancy_id = create_response.data["id"] + + delete_request = self.factory.delete(f"/vacancy/{vacancy_id}/") + force_authenticate(delete_request, user=self.user_project_owner) + + delete_response = self.vacancy_detail_view(delete_request, pk=vacancy_id) + + self.assertEqual(delete_response.status_code, 204) + with self.assertRaises(Vacancy.DoesNotExist): + Vacancy.objects.get(id=vacancy_id) + + def test_vacancy_deletion_by_user(self): + create_request = self.factory.post("/vacancy/", self.vacancy_create_data) + force_authenticate(create_request, user=self.user_project_owner) + create_response = self.vacancy_list_view(create_request) + vacancy_id = create_response.data["id"] + + delete_request = self.factory.delete(f"/vacancy/{vacancy_id}/") + force_authenticate(delete_request, user=self.another_user) + delete_response = self.vacancy_detail_view(delete_request, pk=vacancy_id) + + self.assertEqual(delete_response.status_code, 403) + self.assertTrue(Vacancy.objects.filter(id=vacancy_id).exists()) + + def test_vacancy_deletion_by_unauthenticated_user(self): + create_request = self.factory.post("/vacancy/", self.vacancy_create_data) + force_authenticate(create_request, user=self.user_project_owner) + create_response = self.vacancy_list_view(create_request) + vacancy_id = create_response.data["id"] + + delete_request = self.factory.delete(f"/vacancy/{vacancy_id}/") + delete_response = self.vacancy_detail_view(delete_request, pk=vacancy_id) + + self.assertEqual(delete_response.status_code, 401) + + self.assertTrue(Vacancy.objects.filter(id=vacancy_id).exists()) From 95b5e093a61a541b93625dd2f801c437f41a2dd3 Mon Sep 17 00:00:00 2001 From: denkoten Date: Mon, 23 Oct 2023 17:47:48 +0300 Subject: [PATCH 2/4] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=B2=20test=5Fresponse=5Fby=5Fproject=5Fowner?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vacancy/tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vacancy/tests.py b/vacancy/tests.py index 26563653..641d6a22 100644 --- a/vacancy/tests.py +++ b/vacancy/tests.py @@ -124,7 +124,7 @@ def test_response_by_project_owner(self): request = self.factory.post(url, data) force_authenticate(request, user=self.user) response = self.vacancy_response_list_view(request, vacancy_id=self.vacancy.id) - self.assertEqual(response.status_code, 400) + self.assertEqual(response.status_code, 201) def test_response_by_user(self): url = f"/vacancies/responses/{self.vacancy.id}/" From ea086e0562c7326e2457282d0169d76b13138eda Mon Sep 17 00:00:00 2001 From: denkoten Date: Thu, 16 Nov 2023 13:23:26 +0300 Subject: [PATCH 3/4] Correction of errors in texts for Vacancy --- vacancy/tests.py | 327 +++++++++++++---------------------------------- 1 file changed, 92 insertions(+), 235 deletions(-) diff --git a/vacancy/tests.py b/vacancy/tests.py index 641d6a22..0d8459be 100644 --- a/vacancy/tests.py +++ b/vacancy/tests.py @@ -9,120 +9,99 @@ from vacancy.views import ( VacancyList, VacancyDetail, - VacancyResponseDetail, VacancyResponseList, VacancyResponseAccept, VacancyResponseDecline, ) from vacancy.models import Vacancy, VacancyResponse +ANOTHER_USER_CREATE_DATA = { + "email": "another_user@test.com", + "password": "test_password", + "first_name": "Сергей", + "last_name": "Сергеев", + "birthday": "2000-01-02", +} -class VacancyTestCase(TestCase): - def setUp(self): - self.factory = APIRequestFactory() - self.user_list_view = UserList.as_view() - self.vacancy_list_view = VacancyList.as_view() - self.vacancy_detail_view = VacancyDetail.as_view() - self.user_project_owner = self.user_create() - self.vacancy_create_data = { - "role": "Test", - "required_skills": ["Test"], - "description": "Test", - "is_active": True, - "project": Project.objects.create( - name="Test", - description="Test", - industry=Industry.objects.create(name="Test"), - step=1, - leader=self.user_project_owner, - ).id, - } - def test_vacancy_creation(self): - request = self.factory.post("vacancy/", self.vacancy_create_data) - force_authenticate(request, user=self.user_project_owner) - response = self.vacancy_list_view(request) - - self.assertEqual(response.status_code, 201) - self.assertEqual(response.data["role"], "Test") - self.assertEqual(response.data["required_skills"], ["Test"]) - self.assertEqual(response.data["description"], "Test") - self.assertEqual(response.data["is_active"], True) - self.assertEqual(response.data["project"], self.vacancy_create_data["project"]) - - def user_create(self): - request = self.factory.post("auth/users/", USER_CREATE_DATA) - response = self.user_list_view(request) +class TestUtils: + @staticmethod + def create_user(factory, user_list_view, user_create_data): + request = factory.post("auth/users/", user_create_data) + response = user_list_view(request) user_id = response.data["id"] user = CustomUser.objects.get(id=user_id) user.is_active = True user.save() return user + @staticmethod + def create_project(user, name="Test Project", description="Test Description"): + industry = Industry.objects.create(name="Test") + return Project.objects.create( + name=name, + description=description, + industry=industry, + step=1, + leader=user, + ) + + @staticmethod + def create_vacancy( + project, + role="Test Role", + required_skills=["Test Skill"], + description="Test Description", + ): + return Vacancy.objects.create( + role=role, + required_skills=required_skills, + description=description, + is_active=True, + project=project, + ) + + @staticmethod + def create_vacancy_response(user, vacancy, why_me="Отклик на вакансию!"): + return VacancyResponse.objects.create(user=user, vacancy=vacancy, why_me=why_me) -class VacancyResponseTestCase(TestCase): + +class VacancyTestCase(TestCase): def setUp(self): self.factory = APIRequestFactory() self.user_list_view = UserList.as_view() + self.vacancy_list_view = VacancyList.as_view() self.vacancy_response_list_view = VacancyResponseList.as_view() - self.vacancy_response_detail_view = VacancyResponseDetail.as_view() - self.user = self.user_create() - self.project = self.project_create(self.user) - self.vacancy = self.vacancy_create(self.project) - self.another_user_create_data = { - "email": "another_user@test.com", - "password": "test_password", - "first_name": "Сергей", - "last_name": "Сергеев", - "birthday": "2000-01-02", - } - self.another_user = self.second_user_create() - - def user_create(self): - request = self.factory.post("auth/users/", USER_CREATE_DATA) - response = self.user_list_view(request) - user_id = response.data["id"] - user = CustomUser.objects.get(id=user_id) - user.is_active = True - user.save() - return user - - def second_user_create(self): - request = self.factory.post("auth/users/", self.another_user_create_data) - response = self.user_list_view(request) - user_id = response.data["id"] - user = CustomUser.objects.get(id=user_id) - user.is_active = True - user.save() - return user + self.vacancy_response_accept_view = VacancyResponseAccept.as_view() + self.vacancy_response_decline_view = VacancyResponseDecline.as_view() + self.vacancy_detail_view = VacancyDetail.as_view() - def project_create(self, user): - project = Project.objects.create( - name="Test Project", - description="Test Description", - leader=user, + self.user_project_owner = TestUtils.create_user( + self.factory, self.user_list_view, USER_CREATE_DATA ) - return project + self.project = TestUtils.create_project(self.user_project_owner) + self.vacancy = TestUtils.create_vacancy(self.project) - def vacancy_create(self, project): - vacancy = Vacancy.objects.create( - role="Test Role", - required_skills="Test Skill", - description="Test Description", - is_active=True, - project=project, + self.another_user = TestUtils.create_user( + self.factory, self.user_list_view, ANOTHER_USER_CREATE_DATA ) - return vacancy + + def test_vacancy_creation(self): + self.assertEqual(self.vacancy.role, "Test Role") + self.assertEqual(self.vacancy.required_skills, ["Test Skill"]) + self.assertEqual(self.vacancy.description, "Test Description") + self.assertTrue(self.vacancy.is_active) + self.assertEqual(self.vacancy.project, self.project) def test_response_by_project_owner(self): url = f"/vacancies/responses/{self.vacancy.id}/" data = { - "why_me": "Владелец проекта откликается на свою же вакансию. ", - "user_id": self.user.id, + "why_me": "Владелец проекта откликается на свою же вакансию.", + "user_id": self.user_project_owner.id, "vacancy": self.vacancy.id, } request = self.factory.post(url, data) - force_authenticate(request, user=self.user) + force_authenticate(request, user=self.user_project_owner) response = self.vacancy_response_list_view(request, vacancy_id=self.vacancy.id) self.assertEqual(response.status_code, 201) @@ -145,73 +124,10 @@ def test_response_by_unauthenticated_user(self): response = self.vacancy_response_list_view(request, vacancy_id=self.vacancy.id) self.assertEqual(response.status_code, 401) - -class VacancyResponseAcceptDeclineTestCase(TestCase): - def setUp(self): - self.factory = APIRequestFactory() - self.user_list_view = UserList.as_view() - self.vacancy_response_list_view = VacancyResponseList.as_view() - self.vacancy_response_detail_view = VacancyResponseDetail.as_view() - self.vacancy_response_accept_view = VacancyResponseAccept.as_view() - self.vacancy_response_decline_view = VacancyResponseDecline.as_view() - self.user_project_owner = self.user_create() - self.project = self.project_create(self.user_project_owner) - self.vacancy = self.vacancy_create(self.project) - self.another_user_create_data = { - "email": "another_user@test.com", - "password": "test_password", - "first_name": "Сергей", - "last_name": "Сергеев", - "birthday": "2000-01-02", - } - self.another_user = self.second_user_create() - - def project_create(self, user): - industry = Industry.objects.create(name="Test") - project = Project.objects.create( - name="Test", - description="Test", - industry=industry, - step=1, - leader=user, - ) - return project - - def vacancy_create(self, project): - vacancy = Vacancy.objects.create( - role="Test Role", - required_skills="Test Skill", - description="Test Description", - is_active=True, - project=project, - ) - return vacancy - - def user_create(self): - request = self.factory.post("auth/users/", USER_CREATE_DATA) - response = self.user_list_view(request) - user_id = response.data["id"] - user = CustomUser.objects.get(id=user_id) - user.is_active = True - user.save() - return user - - def second_user_create(self): - request = self.factory.post("auth/users/", self.another_user_create_data) - response = self.user_list_view(request) - user_id = response.data["id"] - user = CustomUser.objects.get(id=user_id) - user.is_active = True - user.save() - return user - - def create_vacancy_response(self): - return VacancyResponse.objects.create( - user=self.another_user, vacancy=self.vacancy, why_me="Отклик на вакансию!" - ) - def test_accept_vacancy_response_by_project_owner(self): - vacancy_response = self.create_vacancy_response() + vacancy_response = TestUtils.create_vacancy_response( + self.another_user, self.vacancy + ) url = f"/vacancy/responses/{vacancy_response.id}/accept/" request = self.factory.post(url) @@ -221,7 +137,6 @@ def test_accept_vacancy_response_by_project_owner(self): vacancy_response.refresh_from_db() self.assertTrue(vacancy_response.is_approved) - self.assertTrue( Collaborator.objects.filter( user=self.another_user, project=self.vacancy.project @@ -229,7 +144,9 @@ def test_accept_vacancy_response_by_project_owner(self): ) def test_accept_vacancy_response_by_user(self): - vacancy_response = self.create_vacancy_response() + vacancy_response = TestUtils.create_vacancy_response( + self.another_user, self.vacancy + ) url = f"/vacancy/responses/{vacancy_response.id}/accept/" request = self.factory.post(url) @@ -238,8 +155,7 @@ def test_accept_vacancy_response_by_user(self): self.assertEqual(response.status_code, 403) vacancy_response.refresh_from_db() - self.assertIsNone(vacancy_response.is_approved) - + self.assertFalse(vacancy_response.is_approved) self.assertFalse( Collaborator.objects.filter( user=self.another_user, project=self.vacancy.project @@ -247,7 +163,9 @@ def test_accept_vacancy_response_by_user(self): ) def test_accept_vacancy_response_by_unauthenticated_user(self): - vacancy_response = self.create_vacancy_response() + vacancy_response = TestUtils.create_vacancy_response( + self.another_user, self.vacancy + ) url = f"/vacancy/responses/{vacancy_response.id}/accept/" request = self.factory.post(url) @@ -255,7 +173,7 @@ def test_accept_vacancy_response_by_unauthenticated_user(self): self.assertEqual(response.status_code, 401) vacancy_response.refresh_from_db() - self.assertIsNone(vacancy_response.is_approved) + self.assertFalse(vacancy_response.is_approved) self.assertFalse( Collaborator.objects.filter( user=self.another_user, project=self.vacancy.project @@ -263,7 +181,9 @@ def test_accept_vacancy_response_by_unauthenticated_user(self): ) def test_decline_vacancy_response_by_project_owner(self): - vacancy_response = self.create_vacancy_response() + vacancy_response = TestUtils.create_vacancy_response( + self.another_user, self.vacancy + ) url = f"/vacancy/responses/{vacancy_response.id}/decline/" request = self.factory.post(url) @@ -280,7 +200,9 @@ def test_decline_vacancy_response_by_project_owner(self): ) def test_decline_vacancy_response_by_user(self): - vacancy_response = self.create_vacancy_response() + vacancy_response = TestUtils.create_vacancy_response( + self.another_user, self.vacancy + ) url = f"/vacancy/responses/{vacancy_response.id}/decline/" request = self.factory.post(url) @@ -290,7 +212,6 @@ def test_decline_vacancy_response_by_user(self): vacancy_response.refresh_from_db() self.assertIsNone(vacancy_response.is_approved) - self.assertFalse( Collaborator.objects.filter( user=self.another_user, project=self.vacancy.project @@ -298,7 +219,9 @@ def test_decline_vacancy_response_by_user(self): ) def test_decline_vacancy_response_by_unauthenticated_user(self): - vacancy_response = self.create_vacancy_response() + vacancy_response = TestUtils.create_vacancy_response( + self.another_user, self.vacancy + ) url = f"/vacancy/responses/{vacancy_response.id}/decline/" request = self.factory.post(url) @@ -313,92 +236,26 @@ def test_decline_vacancy_response_by_unauthenticated_user(self): ).exists() ) - -class VacancyDeleteTestCase(TestCase): - def setUp(self): - self.factory = APIRequestFactory() - self.user_list_view = UserList.as_view() - self.vacancy_list_view = VacancyList.as_view() - self.vacancy_detail_view = VacancyDetail.as_view() - self.user_project_owner = self.user_create() - self.vacancy_create_data = { - "role": "Test", - "required_skills": ["Test"], - "description": "Test", - "is_active": True, - "project": Project.objects.create( - name="Test", - description="Test", - industry=Industry.objects.create(name="Test"), - step=1, - leader=self.user_project_owner, - ).id, - } - self.another_user_create_data = { - "email": "another_user@test.com", - "password": "test_password", - "first_name": "Сергей", - "last_name": "Сергеев", - "birthday": "2000-01-02", - } - self.another_user = self.second_user_create() - - def user_create(self): - request = self.factory.post("auth/users/", USER_CREATE_DATA) - response = self.user_list_view(request) - user_id = response.data["id"] - user = CustomUser.objects.get(id=user_id) - user.is_active = True - user.save() - return user - - def second_user_create(self): - request = self.factory.post("auth/users/", self.another_user_create_data) - response = self.user_list_view(request) - user_id = response.data["id"] - user = CustomUser.objects.get(id=user_id) - user.is_active = True - user.save() - return user - def test_vacancy_deletion_by_owner(self): - create_request = self.factory.post("/vacancy/", self.vacancy_create_data) - force_authenticate(create_request, user=self.user_project_owner) - create_response = self.vacancy_list_view(create_request) - - vacancy_id = create_response.data["id"] - - delete_request = self.factory.delete(f"/vacancy/{vacancy_id}/") + delete_request = self.factory.delete(f"/vacancy/{self.vacancy.id}/") force_authenticate(delete_request, user=self.user_project_owner) - - delete_response = self.vacancy_detail_view(delete_request, pk=vacancy_id) + delete_response = self.vacancy_detail_view(delete_request, pk=self.vacancy.id) self.assertEqual(delete_response.status_code, 204) with self.assertRaises(Vacancy.DoesNotExist): - Vacancy.objects.get(id=vacancy_id) + Vacancy.objects.get(id=self.vacancy.id) def test_vacancy_deletion_by_user(self): - create_request = self.factory.post("/vacancy/", self.vacancy_create_data) - force_authenticate(create_request, user=self.user_project_owner) - create_response = self.vacancy_list_view(create_request) - vacancy_id = create_response.data["id"] - - delete_request = self.factory.delete(f"/vacancy/{vacancy_id}/") + delete_request = self.factory.delete(f"/vacancy/{self.vacancy.id}/") force_authenticate(delete_request, user=self.another_user) - delete_response = self.vacancy_detail_view(delete_request, pk=vacancy_id) + delete_response = self.vacancy_detail_view(delete_request, pk=self.vacancy.id) self.assertEqual(delete_response.status_code, 403) - self.assertTrue(Vacancy.objects.filter(id=vacancy_id).exists()) + self.assertTrue(Vacancy.objects.filter(id=self.vacancy.id).exists()) def test_vacancy_deletion_by_unauthenticated_user(self): - create_request = self.factory.post("/vacancy/", self.vacancy_create_data) - force_authenticate(create_request, user=self.user_project_owner) - create_response = self.vacancy_list_view(create_request) - vacancy_id = create_response.data["id"] - - delete_request = self.factory.delete(f"/vacancy/{vacancy_id}/") - delete_response = self.vacancy_detail_view(delete_request, pk=vacancy_id) + delete_request = self.factory.delete(f"/vacancy/{self.vacancy.id}/") + delete_response = self.vacancy_detail_view(delete_request, pk=self.vacancy.id) self.assertEqual(delete_response.status_code, 401) - - self.assertTrue(Vacancy.objects.filter(id=vacancy_id).exists()) + self.assertTrue(Vacancy.objects.filter(id=self.vacancy.id).exists()) From 29e89f35bb3d4480992b1d7bd936a7b37c43e5ef Mon Sep 17 00:00:00 2001 From: denkoten Date: Tue, 12 Dec 2023 12:37:02 +0300 Subject: [PATCH 4/4] =?UTF-8?q?=D0=B2=D0=BE=D1=81=D1=81=D1=82=D0=B0=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=20.env.example?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..13e8e71d --- /dev/null +++ b/.env.example @@ -0,0 +1,29 @@ +DEBUG= +DJANGO_SECRET_KEY= + +EMAIL_USER= +EMAIL_PASSWORD= +EMAIL_HOST= +EMAIL_PORT= + +SENTRY_DSN= + +DATABASE_NAME= +DATABASE_USER= +DATABASE_PASSWORD= +DATABASE_HOST= +DATABASE_PORT= + +SELECTEL_ACCOUNT_ID= +SELECTEL_CONTAINER_NAME= +SELECTEL_CONTAINER_PASSWORD= +SELECTEL_CONTAINER_USERNAME= + +REDIS_HOST= + +AUTOPOSTING_ON= +TELEGRAM_BOT_TOKEN= +TELEGRAM_CHANNEL= + +CLICKUP_API_TOKEN= +CLICKUP_SPACE_ID=