-
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.
Merge pull request #37 from ACWIC/implement_api_level_tests
Implement API level tests
- Loading branch information
Showing
5 changed files
with
209 additions
and
21 deletions.
There are no files selected for viewing
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 |
---|---|---|
@@ -1,6 +1,7 @@ | ||
[run] | ||
include = app/* | ||
branch = True | ||
omit = app/main.py | ||
|
||
[html] | ||
directory = test-reports/cov/ | ||
|
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
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 |
---|---|---|
|
@@ -8,6 +8,7 @@ pytest | |
pytest-cov | ||
pytest-sugar | ||
pytest-flake8 | ||
requests | ||
|
||
# debugging | ||
ipython |
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,175 @@ | ||
from unittest import mock | ||
|
||
from fastapi.testclient import TestClient | ||
|
||
from app.domain.entities.enrolment import Enrolment | ||
from app.main import app | ||
from app.responses import FailureType, ResponseFailure, ResponseSuccess, SuccessType | ||
from tests.test_data.data_provider import DataProvider | ||
|
||
test_data = DataProvider() | ||
client = TestClient(app) | ||
|
||
|
||
@mock.patch("app.use_cases.create_enrolment.CreateNewEnrolment") | ||
def test_create_enrolment_success_created(use_case): | ||
code = SuccessType.CREATED | ||
message = "The enrolment has been created." | ||
use_case().execute.return_value = ResponseSuccess( | ||
value=test_data.sample_enrolment, | ||
type=code, | ||
message=message, | ||
) | ||
|
||
data = test_data.sample_enrolment_request | ||
response = client.post("/enrolments", data=data.json()) | ||
json_result = response.json() | ||
enrolment = Enrolment(**json_result.get("value")) | ||
|
||
use_case().execute.assert_called_with(data) | ||
assert response.status_code == SuccessType.CREATED.value | ||
assert enrolment == test_data.sample_enrolment | ||
assert json_result.get("message") == message | ||
|
||
|
||
@mock.patch("app.use_cases.create_enrolment.CreateNewEnrolment") | ||
def test_create_enrolment_failure(use_case): | ||
message = "Error" | ||
use_case().execute.return_value = ResponseFailure.build_from_resource_error( | ||
message=message, | ||
) | ||
|
||
data = test_data.sample_enrolment_request | ||
response = client.post("/enrolments", data=data.json()) | ||
|
||
assert response.status_code == FailureType.RESOURCE_ERROR.value | ||
assert response.json() == {"detail": "RESOURCE_ERROR: " + message} | ||
|
||
|
||
@mock.patch("app.use_cases.get_enrolment.GetEnrolmentByID") | ||
def test_get_enrolment_by_id_success(use_case): | ||
message = "The enrolment has been fetched from the server." | ||
use_case().execute.return_value = ResponseSuccess( | ||
value=test_data.sample_enrolment, | ||
message=message, | ||
) | ||
|
||
data = test_data.enrolment_id | ||
response = client.get(f"/enrolments/{test_data.enrolment_id}") | ||
json_result = response.json() | ||
enrolment = Enrolment(**json_result.get("value")) | ||
|
||
use_case().execute.assert_called_with(data) | ||
assert response.status_code == SuccessType.SUCCESS.value | ||
assert enrolment == test_data.sample_enrolment | ||
assert json_result.get("message") == message | ||
|
||
|
||
@mock.patch("app.use_cases.get_enrolment.GetEnrolmentByID") | ||
def test_get_enrolment_by_id_failure(use_case): | ||
message = "Error" | ||
use_case().execute.return_value = ResponseFailure.build_from_resource_error( | ||
message=message, | ||
) | ||
|
||
response = client.get(f"/enrolments/{test_data.enrolment_id}") | ||
|
||
assert response.status_code == FailureType.RESOURCE_ERROR.value | ||
assert response.json() == {"detail": "RESOURCE_ERROR: " + message} | ||
|
||
|
||
@mock.patch("app.use_cases.get_enrolment_status.GetEnrolmentStatus") | ||
def test_get_enrolment_status_success(use_case): | ||
message = "The Enrolment status has been fetched from the server." | ||
use_case().execute.return_value = ResponseSuccess( | ||
value=test_data.sample_enrolment, | ||
message=message, | ||
) | ||
|
||
data = test_data.enrolment_id | ||
response = client.get(f"/enrolments/{test_data.enrolment_id}/status") | ||
json_result = response.json() | ||
enrolment = Enrolment(**json_result.get("value")) | ||
|
||
use_case().execute.assert_called_with(data) | ||
assert response.status_code == SuccessType.SUCCESS.value | ||
assert enrolment == test_data.sample_enrolment | ||
assert json_result.get("message") == message | ||
|
||
|
||
@mock.patch("app.use_cases.get_enrolment_status.GetEnrolmentStatus") | ||
def test_get_enrolment_status_failure(use_case): | ||
message = "Error" | ||
use_case().execute.return_value = ResponseFailure.build_from_resource_error( | ||
message=message, | ||
) | ||
|
||
response = client.get(f"/enrolments/{test_data.enrolment_id}/status") | ||
|
||
assert response.status_code == FailureType.RESOURCE_ERROR.value | ||
assert response.json() == {"detail": "RESOURCE_ERROR: " + message} | ||
|
||
|
||
@mock.patch("app.use_cases.get_callbacks_list.GetCallbacksList") | ||
def test_get_callbacks_list_for_enrolment_success(use_case): | ||
message = "The Callbacks list has been fetched from the server." | ||
use_case().execute.return_value = ResponseSuccess( | ||
value=test_data.callbacks_list1, | ||
message=message, | ||
) | ||
|
||
data = test_data.enrolment_id | ||
response = client.get(f"/enrolments/{test_data.enrolment_id}/journal") | ||
json_result = response.json() | ||
|
||
use_case().execute.assert_called_with(data) | ||
assert response.status_code == SuccessType.SUCCESS.value | ||
assert json_result.get("value") == test_data.callbacks_list1_json | ||
assert json_result.get("message") == message | ||
|
||
|
||
@mock.patch("app.use_cases.get_callbacks_list.GetCallbacksList") | ||
def test_get_callbacks_list_for_enrolment_failure(use_case): | ||
message = "Error" | ||
use_case().execute.return_value = ResponseFailure.build_from_resource_error( | ||
message=message, | ||
) | ||
|
||
response = client.get(f"/enrolments/{test_data.enrolment_id}/journal") | ||
|
||
assert response.status_code == FailureType.RESOURCE_ERROR.value | ||
assert response.json() == {"detail": "RESOURCE_ERROR: " + message} | ||
|
||
|
||
@mock.patch("app.use_cases.get_callback.GetCallback") | ||
def test_get_callback_for_enrolment_success(use_case): | ||
message = "The callback has been fetched from the server." | ||
use_case().execute.return_value = ResponseSuccess( | ||
value=test_data.callbacks_list1, | ||
message=message, | ||
) | ||
|
||
response = client.get( | ||
f"/enrolments/{test_data.enrolment_id}/journal/{test_data.callback_id}" | ||
) | ||
json_result = response.json() | ||
|
||
use_case().execute.assert_called_with(test_data.enrolment_id, test_data.callback_id) | ||
assert response.status_code == SuccessType.SUCCESS.value | ||
assert json_result.get("value") == test_data.callbacks_list1_json | ||
assert json_result.get("message") == message | ||
|
||
|
||
@mock.patch("app.use_cases.get_callback.GetCallback") | ||
def test_get_callback_for_enrolment_failure(use_case): | ||
message = "Error" | ||
use_case().execute.return_value = ResponseFailure.build_from_resource_error( | ||
message=message, | ||
) | ||
|
||
response = client.get( | ||
f"/enrolments/{test_data.enrolment_id}/journal/{test_data.callback_id}" | ||
) | ||
|
||
assert response.status_code == FailureType.RESOURCE_ERROR.value | ||
assert response.json() == {"detail": "RESOURCE_ERROR: " + message} |
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