def test_process_dos_results_for_one_good_one_bad_service(mock_data_client): declaration_content = mock.Mock() question_numbers = mock.PropertyMock(side_effect=[2, 18, 22, -1]) type(declaration_content.get_question.return_value).number = question_numbers content_loader = mock.Mock() content_loader.get_manifest.return_value = declaration_content # Service fails on essential but second lot service is OK so application should Pass overall bad_service = COMPLETE_RESEARCH_PARTICIPANTS_DRAFT.copy() bad_service['anonymousRecruitment'] = False declaration = OrderedDict([("key1", True), ("key2", False), ("key3", False), ("status", "complete")]) mock_data_client.get_interested_suppliers.return_value = {"interestedSuppliers": [123456]} mock_data_client.get_supplier_declaration.return_value = {"declaration": declaration} mock_data_client.find_draft_services_iter.return_value = iter((bad_service, COMPLETE_OUTCOMES_DRAFT,)) process_dos_results(mock_data_client, content_loader, 'user') mock_data_client.set_framework_result.assert_called_with(123456, 'digital-outcomes-and-specialists', True, 'user')
def test_process_dos_results_for_incomplete_declaration(mock_data_client): declaration_content = mock.Mock() question_numbers = mock.PropertyMock(side_effect=[2, 18, 22, -1]) type(declaration_content.get_question.return_value).number = question_numbers content_loader = mock.Mock() content_loader.get_manifest.return_value = declaration_content # Declaration not complete so application should fail declaration = OrderedDict([("key1", True), ("key2", False), ("key3", False), ("status", "started")]) mock_data_client.get_interested_suppliers.return_value = {"interestedSuppliers": [123456]} mock_data_client.get_supplier_declaration.return_value = {"declaration": declaration} mock_data_client.find_draft_services.return_value = { "services": [COMPLETE_OUTCOMES_DRAFT, COMPLETE_RESEARCH_PARTICIPANTS_DRAFT] } process_dos_results(mock_data_client, content_loader, 'user') mock_data_client.set_framework_result.assert_called_with(123456, 'digital-outcomes-and-specialists', False, 'user')
def test_process_dos_results_for_successful(mock_data_client): declaration_content = mock.Mock() question_numbers = mock.PropertyMock(side_effect=[2, 18, 22, -1]) type(declaration_content.get_question.return_value).number = question_numbers content_loader = mock.Mock() content_loader.get_manifest.return_value = declaration_content # Question 22 = True is a discretionary fail, so result should be discretionary declaration = OrderedDict([("key1", True), ("key2", False), ("key3", True), ("status", "complete")]) mock_data_client.get_interested_suppliers.return_value = {"interestedSuppliers": [123456]} mock_data_client.get_supplier_declaration.return_value = {"declaration": declaration} mock_data_client.find_draft_services.return_value = { "services": [COMPLETE_OUTCOMES_DRAFT, COMPLETE_RESEARCH_PARTICIPANTS_DRAFT] } process_dos_results(mock_data_client, content_loader, 'user') # Discretionary result should not update `supplier_frameworks` at all mock_data_client.set_framework_result.assert_not_called()
- on_framework=false if declaration FAILed or there are no unfailed services - on_framework=NULL (no call to API) if declaration DISCRETIONARY and at least one lot not `failed` Usage: scripts/insert-dos-framework-results.py <path_to_frameworks> <stage> --api-token=<data_api_token> Example: python scripts/insert-dos-framework-results.py ../digitalmarkeplace-frameworks dev --api-token=myToken """ import sys sys.path.insert(0, '.') import getpass from dmscripts.env import get_api_endpoint_from_stage from dmutils import content_loader from docopt import docopt from dmapiclient import DataAPIClient from dmscripts.insert_dos_framework_results import process_dos_results from dmutils.content_loader import ContentLoader if __name__ == '__main__': arguments = docopt(__doc__) data_api_url = get_api_endpoint_from_stage(arguments['<stage>'], 'api') content_loader = ContentLoader(arguments['<path_to_frameworks>']) client = DataAPIClient(data_api_url, arguments['--api-token']) user = getpass.getuser() process_dos_results(client, content_loader, user)