Skip to content

Commit

Permalink
View tests and Model tests for Job app jobguywork#12
Browse files Browse the repository at this point in the history
  • Loading branch information
MAM-SYS committed Jun 20, 2021
1 parent 2e8cb70 commit 1db9dcb
Show file tree
Hide file tree
Showing 4 changed files with 367 additions and 3 deletions.
3 changes: 0 additions & 3 deletions job/tests.py

This file was deleted.

Empty file added job/tests/__init__.py
Empty file.
113 changes: 113 additions & 0 deletions job/tests/test_models.py
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), "برنامه نویس پایتون")
254 changes: 254 additions & 0 deletions job/tests/test_views.py
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.")

0 comments on commit 1db9dcb

Please sign in to comment.