def setup_method(self, method): super(TestAwardBrief, self).setup_method(method) self.data_api_client_patch = mock.patch('app.main.views.outcome.data_api_client', autospec=True) self.data_api_client = self.data_api_client_patch.start() self.data_api_client.get_framework.return_value = FrameworkStub( slug='digital-outcomes-and-specialists-4', status='live', lots=[ LotStub(slug='digital-outcomes', allows_brief=True).response(), ] ).single_result_response() brief_stub = BriefStub( framework_slug="digital-outcomes-and-specialists-4", lot_slug="digital-outcomes", status='closed' ).single_result_response() self.data_api_client.get_brief.return_value = brief_stub self.data_api_client.find_brief_responses.return_value = self.brief_responses
def test_has_correct_link_to_supplier_csv(self, slug_suffix): self.data_api_client.get_framework.return_value = FrameworkStub( slug=f'digital-outcomes-and-specialists{slug_suffix}', status='live', lots=[ LotStub(slug='user-research-studios', allows_brief=True).response(), ]).single_result_response() res = self.client.get( f"/buyers/frameworks/digital-outcomes-and-specialists{slug_suffix}/requirements/user-research-studios" ) assert res.status_code == 200 document = html.fromstring(res.get_data(as_text=True)) assert document.xpath( "//a[normalize-space(text())='List of studios (CSV)']" )[0].attrib['href'] == ( f"https://assets.digitalmarketplace.service.gov.uk/digital-outcomes-and-specialists{slug_suffix}" f"/communications/catalogues/user-research-studios.csv")
def test_do_not_show_question_and_answer_dates_for_draft_brief(self): self.data_api_client.get_framework.return_value = FrameworkStub( slug='digital-outcomes-and-specialists-4', status='live', lots=[ LotStub(slug='digital-specialists', allows_brief=True).response(), ]).single_result_response() brief_json = BriefStub( framework_slug="digital-outcomes-and-specialists-4", status="draft", ).single_result_response() brief_json['briefs']['specialistRole'] = 'communicationsManager' brief_json['briefs']["clarificationQuestionsAreClosed"] = True self.data_api_client.get_brief.return_value = brief_json res = self.client.get( "/buyers/frameworks/digital-outcomes-and-specialists-4/requirements/digital-specialists/1234/timeline" ) assert res.status_code == 404
def setup_method(self, method): super().setup_method(method) self.data_api_client_patch = mock.patch( "app.main.views.create_a_brief.edit.data_api_client", autospec=True ) self.data_api_client = self.data_api_client_patch.start() self.data_api_client.get_brief.return_value = BriefStub( framework_slug="digital-outcomes-and-specialists-4", ).single_result_response() self.data_api_client.get_framework.return_value = FrameworkStub( slug='digital-outcomes-and-specialists-4', status='live', lots=[ LotStub(slug='digital-specialists', allows_brief=True).response() ] ).single_result_response() self.login_as_buyer() self.content_fixture = ContentLoader('tests/fixtures/content') self.content_fixture.load_manifest('dos', 'data', 'edit_brief')
def setup_method(self, method): super(TestAwardOrCancelBrief, self).setup_method(method) self.data_api_client_patch = mock.patch('app.main.views.outcome.data_api_client', autospec=True) self.data_api_client = self.data_api_client_patch.start() self.data_api_client.get_framework.return_value = FrameworkStub( slug='digital-outcomes-and-specialists-4', status='live', lots=[ LotStub(slug='digital-outcomes', allows_brief=True).response(), ] ).single_result_response() self.brief = BriefStub( user_id=123, framework_slug='digital-outcomes-and-specialists-4', lot_slug="digital-outcomes", status='closed' ).response() self.data_api_client.get_brief.return_value = {"briefs": self.brief} self.login_as_buyer()
def brief(self, request): """An awarded brief on a live or expired framework""" framework_status = request.param self.data_api_client.get_framework.return_value = FrameworkStub( slug="digital-outcomes-and-specialists-4", status=framework_status, lots=[ LotStub(slug="digital-specialists", allows_brief=True).response() ], ).single_result_response() brief_json = BriefStub( framework_slug="digital-outcomes-and-specialists-4", status="awarded", ).single_result_response() brief_json["briefs"]["publishedAt"] = "2016-04-02T20:10:00.00000Z" brief_json["briefs"]["specialistRole"] = "communicationsManager" brief_json["briefs"]["clarificationQuestionsAreClosed"] = True brief_json["briefs"]["awardedBriefResponseId"] = 999 self.data_api_client.get_brief.return_value = brief_json self.data_api_client.get_brief_response.return_value = { "briefResponses": { "awardDetails": { "awardedContractStartDate": "2016-4-4", "awardedContractValue": "100" }, "id": 213, "status": "awarded", "supplierName": "100 Percent IT Ltd", } } return brief_json["briefs"]
def test_warning_about_setting_requirement_length_is_not_displayed_if_not_specialist_brief( self): self.data_api_client.get_framework.return_value = FrameworkStub( slug='digital-outcomes-and-specialists-4', status='live', lots=[ LotStub(slug='digital-outcomes', allows_brief=True).response() ]).single_result_response() self.data_api_client.get_brief.return_value = BriefStub( framework_slug="digital-outcomes-and-specialists-4", lot_slug="digital-outcomes", status="draft", ).single_result_response() res = self.client.get( "/buyers/frameworks/digital-outcomes-and-specialists-4/requirements/" "digital-outcomes/1234/publish") page_html = res.get_data(as_text=True) assert res.status_code == 200 assert 'This will show you what the supplier application deadline will be' not in page_html assert 'Your requirements will be open for 2 weeks' in page_html
def test_withdraw_brief_submission(self, framework_status): self.data_api_client.get_framework.return_value = FrameworkStub( slug='digital-outcomes-and-specialists-4', status=framework_status, lots=[LotStub(slug='digital-specialists', allows_brief=True).response()] ).single_result_response() self.data_api_client.get_brief.return_value = BriefStub( framework_slug='digital-outcomes-and-specialists-4', status='live', ).single_result_response() res = self.client.post( "/buyers/frameworks/digital-outcomes-and-specialists-4/requirements/digital-specialists/1234/withdraw", data={"withdraw_confirmed": True} ) assert res.status_code == 302 assert self.data_api_client.delete_brief.call_args_list == [] assert res.location == "http://localhost{}".format(self.briefs_dashboard_url) expected_flash_message = ("You’ve withdrawn your requirements for ‘I need a thing to do a thing’", "success") self.assert_flashes(*expected_flash_message) self.assert_flashes_with_dm_alert(*expected_flash_message)
def test_delete_brief_submission(self): for framework_status in ['live', 'expired']: self.data_api_client.get_framework.return_value = FrameworkStub( slug='digital-outcomes-and-specialists-4', status=framework_status, lots=[ LotStub(slug='digital-specialists', allows_brief=True).response() ]).single_result_response() res = self.client.post( "/buyers/frameworks/digital-outcomes-and-specialists-4/requirements/digital-specialists/1234/delete", data={"delete_confirmed": "True"}) assert res.status_code == 302 assert self.data_api_client.delete_brief.called assert res.location == "http://localhost{}".format( self.briefs_dashboard_url) expected_message = "Your requirements ‘I need a thing to do a thing’ were deleted" expected_category = "success" self.assert_flashes(expected_message, expected_category) self.assert_flashes_with_dm_alert(expected_message, expected_category)
def test_show_brief_clarification_question_form_for_live_and_expired_framework( self): framework_statuses = ['live', 'expired'] for framework_status in framework_statuses: self.data_api_client.get_framework.return_value = FrameworkStub( slug="digital-outcomes-and-specialists-4", status=framework_status, lots=[ LotStub(slug="digital-specialists", allows_brief=True).response(), ]).single_result_response() brief_json = BriefStub( framework_slug="digital-outcomes-and-specialists-4", status="live", ).single_result_response() brief_json['briefs']["clarificationQuestionsAreClosed"] = False self.data_api_client.get_brief.return_value = brief_json res = self.client.get( "/buyers/frameworks/digital-outcomes-and-specialists-4/requirements" "/digital-specialists/1234/supplier-questions/answer-question") assert res.status_code == 200
def setup_method(self, method): super().setup_method(method) self.data_api_client_patch = mock.patch( "app.main.views.withdraw_brief.data_api_client", autospec=True ) self.data_api_client = self.data_api_client_patch.start() self.data_api_client.get_brief.return_value = BriefStub().single_result_response() self.data_api_client.get_framework.return_value = FrameworkStub( slug='digital-outcomes-and-specialists-4', status='live', lots=[ LotStub(slug='digital-specialists', allows_brief=True).response() ] ).single_result_response() self.brief = BriefStub( user_id=123, framework_slug='digital-outcomes-and-specialists-4', lot_slug="digital-specialists", status='draft' ).response() self.login_as_buyer()
def brief(self, request): """A closed brief on a live or expired framework""" framework_status = request.param self.data_api_client.get_framework.return_value = FrameworkStub( slug="digital-outcomes-and-specialists-4", status=framework_status, lots=[ LotStub(slug="digital-specialists", allows_brief=True).response() ], ).single_result_response() brief_json = BriefStub( framework_slug="digital-outcomes-and-specialists-4", status="closed", ).single_result_response() brief_json["briefs"]["publishedAt"] = "2016-04-02T20:10:00.00000Z" brief_json["briefs"]["specialistRole"] = "communicationsManager" brief_json["briefs"]["clarificationQuestionsAreClosed"] = True self.data_api_client.get_brief.return_value = brief_json return brief_json["briefs"]
def test_show_clarification_questions_page_for_live_brief_with_one_question( self, framework_status): self.data_api_client.get_framework.return_value = FrameworkStub( slug='digital-outcomes-and-specialists-4', status=framework_status, lots=[ LotStub(slug='digital-specialists', allows_brief=True).response(), ]).single_result_response() brief_json = BriefStub( framework_slug="digital-outcomes-and-specialists-4", status="live", clarification_questions=[{ "question": "Why is my question a question?", "answer": "Because", "publishedAt": "2016-01-01T00:00:00.000000Z" }], ).single_result_response() brief_json['briefs']['publishedAt'] = "2016-04-02T20:10:00.00000Z" brief_json['briefs']["clarificationQuestionsAreClosed"] = True self.data_api_client.get_brief.return_value = brief_json res = self.client.get( "/buyers/frameworks/digital-outcomes-and-specialists-4/requirements/digital-specialists/1234/supplier-questions" # noqa ) assert res.status_code == 200 page_html = res.get_data(as_text=True) assert "Supplier questions" in page_html assert "Why is my question a question?" in page_html assert "Because" in page_html assert "Answer a supplier question" in page_html assert "No questions or answers have been published" not in page_html
def test_404_if_framework_does_not_allow_brief(self): self.data_api_client.get_framework.return_value = FrameworkStub( slug='digital-outcomes-and-specialists-4', status='live', lots=[ LotStub(slug='digital-specialists', allows_brief=False).response(), ]).single_result_response() brief_json = BriefStub( framework_slug="digital-outcomes-and-specialists-4", ).single_result_response() brief_json['briefs']["clarificationQuestionsAreClosed"] = False self.data_api_client.get_brief.return_value = brief_json res = self.client.post( "/buyers/frameworks/digital-outcomes-and-specialists-4/requirements" "/digital-specialists/1234/supplier-questions/answer-question", data={ "question": "Why?", "answer": "Because", }) assert res.status_code == 404 assert not self.data_api_client.add_brief_clarification_question.called
def test_returns_mapping_which_can_be_changed_using_kwargs( self, kwarg, key, value): assert key in LotStub().response() assert LotStub(**{kwarg: value}).response()[key] == value