Fakultas Ilmu Komputer UI
Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
PMPL
Class Project
Kape
Commits
135fb78b
Commit
135fb78b
authored
Dec 03, 2019
by
Rahmania Astrid Mochtar
Browse files
1606828702 180
parent
62a0b0b4
Changes
3
Hide whitespace changes
Inline
Side-by-side
core/tests/test_recommendations.py
0 → 100644
View file @
135fb78b
import
requests_mock
from
rest_framework
import
status
from
rest_framework.test
import
APITestCase
from
django.contrib.auth.models
import
User
from
core.models.recommendations
import
Recommendation
from
core.models.accounts
import
Student
from
core.tests.mocks
import
mock_csui_oauth_verify
,
mock_csui_ldap_student
,
mock_csui_siak_student
class
RecommendationsTests
(
APITestCase
):
def
login
(
self
,
m
):
mock_csui_oauth_verify
(
m
)
mock_csui_ldap_student
(
m
)
mock_csui_siak_student
(
m
)
login_url
=
'/api/login/'
self
.
client
.
post
(
login_url
,
{
'username'
:
'dummy.mahasiswa'
,
'password'
:
'lalala'
,
'login-type'
:
'sso-ui'
},
format
=
'json'
)
@
requests_mock
.
Mocker
()
def
test_feedback_list_with_more_than_10_recommendations_and_with_page_number
(
self
,
m
):
self
.
login
(
m
)
for
_
in
range
(
15
):
Recommendation
.
objects
.
create
(
content
=
"a recommendation"
)
recommendations_url
=
'/api/recommendations/'
recommendations_url_page_1
=
'/api/recommendations/?page=1'
recommendations_urll_page_2
=
'/api/recommendations/?page=2'
response1
=
self
.
client
.
get
(
recommendations_url_page_1
)
self
.
assertEqual
(
response1
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response1
.
data
[
'count'
],
15
)
self
.
assertIn
(
recommendations_urll_page_2
,
response1
.
data
[
'next'
])
self
.
assertEqual
(
response1
.
data
[
'previous'
],
None
)
self
.
assertEqual
(
len
(
response1
.
data
[
'results'
]),
10
)
response2
=
self
.
client
.
get
(
recommendations_urll_page_2
)
self
.
assertEqual
(
response2
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response2
.
data
[
'count'
],
15
)
self
.
assertIn
(
recommendations_url
,
response2
.
data
[
'previous'
])
self
.
assertEqual
(
response2
.
data
[
'next'
],
None
)
self
.
assertEqual
(
len
(
response2
.
data
[
'results'
]),
5
)
# @requests_mock.Mocker()
# def test_recommendations_create_with_content(self, m):
# self.login(m)
# user1 = User.objects.create_user(
# 'dummy.mahasiswa3', 'dummy.mahasiswa3@mahasiswa.com', 'lalala')
# student1 = Student.objects.create(user=user1, npm="1212120010")
# student1.save()
# user2 = User.objects.create_user(
# 'dummy.mahasiswa2', 'dummy.mahasiswa2@mahasiswa.com', 'lalala123')
# student2 = Student.objects.create(user=user2, npm="1314151518")
# student2.save()
# recommendations_url = '/api/recommendations/'
# response = self.client.post(recommendations_url,
# {"content": "a content",
# "recommendation_giver": {"pk": student1.id},
# "recommendation_receiver": {"pk": student2.id}})
# self.assertEqual(response.status_code, status.HTTP_200_OK)
# self.assertEqual(response.data["content"], "a content")
@
requests_mock
.
Mocker
()
def
test_recommendations_create_without_content
(
self
,
m
):
self
.
login
(
m
)
recommendations_url
=
'/api/recommendations/'
response
=
self
.
client
.
post
(
recommendations_url
,
{
"content"
:
"a content"
})
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_400_BAD_REQUEST
)
@
requests_mock
.
Mocker
()
def
test_recommendations_delete_with_exist_data_and_with_data_id
(
self
,
m
):
self
.
login
(
m
)
new_recommendation
=
Recommendation
(
content
=
"a content"
)
new_recommendation
.
save
()
recommendation_id
=
new_recommendation
.
id
recommendation_url
=
'/api/recommendations/'
+
\
str
(
recommendation_id
)
+
'/'
response
=
self
.
client
.
delete
(
recommendation_url
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
[
"detail"
],
"Recommendation with id {} has been removed"
.
format
(
recommendation_id
))
@
requests_mock
.
Mocker
()
def
test_recommendations_delete_without_exist_data
(
self
,
m
):
self
.
login
(
m
)
new_recommendation
=
Recommendation
(
content
=
"a content"
)
new_recommendation
.
save
()
recommendation_id
=
new_recommendation
.
id
new_recommendation
.
delete
()
recommendation_url
=
'/api/recommendations/'
+
\
str
(
recommendation_id
)
+
'/'
response
=
self
.
client
.
delete
(
recommendation_url
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_400_BAD_REQUEST
)
self
.
assertEqual
(
response
.
data
[
"detail"
],
"Recommendation with id {} doesn't exist"
.
format
(
recommendation_id
))
@
requests_mock
.
Mocker
()
def
test_recommendations_delete_without_data_id
(
self
,
m
):
self
.
login
(
m
)
# test_feedbacks_delete_without_data_id
recommendations_url
=
'/api/recommendations/'
response
=
self
.
client
.
delete
(
recommendations_url
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_405_METHOD_NOT_ALLOWED
)
@
requests_mock
.
Mocker
()
def
test_feedbacks_update_with_exist_data_and_with_data_id
(
self
,
m
):
self
.
login
(
m
)
new_recommendation
=
Recommendation
(
content
=
"a content"
)
new_recommendation
.
save
()
recommendation_id
=
new_recommendation
.
id
recommendation_url
=
'/api/recommendations/'
+
\
str
(
recommendation_id
)
+
'/'
response
=
self
.
client
.
put
(
recommendation_url
,
{
"content"
:
"updated content"
})
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEqual
(
response
.
data
[
"content"
],
"updated content"
)
self
.
assertEqual
(
response
.
data
[
"detail"
],
"Recommendation with id {} has been updated"
.
format
(
recommendation_id
))
@
requests_mock
.
Mocker
()
def
test_feedbacks_update_with_not_exist_data_and_with_data_id
(
self
,
m
):
self
.
login
(
m
)
new_recommendation
=
Recommendation
(
content
=
"a content"
)
new_recommendation
.
save
()
recommendation_id
=
new_recommendation
.
id
new_recommendation
.
delete
()
recommendation_url
=
'/api/recommendations/'
+
\
str
(
recommendation_id
)
+
'/'
response
=
self
.
client
.
put
(
recommendation_url
,
{
"content"
:
"updated content"
})
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_400_BAD_REQUEST
)
self
.
assertEqual
(
response
.
data
[
"detail"
],
"Recommendation with id {} doesn't exist"
.
format
(
recommendation_id
))
kape/urls.py
View file @
135fb78b
...
...
@@ -28,6 +28,7 @@ from core.views.vacancies import VacancyViewSet, BookmarkedVacancyByStudentViewS
CompanyApplicationViewSet
,
CompanyVacanciesViewSet
,
ApplicationViewSet
,
VacancyMilestoneViewSet
,
\
AcceptOfferByStudentViewSet
from
core.views.feedbacks
import
FeedbackViewSet
from
core.views.recommendations
import
RecommendationViewSet
schema_view
=
get_swagger_view
()
router
=
routers
.
DefaultRouter
()
...
...
@@ -40,10 +41,12 @@ router.register(r'register', CompanyRegisterViewSet)
router
.
register
(
r
'vacancies'
,
VacancyViewSet
)
router
.
register
(
r
'applications'
,
ApplicationViewSet
)
router
.
register
(
r
'feedbacks'
,
FeedbackViewSet
)
router
.
register
(
r
'recommendations'
,
RecommendationViewSet
)
# router.register(r'students/(?P<student_id>\d+)/profile', StudentProfileViewSet)
router
.
register
(
r
'vacancies/(?P<vacancy_id>\d+)/milestones'
,
VacancyMilestoneViewSet
,
base_name
=
'vacancy-milestones'
)
router
.
register
(
r
'acceptoffer/(?P<student_id>\d+)/vacancy'
,
AcceptOfferByStudentViewSet
)
router
.
register
(
r
'acceptoffer/(?P<student_id>\d+)/vacancy'
,
AcceptOfferByStudentViewSet
)
router
.
register
(
r
'students/(?P<student_id>\d+)/bookmarked-vacancies'
,
BookmarkedVacancyByStudentViewSet
,
base_name
=
'bookmarked-vacancy-list'
)
router
.
register
(
r
'students/(?P<student_id>\d+)/applied-vacancies'
,
StudentApplicationViewSet
,
...
...
package-lock.json
View file @
135fb78b
...
...
@@ -3261,7 +3261,7 @@
"axios": {
"version": "0.19.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz",
"integrity": "sha
512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ=
=",
"integrity": "sha
1-jgm/89kSLhM/e4EByPvdAO09Krg
=",
"requires": {
"follow-redirects": "1.5.10",
"is-buffer": "^2.0.2"
...
...
@@ -3278,7 +3278,7 @@
"follow-redirects": {
"version": "1.5.10",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
"integrity": "sha
512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ=
=",
"integrity": "sha
1-e3qfmuov3/NnhqlP9kPtB/T/Xio
=",
"requires": {
"debug": "=3.1.0"
}
...
...
@@ -3286,7 +3286,7 @@
"is-buffer": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
"integrity": "sha
512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A=
="
"integrity": "sha
1-PlcvI8hBGlz9lVfISeNmXgspBiM
="
}
}
},
...
...
@@ -3313,7 +3313,7 @@
"babel-core": {
"version": "6.26.3",
"resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
"integrity": "sha
512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA=
=",
"integrity": "sha
1-suLwnjQtDwyI4vAuBneUEl51wgc
=",
"dev": true,
"requires": {
"babel-code-frame": "^6.26.0",
...
...
@@ -5599,7 +5599,7 @@
"eslint-plugin-import": {
"version": "2.18.2",
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz",
"integrity": "sha
512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ=
=",
"integrity": "sha
1-AvEYC5Cwd7M9RHoXojJs60AKzrY
=",
"dev": true,
"requires": {
"array-includes": "^3.0.3",
...
...
@@ -5628,7 +5628,7 @@
"resolve": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
"integrity": "sha
512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w=
=",
"integrity": "sha
1-P8ZEo1yEpIVUYJ/ybsUrZvpXffY
=",
"dev": true,
"requires": {
"path-parse": "^1.0.6"
...
...
@@ -6284,7 +6284,7 @@
"fetch-mock": {
"version": "5.13.1",
"resolved": "https://registry.npmjs.org/fetch-mock/-/fetch-mock-5.13.1.tgz",
"integrity": "sha
512-eWUo2KI4sRGnRu8tKELCBfasALM5BfvrCxdI7J02j3eUM9mf+uYzJkURA0PSn/29JVapVrYFm+z+9XijXu1PdA=
=",
"integrity": "sha
1-lVeUp389ly8WRLms5loP39YPHfc
=",
"requires": {
"glob-to-regexp": "^0.3.0",
"node-fetch": "^1.3.3",
...
...
@@ -7956,7 +7956,7 @@
"isparta": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/isparta/-/isparta-4.1.1.tgz",
"integrity": "sha
512-kGwkNqmALQzdfGhgo5o8kOA88p14R3Lwg0nfQ/qzv4IhB4rXarT9maPMaYbo6cms4poWbeulrlFlURLUR6rDwQ=
=",
"integrity": "sha
1-yS5JZylGkU7FQHyAEWDzN04LfLQ
=",
"dev": true,
"requires": {
"babel-core": "^6.1.4",
...
...
@@ -7973,7 +7973,7 @@
"esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha
512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=
=",
"integrity": "sha
1-E7BM2z5sXRnfkatph6hpVhmwqnE
=",
"dev": true
}
}
...
...
@@ -8623,7 +8623,7 @@
"karma-firefox-launcher": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.2.0.tgz",
"integrity": "sha
512-j9Zp8M8+VLq1nI/5xZGfzeaEPtGQ/vk3G+Y8vpmFWLvKLNZ2TDjD6cu2dUu7lDbu1HXNgatsAX4jgCZTkR9qhQ=
=",
"integrity": "sha
1-ZP4D3RAwD5dU1I+ev78x9slKIAw
=",
"dev": true,
"requires": {
"is-wsl": "^2.1.0"
...
...
@@ -8675,7 +8675,7 @@
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha
512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=
=",
"integrity": "sha
1-zUJUFnelQzPPVBpJEIwUMrRMlCQ
=",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
...
...
@@ -9727,7 +9727,7 @@
"moment": {
"version": "2.24.0",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
"integrity": "sha
512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=
="
"integrity": "sha
1-DQVdU/UFKqZTyfbraLtdEr9cK1s
="
},
"move-concurrently": {
"version": "1.0.1",
...
...
@@ -10845,7 +10845,7 @@
"react-chartjs-2": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-2.8.0.tgz",
"integrity": "sha
512-BPpC+qfnh37DkcXvxRwA1rdD9rX/0AQrwru4VZTLofCCuZBwRsc7PbfxjilvoB6YlHhorwZu40YDWEQkoz7xfQ=
=",
"integrity": "sha
1-HCTekfs3VfjEMCZ13n1m/dozl1k
=",
"requires": {
"lodash": "^4.17.4",
"prop-types": "^15.5.8"
...
...
@@ -10854,7 +10854,7 @@
"react-ckeditor-wrapper": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/react-ckeditor-wrapper/-/react-ckeditor-wrapper-1.1.2.tgz",
"integrity": "sha
512-/COVfezpSKFQxC/OjFoZf1PyzxTvUxzndlpGjEcajzjRgKPzSFZiCoh/VqqwGaaHJROO9pePQ9JxmJy2YlzDAQ=
=",
"integrity": "sha
1-cvDGgo4X6mNxXV6YNvOrovhIfPM
=",
"requires": {
"babel-runtime": "6.x",
"classnames": "2.x",
...
...
@@ -10896,7 +10896,7 @@
"react-hot-loader": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-3.1.3.tgz",
"integrity": "sha
512-d7nZf78irxoGN5PY4zd6CSgZiroOhvIWzRast3qwTn4sSnBwlt08kV8WMQ9mitmxEdlCTwZt+5ClrRSjxWguMQ=
=",
"integrity": "sha
1-b5KHcyaVjHywE0tRJHRReGkSYII
=",
"dev": true,
"requires": {
"global": "^4.3.0",
...
...
@@ -10909,7 +10909,7 @@
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha
512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=
=",
"integrity": "sha
1-dHIq8y6WFOnCh6jQu95IteLxomM
=",
"dev": true
}
}
...
...
@@ -12109,7 +12109,7 @@
"starwars": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/starwars/-/starwars-1.0.1.tgz",
"integrity": "sha
512-d23qkhEuFNlHas4/w2J6ZF6qS7jqy8OK4N3gfQbtTk/5Lt1wKe+xv0cIweuNxwtwBGVXvmsLV2mdUOBKfj12cA=
="
"integrity": "sha
1-+OIWt4KUs/y/ytJbRPJxF543U9U
="
},
"static-extend": {
"version": "0.1.2",
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment