Created
July 14, 2021 17:05
-
-
Save default-work/3678fb46b97a471cbc243b068534175f to your computer and use it in GitHub Desktop.
Revisions
-
Artur Mustafin created this gist
Jul 14, 2021 .There are no files selected for viewing
This file contains hidden or 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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,187 @@ 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'