Skip to content

Instantly share code, notes, and snippets.

@default-work
Created July 14, 2021 17:05
Show Gist options
  • Save default-work/3678fb46b97a471cbc243b068534175f to your computer and use it in GitHub Desktop.
Save default-work/3678fb46b97a471cbc243b068534175f to your computer and use it in GitHub Desktop.
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