Example #1
0
    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
Example #4
0
    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')
Example #5
0
    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
Example #8
0
    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
Example #11
0
    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