forked from jobguywork/backend
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
View tests and Model tests for Job app jobguywork#12
- Loading branch information
Showing
4 changed files
with
367 additions
and
3 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
from django.contrib.auth.models import User | ||
from rest_framework.test import APITestCase | ||
|
||
from company.models import City, Company, Industry, Province | ||
from job.models import Job | ||
from review.models import CompanyReview | ||
|
||
|
||
class JobTests(APITestCase): | ||
def setUp(self): | ||
# User | ||
user = User.objects.create( | ||
username="testuser", | ||
) | ||
user.set_password("testpassword") | ||
user.save() | ||
|
||
# Job | ||
job = Job.objects.create( | ||
name="برنامه نویس پایتون", | ||
cover="/default/system/cover.jpg", | ||
icon="fas fa-home", | ||
description="برنامه نویس پایتون", | ||
) | ||
# Industry | ||
industry = Industry.objects.create( | ||
name="کامپیوتر، فناوری اطلاعات و اینترنت", | ||
industry_slug="کامپیوتر-فناوری-اطلاعات-و-اینترنت", | ||
logo="/default/system/cover.jpg", | ||
icon="fas fa-graduation-cap", | ||
description="good industry", | ||
) | ||
# Province | ||
province = Province.objects.create(name="تهران") | ||
|
||
# City | ||
city = City.objects.create( | ||
name="تهران", | ||
province=province, | ||
) | ||
|
||
# Company | ||
company = Company.objects.create( | ||
user=user, | ||
name="فرازپردازان", | ||
name_en="Faraz Pardazan", | ||
description="ما در فرازپردازان، با هم کار را شروع می کنیم. با هم یاد می گیریم و با هم رشد می کنیم و با هم فعالیت حرفه ای و اقتصادی خود را به جلو می بریم. مهمترین مزیت کاری فرازپردازان کار در یک محیط کاملا دوستانه است", | ||
logo="/company/faraz-pardazan/4aa04840-4030-11e9-8ad3-7bb6142308a0.png", | ||
industry=industry, | ||
founded="2010-02-10", | ||
company_slug="faraz-pardazan", | ||
size="S", | ||
city=city, | ||
tell="0213456789", | ||
site="http://farazpardazan.com", | ||
) | ||
company2 = Company.objects.create( | ||
user=user, | ||
name="ابرآروان", | ||
name_en="Arvan Cloud", | ||
description=" شروع کار ابر آروان تولید فناوری شبکه توزیع محتوا یا CDN بود. محصولی که وظیفه اصلی اش شتابدهی وب و محافظت از وب سایت ها در برابر حملات سایبری بوده و هست. محتوای یک وبسایت یا در واقع هرنوع محتوای آنلاین به کمک این سرویس با سرعت بالاتر و از نزدیکترین نقطه جغرافیایی به دست کاربر نهایی وبسایت میرسد و در نتیجه تجربه کاربری به شکل چشم گیری افزایش پیدا می کند و از طرف دیگر وب سایت هم در برابر حملات مختلف محافظت میشود. در شرایط فعلی ابر آروان تنها راهکار مقابله با حملات DDoS در ایران است.", | ||
logo="/company/arvan-cloud/536b8ec0-40de-11e9-82ca-553f80196c54.jpg", | ||
industry=industry, | ||
founded="2015-02-10", | ||
company_slug="arvan-cloud", | ||
size="VS", | ||
city=city, | ||
tell="0213456789", | ||
site="http://arvancloud.com", | ||
) | ||
# Company Review | ||
CompanyReview.objects.create( | ||
company=company, | ||
job=job, | ||
recommend_to_friend=False, | ||
state="FULL TIME", | ||
work_life_balance=1, | ||
salary_benefit=1, | ||
security=1, | ||
management=1, | ||
culture=1, | ||
over_all_rate=1, | ||
anonymous_job=True, | ||
title="بهترین تجربه عمرم", | ||
salary=5000000, | ||
salary_type="PER MOUNTH", | ||
creator=user, | ||
) | ||
CompanyReview.objects.create( | ||
company=company2, | ||
job=job, | ||
recommend_to_friend=False, | ||
state="PART TIME", | ||
work_life_balance=2, | ||
salary_benefit=2, | ||
security=2, | ||
management=2, | ||
culture=2, | ||
over_all_rate=2, | ||
anonymous_job=True, | ||
title="بدترین تجربه عمرم", | ||
salary=6000000, | ||
salary_type="PER MOUNTH", | ||
creator=user, | ||
) | ||
|
||
def test_company_count(self): | ||
job = Job.objects.get(name="برنامه نویس پایتون") | ||
self.assertEqual(job.company_count, 2) | ||
|
||
def test_model_representation(self): | ||
job = Job.objects.get(name="برنامه نویس پایتون") | ||
self.assertEqual(str(job), "برنامه نویس پایتون") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,254 @@ | ||
from django.contrib.auth import get_user_model | ||
from rest_framework import status | ||
from rest_framework.test import APITestCase | ||
|
||
from job.models import Job | ||
from utilities.utilities import slug_helper | ||
|
||
User = get_user_model() | ||
|
||
|
||
class JobTests(APITestCase): | ||
def setUp(self): | ||
# Creating test superuser | ||
user_data = { | ||
"username": "testsuperuser", | ||
"email": "[email protected]", | ||
"password": "testuser123", | ||
} | ||
self.user = User.objects.create_superuser(**user_data) | ||
self.user.profile.email_confirmed = True | ||
self.user.profile.email = "[email protected]" | ||
self.user.profile.save() | ||
|
||
# Getting token | ||
url = "/authnz/login_email/" | ||
self.token = self.client.post(url, user_data, format="json").json()["data"][ | ||
"token" | ||
] | ||
|
||
# Creating job | ||
Job.objects.create( | ||
name="برنامه نویس وب", | ||
job_slug=slug_helper("برنامه نویس وب"), | ||
cover="/default/system/cover.jpg", | ||
icon="fas fa-home", | ||
description="توسعه دهنده و برنامه نویس وب", | ||
is_deleted=False, | ||
approved=False, | ||
) | ||
|
||
Job.objects.create( | ||
name="برنامه نویس بک اند", | ||
job_slug=slug_helper("برنامه نویس بک اند"), | ||
cover="/default/system/cover.jpg", | ||
icon="fas fa-home", | ||
description="توسعه دهنده و برنامه نویس بک اند", | ||
is_deleted=False, | ||
approved=False, | ||
) | ||
|
||
def test_job_create_view(self): | ||
url = "/job/create/" | ||
data = { | ||
"name": "برنامه نویس پایتون", | ||
"cover": "/default/system/cover.jpg", | ||
"icon": "fas fa-home", | ||
"description": "برنامه نویس پایتون", | ||
} | ||
self.client.credentials(HTTP_AUTHORIZATION="JWT " + self.token) | ||
response = self.client.post(url, data, format="json") | ||
job = Job.objects.last() | ||
self.assertEqual(response.status_code, status.HTTP_200_OK) | ||
self.assertEqual(response["content-type"], "application/json") | ||
self.assertEqual(Job.objects.count(), 3) | ||
self.assertEqual(job.name, "برنامه نویس پایتون") | ||
self.assertEqual(job.job_slug, slug_helper("برنامه نویس پایتون")) | ||
|
||
def test_job_list_view_with_no_query_params(self): | ||
url = "/job/list/" | ||
self.client.credentials(HTTP_AUTHORIZATION="JWT " + self.token) | ||
response = self.client.get(url) | ||
response_data = response.json() | ||
self.assertEqual(response.status_code, status.HTTP_200_OK) | ||
self.assertEqual( | ||
list(response_data["data"][0].keys()), | ||
[ | ||
"id", | ||
"name", | ||
"job_slug", | ||
"cover", | ||
"icon", | ||
"description", | ||
"is_deleted", | ||
"approved", | ||
], | ||
) | ||
self.assertEqual(response["content-type"], "application/json") | ||
self.assertEqual(len(response_data["data"]), 2) | ||
self.assertEqual(response_data["total"], 2) | ||
|
||
def test_job_list_view_with_query_params(self): | ||
index = 1 | ||
size = 10 | ||
order_by = "name" | ||
url = f"/job/list/?index={index}&size={size}&order_by={order_by}" | ||
self.client.credentials(HTTP_AUTHORIZATION="JWT " + self.token) | ||
response = self.client.get(url) | ||
response_data = response.json() | ||
self.assertEqual(response.status_code, status.HTTP_200_OK) | ||
self.assertEqual(response_data["index"], 1) | ||
self.assertEqual(response_data["total"], 2) | ||
self.assertEqual(len(response_data["data"]), 1) | ||
self.assertEqual(response_data["data"][0]["name"], "برنامه نویس وب") | ||
|
||
def test_job_list_view_with_out_of_range_index_query_params(self): | ||
index = 100 | ||
url = f"/job/list/?index={index}" | ||
self.client.credentials(HTTP_AUTHORIZATION="JWT " + self.token) | ||
response = self.client.get(url) | ||
response_data = response.json() | ||
self.assertEqual(response.status_code, status.HTTP_200_OK) | ||
self.assertEqual(response_data["data"], []) | ||
self.assertEqual(response_data["index"], 100) | ||
self.assertEqual(response_data["total"], 2) | ||
|
||
def test_job_list_view_for_public_with_no_query_params(self): | ||
url = "/public/job/list/" | ||
response = self.client.get(url) | ||
response_data = response.json() | ||
self.assertEqual(response.status_code, status.HTTP_200_OK) | ||
self.assertEqual(response["content-type"], "application/json") | ||
self.assertNotContains(response, "is_deleted") | ||
self.assertNotContains(response, "approved") | ||
self.assertNotContains(response, "id") | ||
self.assertEqual(len(response_data["data"]), 2) | ||
self.assertEqual(response_data["total"], 2) | ||
self.assertEqual(response_data["index"], 0) | ||
|
||
def test_job_list_view_for_public_with_query_params(self): | ||
index = 1 | ||
size = 10 | ||
order_by = "name" | ||
url = f"/public/job/list/?index={index}&size={size}&order_by={order_by}" | ||
response = self.client.get(url) | ||
response_data = response.json() | ||
self.assertEqual(response.status_code, status.HTTP_200_OK) | ||
self.assertEqual(response_data["index"], 1) | ||
self.assertEqual(response_data["total"], 2) | ||
self.assertEqual(len(response_data["data"]), 1) | ||
self.assertEqual(response_data["data"][0]["name"], "برنامه نویس وب") | ||
|
||
def test_job_list_view_for_public_with_out_of_range_index_query_params(self): | ||
index = 100 | ||
url = f"/public/job/list/?index={index}" | ||
response = self.client.get(url) | ||
response_data = response.json() | ||
self.assertEqual(response.status_code, status.HTTP_200_OK) | ||
self.assertEqual(response_data["data"], []) | ||
self.assertEqual(response_data["index"], 100) | ||
self.assertEqual(response_data["total"], 2) | ||
|
||
def test_job_update_view_with_put_method_when_objects_exists(self): | ||
job = Job.objects.first() | ||
url = f"/job/{job.id}/update/" | ||
data = { | ||
"id": 10, | ||
"name": "برنامه نویس Go", | ||
"job_slug": slug_helper("برنامه نویس Go"), | ||
"cover": "/default/system/cover2.jpg", | ||
"icon": "fas fa-home2", | ||
"description": "برنامه نویس Go", | ||
"is_deleted": True, | ||
"approved": True, | ||
} | ||
self.client.credentials(HTTP_AUTHORIZATION="JWT " + self.token) | ||
response = self.client.put(url, data, format="json") | ||
response_data = response.json() | ||
self.assertEqual(response.status_code, status.HTTP_200_OK) | ||
self.assertEqual(response["content-type"], "application/json") | ||
# Constant fields | ||
self.assertEqual(job.id, response_data["data"]["id"]) | ||
self.assertEqual(job.name, response_data["data"]["name"]) | ||
self.assertEqual(job.job_slug, response_data["data"]["job_slug"]) | ||
self.assertFalse(job.is_deleted) | ||
self.assertFalse(job.approved) | ||
# Changed fields | ||
self.assertEqual(response_data["data"]["cover"], data["cover"]) | ||
self.assertEqual(response_data["data"]["icon"], data["icon"]) | ||
self.assertEqual(response_data["data"]["description"], data["description"]) | ||
|
||
def test_job_update_view_with_put_method_when_objects_not_exists(self): | ||
data = { | ||
"id": 10, | ||
"name": "برنامه نویس Go", | ||
"job_slug": slug_helper("برنامه نویس Go"), | ||
"cover": "/default/system/cover2.jpg", | ||
"icon": "fas fa-home2", | ||
"description": "برنامه نویس Go", | ||
"is_deleted": True, | ||
"approved": True, | ||
} | ||
url = "/job/5000/update/" | ||
self.client.credentials(HTTP_AUTHORIZATION="JWT " + self.token) | ||
response = self.client.put(url, data, format="json") | ||
response_data = response.json() | ||
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) | ||
self.assertEqual(response_data["message"], "Instance does not exist.") | ||
|
||
def test_job_update_view_with_patch_method_when_object_exists(self): | ||
job = Job.objects.first() | ||
url = f"/job/{job.id}/update/" | ||
partial_data = { | ||
"cover": "/default/system/cover3.jpg", | ||
"icon": "fas fa-home3", | ||
"description": "برنامه نویس Rust", | ||
} | ||
|
||
data = { | ||
"id": job.id, | ||
"name": "برنامه نویس وب", | ||
"job_slug": "برنامه-نویس-وب", | ||
"cover": "/default/system/cover3.jpg", | ||
"icon": "fas fa-home3", | ||
"description": "برنامه نویس Rust", | ||
"is_deleted": False, | ||
"approved": False, | ||
} | ||
self.client.credentials(HTTP_AUTHORIZATION="JWT " + self.token) | ||
response = self.client.patch(url, partial_data, format="json") | ||
response_data = response.json() | ||
self.assertEqual(response.status_code, status.HTTP_200_OK) | ||
self.assertEqual(response["content-type"], "application/json") | ||
self.assertEquals(response_data["data"], data) | ||
|
||
def test_job_update_with_patch_method_when_object_not_exists(self): | ||
partial_data = { | ||
"cover": "/default/system/cover3.jpg", | ||
"icon": "fas fa-home3", | ||
"description": "برنامه نویس Rust", | ||
} | ||
self.client.credentials(HTTP_AUTHORIZATION="JWT " + self.token) | ||
url = "/job/5000/update/" | ||
response = self.client.patch(url, partial_data, format="json") | ||
response_data = response.json() | ||
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) | ||
self.assertEqual(response_data["message"], "Instance does not exist.") | ||
|
||
def test_job_delete_view_when_object_exists(self): | ||
job = Job.objects.first() | ||
url = f"/job/{job.id}/delete/" | ||
self.client.credentials(HTTP_AUTHORIZATION="JWT " + self.token) | ||
response = self.client.delete(url) | ||
response_data = response.json() | ||
self.assertEqual(response["content-type"], "application/json") | ||
self.assertEqual(response.status_code, status.HTTP_200_OK) | ||
self.assertEqual(response_data["data"], {}) | ||
|
||
def test_job_delete_view_when_object_not_exists(self): | ||
url = "/job/5000/delete/" | ||
self.client.credentials(HTTP_AUTHORIZATION="JWT " + self.token) | ||
response = self.client.delete(url) | ||
response_data = response.json() | ||
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) | ||
self.assertEqual(response_data["message"], "Instance does not exist.") |