Created
July 14, 2021 17:05
-
-
Save default-work/3678fb46b97a471cbc243b068534175f to your computer and use it in GitHub Desktop.
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
import os | |
import json | |
import pytest | |
from http import HTTPStatus | |
from unittest.mock import patch, Mock | |
from flask import Response, url_for | |
from app.api.core.entities.employee import Employee, EmployeeJobAllocation | |
from app.api.core.entities.department import Department | |
from app.api.core.entities.facility import Facility | |
from test.api.oauth.oauth_required_test import MOCK_GOOD_TOKEN, MOCK_BAD_TOKEN, TOKEN_DATE_TIME, PUBLIC_KEYS | |
from copy import deepcopy | |
TEST_ENTITY_EMPLOYEES = [Employee(11111, 12345, "cmei", "firstname", "lastname")] | |
TEST_INVALID_ENTITY_EMPLOYEES = [None] | |
TEST_ENTITY_JOB_ALLOCATIONS = [ | |
EmployeeJobAllocation( | |
Department(1, "Test Department 1", "Test_dept"), | |
Facility(1, "Test Facility", "Test_Faci_Code", "Test_H_Code"), True), | |
EmployeeJobAllocation( | |
Department(1, "my test", "Test_dept"), | |
Facility(1, "Test Facility", "Test_Faci_Code", "Test_H_Code"), False), | |
EmployeeJobAllocation( | |
Department(1, "Test Department 1", "Test_dept"), | |
Facility(1, "Test Facility", "Test_Faci_Code", "Test_H_Code"), False)] | |
@pytest.mark.freeze_time(TOKEN_DATE_TIME) | |
def test_GetEmployeesFacilityByEmpId_success(client, mocker): | |
get_employee_mock = mocker.patch('app.api.core.repository.employee_repository.EmployeeSqlRepostory.get_employee_by_id') | |
get_employee_mock.return_value = TEST_ENTITY_EMPLOYEES[0] | |
get_allocations_mock = mocker.patch('app.api.core.repository.employee_repository.EmployeeSqlRepostory.get_employee_allocations_by_Id') | |
get_allocations_mock.return_value = TEST_ENTITY_JOB_ALLOCATIONS | |
response = client.get('/employee-service/employees/11111/facilities', headers={'Authorization': MOCK_GOOD_TOKEN}) | |
assert HTTPStatus.OK == response.status_code | |
assert response.data is not None | |
#evaluate return object | |
jsonobject = json.loads(response.data) | |
assert len(jsonobject) == 3 | |
assert jsonobject[0].get('facility_id') == 1 | |
@pytest.mark.freeze_time(TOKEN_DATE_TIME) | |
def test_GetEmployeesFacilityByEmpId_success(client, mocker): | |
get_employee_mock = mocker.patch('app.api.core.repository.employee_repository.EmployeeSqlRepostory.get_employee_by_id') | |
get_employee_mock.return_value = TEST_ENTITY_EMPLOYEES[0] | |
get_allocations_mock = mocker.patch('app.api.core.repository.employee_repository.EmployeeSqlRepostory.get_employee_allocations_by_Id') | |
get_allocations_mock.return_value = TEST_ENTITY_JOB_ALLOCATIONS | |
response = client.get('/employee-service/employees/sss/facilities', headers={'Authorization': MOCK_GOOD_TOKEN}) | |
assert HTTPStatus.UNPROCESSABLE_ENTITY == response.status_code | |
assert response.data is not None | |
#evaluate return object | |
jsonobject = json.loads(response.data) | |
assert len(jsonobject) == 1 | |
assert jsonobject.get('message').get('message') == "Invalid employee Id format" | |
@pytest.mark.freeze_time(TOKEN_DATE_TIME) | |
def test_GetEmployeesFacilityByEmpId_404(client, mocker): | |
get_employee_mock = mocker.patch('app.api.core.services.employee_service.EmployeeService.get_employee_by_id') | |
get_employee_mock.return_value = None | |
get_allocations_mock = mocker.patch('app.api.core.services.employee_service.EmployeeService.get_employee_allocations_by_employee_id') | |
get_allocations_mock.return_value = [] | |
response = client.get('/employee-service/employees/00000/facilities', headers={'Authorization': MOCK_GOOD_TOKEN}) | |
assert HTTPStatus.NOT_FOUND == response.status_code | |
@pytest.mark.freeze_time(TOKEN_DATE_TIME) | |
def test_GivenUsernameQueryEmployeesFacility_success(client, mocker): | |
get_employee_svr_mock = mocker.patch("app.api.core.services.employee_service.EmployeeService.get_employee_by_username") | |
get_employee_svr_mock.return_value = TEST_ENTITY_EMPLOYEES | |
get_allocations_svr_mock = mocker.patch('app.api.core.services.employee_service.EmployeeService.get_employee_allocations_by_username') | |
get_allocations_svr_mock.return_value = TEST_ENTITY_JOB_ALLOCATIONS | |
response = client.get("/employee-service/employees/search-facilities?username=test", headers={'Authorization': MOCK_GOOD_TOKEN}) | |
assert HTTPStatus.OK == response.status_code | |
assert response.data is not None | |
#evaluate return object | |
jsonobject = json.loads(response.data) | |
assert len(jsonobject) == 3 | |
@pytest.mark.freeze_time(TOKEN_DATE_TIME) | |
def test_GivenUsernameQueryEmployeesFacility_fail(client, mocker): | |
get_employee_svr_mock = mocker.patch("app.api.core.services.employee_service.EmployeeService.get_employee_by_username") | |
get_employee_svr_mock.return_value = TEST_INVALID_ENTITY_EMPLOYEES[0] | |
get_allocations_svr_mock = mocker.patch('app.api.core.services.employee_service.EmployeeService.get_employee_allocations_by_username') | |
get_allocations_svr_mock.return_value = TEST_ENTITY_JOB_ALLOCATIONS | |
response = client.get("/employee-service/employees/search-facilities?username=sss", headers={'Authorization': MOCK_GOOD_TOKEN}) | |
assert HTTPStatus.NOT_FOUND == response.status_code | |
#evaluate return object | |
jsonobject = json.loads(response.data) | |
assert len(jsonobject) == 1 | |
assert jsonobject.get('message') == 'No active employee found with the username provided. You have requested this URI [/employee-service/employees/search-facilities] but did you mean /employee-service/employees/search-facilities or /employee-service/employees/<emp_id>/facilities or /employee-service/employees/byusername ?' | |
@pytest.mark.freeze_time(TOKEN_DATE_TIME) | |
def test_GivenUserIdQueryEmployeesFacility_fail_404(client, mocker): | |
get_employee_svr_mock = mocker.patch("app.api.core.services.employee_service.EmployeeService.get_employee_by_username") | |
get_employee_svr_mock.return_value = TEST_INVALID_ENTITY_EMPLOYEES[0] | |
get_allocations_svr_mock = mocker.patch('app.api.core.services.employee_service.EmployeeService.get_employee_allocations_by_username') | |
get_allocations_svr_mock.return_value = TEST_ENTITY_JOB_ALLOCATIONS | |
response = client.get("/employee-service/employees/dora?username=0", headers={'Authorization': MOCK_GOOD_TOKEN}) | |
assert HTTPStatus.NOT_FOUND == response.status_code | |
#evaluate return object | |
assert response.data == b'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">\n<title>404 Not Found</title>\n<h1>Not Found</h1>\n<p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>\n' | |
@pytest.mark.freeze_time(TOKEN_DATE_TIME) | |
def test_GivenUserIdQueryEmployeesFacility_fail_id_0(client, mocker): | |
get_employee_svr_mock = mocker.patch("app.api.core.services.employee_service.EmployeeService.get_employee_by_username") | |
get_employee_svr_mock.return_value = TEST_INVALID_ENTITY_EMPLOYEES[0] | |
get_allocations_svr_mock = mocker.patch('app.api.core.services.employee_service.EmployeeService.get_employee_allocations_by_username') | |
get_allocations_svr_mock.return_value = TEST_ENTITY_JOB_ALLOCATIONS | |
response = client.get("/employee-service/employees/0", headers={'Authorization': MOCK_GOOD_TOKEN}) | |
assert HTTPStatus.UNPROCESSABLE_ENTITY == response.status_code | |
jsonobject = json.loads(response.data) | |
assert len(jsonobject) == 1 | |
assert jsonobject.get("message").get("message") == 'Invalid employee id format. It must be positive integer and great that 0' | |
@pytest.mark.freeze_time(TOKEN_DATE_TIME) | |
def test_GivenUserIdQueryEmployeesFacility_fail_no_id(client, mocker): | |
get_employee_svr_mock = mocker.patch("app.api.core.services.employee_service.EmployeeService.get_employee_by_id") | |
get_employee_svr_mock.side_effect = ValueError() | |
get_allocations_svr_mock = mocker.patch('app.api.core.services.employee_service.EmployeeService.get_employee_allocations_by_username') | |
get_allocations_svr_mock.return_value = TEST_ENTITY_JOB_ALLOCATIONS | |
response = client.get("/employee-service/employees/1", headers={'Authorization': MOCK_GOOD_TOKEN}) | |
assert HTTPStatus.UNPROCESSABLE_ENTITY == response.status_code | |
jsonobject = json.loads(response.data) | |
assert len(jsonobject) == 1 | |
assert jsonobject.get("message").get("message") == 'Invalid employee id format. It must be number only' | |
@pytest.mark.freeze_time(TOKEN_DATE_TIME) | |
def test_GivenUsernameQueryEmployeesFacility_by_department_success(client, mocker): | |
get_employee_svr_mock = mocker.patch("app.api.core.services.employee_service.EmployeeService.get_employee_by_username") | |
get_employee_svr_mock.return_value = TEST_ENTITY_EMPLOYEES | |
# get_allocations_svr_mock = mocker.patch('app.api.core.services.employee_service.EmployeeService.get_employee_allocations_by_username') | |
# get_allocations_svr_mock.return_value = TEST_ENTITY_JOB_ALLOCATIONS | |
get_allocations_svr_mock = mocker.patch('app.api.core.services.employee_service.EmployeeService.get_employee_allocations_by_dept') | |
get_allocations_svr_mock.return_value = TEST_ENTITY_JOB_ALLOCATIONS | |
response = client.get("/employee-service/employees/search-facilities?username=test&department=Test Department 1", headers={'Authorization': MOCK_GOOD_TOKEN}) | |
assert HTTPStatus.OK == response.status_code | |
assert response.data is not None | |
#evaluate return object | |
jsonobject = json.loads(response.data) | |
assert len(jsonobject) == 3 | |
assert jsonobject[0].get('department_name') == "Test Department 1" | |
@pytest.mark.freeze_time(TOKEN_DATE_TIME) | |
def test_GivenUsernameQueryEmployeesFacility_by_department_missing_arguments(client, mocker): | |
get_employee_svr_mock = mocker.patch("app.api.core.services.employee_service.EmployeeService.get_employee_by_username") | |
get_employee_svr_mock.return_value = TEST_ENTITY_EMPLOYEES | |
# get_allocations_svr_mock = mocker.patch('app.api.core.services.employee_service.EmployeeService.get_employee_allocations_by_username') | |
# get_allocations_svr_mock.return_value = TEST_ENTITY_JOB_ALLOCATIONS | |
get_allocations_svr_mock = mocker.patch('app.api.core.services.employee_service.EmployeeService.get_employee_allocations_by_dept') | |
get_allocations_svr_mock.return_value = TEST_ENTITY_JOB_ALLOCATIONS | |
response = client.get("/employee-service/employees/byusername", headers={'Authorization': MOCK_GOOD_TOKEN}) | |
assert HTTPStatus.BAD_REQUEST == response.status_code | |
assert response.data is not None | |
jsonobject = json.loads(response.data) | |
assert len(jsonobject) == 1 | |
assert jsonobject.get("message") == 'Missing username token in the query string' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment