Пример #1
0
    def test_create_file_name_success(self):
        responses.add(responses.GET,
                      url_get_collection_exercise,
                      json=collection_exercise,
                      status=200)
        expected_ru_with_checkletter = "49900000001F"
        expected_exercise_ref = "204901"
        expected_survey_ref = "074"
        expected_file_extension = "xlsx"
        with app.app_context():
            survey_response = GcpSurveyResponse(self.config)
            output = survey_response.create_file_name_for_upload(
                case, business_party, ".xlsx", survey["surveyRef"])

            # Output looks like '49900000001F_204901_074_20220223125323.xlsx' but because of the timestamp always
            # changing, we'll test each bit
            split_filename = output.split("_")
            split_on_dot = split_filename[3].split(".")
            self.assertEqual(split_filename[0], expected_ru_with_checkletter)
            self.assertEqual(split_filename[1], expected_exercise_ref)
            self.assertEqual(split_filename[2], expected_survey_ref)

            # Tests the timestamp format instead of the value as it is always changing
            self.assertTrue(split_on_dot[0].isdigit())
            self.assertTrue(len(split_on_dot[0]), 14)
            self.assertEqual(split_on_dot[1], expected_file_extension)
    def test_account_delete_confirm(self, mock_request,
                                    get_respondent_party_by_id):
        mock_request.get(url_banner_api, status_code=404)
        mock_request.delete(url_auth_delete, status_code=204)
        get_respondent_party_by_id.return_value = {
            "associations": [],
            "emailAddress": "*****@*****.**",
            "firstName": "first_name",
            "id": "f956e8ae-6e0f-4414-b0cf-a07c1aa3e37b",
            "lastName": "last_name",
            "sampleUnitType": "BI",
            "status": "ACTIVE",
            "telephone": "0987654321",
            "respondent_id": 1,
        }
        with app.app_context():
            response = self.app.post("/my-account/delete",
                                     follow_redirects=True)

            self.assertEqual(response.status_code, 200)
            self.assertTrue("Sign in".encode() in response.data)
            self.assertTrue("New to this service?".encode() in response.data)
            self.assertTrue("Email Address".encode() in response.data)
            self.assertTrue("Password".encode() in response.data)
            self.assertTrue("Forgot password?".encode() in response.data)
Пример #3
0
    def test_get_case_data_success(self, get_collection_exercise,
                                   get_collection_instrument,
                                   get_survey_by_short_name,
                                   get_party_by_business_id, get_case, _):

        get_collection_exercise.return_value = collection_exercise
        get_collection_instrument.return_value = collection_instrument_seft
        get_survey_by_short_name.return_value = survey
        get_party_by_business_id.return_value = business_party
        get_case.return_value = case

        with app.app_context():
            case_data = case_controller.get_case_data(case['id'],
                                                      respondent_party['id'],
                                                      business_party['id'],
                                                      survey['shortName'])

            self.assertEqual(collection_exercise['id'],
                             case_data['collection_exercise']['id'])
            self.assertEqual(collection_instrument_seft['id'],
                             case_data['collection_instrument']['id'])
            self.assertEqual(survey['shortName'],
                             case_data['survey']['shortName'])
            self.assertEqual(business_party['id'],
                             case_data['business_party']['id'])
Пример #4
0
    def test_generate_eq_url_no_eq_id(self, mock_request):
        # Given all external services are mocked and we have an EQ collection instrument without an EQ ID
        with open(
                "tests/test_data/collection_instrument/collection_instrument_eq_no_eq_id.json"
        ) as json_data:
            collection_instrument_eq_no_eq_id = json.load(json_data)

        mock_request.get(url_get_ci, json=collection_instrument_eq_no_eq_id)
        mock_request.get(url_banner_api, status_code=404)

        # When create_payload is called
        # Then an InvalidEqPayLoad is raised
        with app.app_context():
            with self.assertRaises(InvalidEqPayLoad) as e:
                EqPayload().create_payload(
                    case,
                    collection_exercise,
                    party_id=respondent_party["id"],
                    business_party_id=business_party["id"],
                    survey=survey_eq,
                    version=None,
                )
        self.assertEqual(
            e.exception.message,
            "Collection instrument 68ad4018-2ddd-4894-89e7-33f0135887a2 "
            "classifiers are incorrect or missing",
        )
Пример #5
0
    def test_too_many_reset_attempts(self, mock_request):
        with app.app_context():
            token = verification.generate_email_token("test.com")
        mock_request.get(url_banner_api, status_code=404)
        mock_request.post(url_reset_password_request, status_code=200)
        mock_request.get(
            url_get_respondent_by_email,
            status_code=200,
            json={"firstName": "Bob", "id": "123456", "password_verification_token": token},
        )
        mock_request.get(url_password_reset_counter, status_code=200, json={"counter": 5})
        mock_request.delete(url_password_reset_counter, status_code=200, json={})
        mock_request.post(
            f"{TestingConfig.PARTY_URL}/party-api/v1/respondents/123456/password-verification-token",
            status_code=200,
            json={"message": "Successfully added token"},
        )

        response = self.app.post("passwords/forgot-password", data=self.email_form, follow_redirects=True)

        self.assertEqual(response.status_code, 200)
        self.assertIn(
            "You've tried to reset your password too many times".encode(),
            response.data,
        )
 def test_get_survey_by_short_name_fail(self):
     with responses.RequestsMock() as rsps:
         rsps.add(rsps.GET, url_get_survey_by_short_name, status=400)
         with app.app_context():
             with self.assertRaises(ApiError):
                 survey_controller.get_survey_by_short_name(
                     survey["shortName"])
    def test_get_case_data_success(
        self,
        get_collection_exercise,
        get_collection_instrument,
        get_survey_by_short_name,
        get_party_by_business_id,
        get_case,
        _,
    ):

        get_collection_exercise.return_value = collection_exercise
        get_collection_instrument.return_value = collection_instrument_seft
        get_survey_by_short_name.return_value = survey
        get_party_by_business_id.return_value = business_party
        get_case.return_value = case

        with app.app_context():
            case_data = case_controller.get_case_data(case["id"],
                                                      respondent_party["id"],
                                                      business_party["id"],
                                                      survey["shortName"])

            self.assertEqual(collection_exercise["id"],
                             case_data["collection_exercise"]["id"])
            self.assertEqual(collection_instrument_seft["id"],
                             case_data["collection_instrument"]["id"])
            self.assertEqual(survey["shortName"],
                             case_data["survey"]["shortName"])
            self.assertEqual(business_party["id"],
                             case_data["business_party"]["id"])
Пример #8
0
 def test_get_respondent_by_party_id_fail(self):
     with responses.RequestsMock() as rsps:
         rsps.add(rsps.GET, url_get_respondent_party, status=500)
         with app.app_context():
             with self.assertRaises(ApiError):
                 party_controller.get_respondent_party_by_id(
                     respondent_party['id'])
Пример #9
0
    def test_generate_eq_url_seft(self, mock_request):
        # Given all external services are mocked and we have seft collection instrument
        mock_request.get(url_get_collection_exercise, json=collection_exercise)
        mock_request.get(url_get_collection_exercise_events,
                         json=collection_exercise_events)
        mock_request.get(url_get_business_party, json=business_party)
        mock_request.get(url_get_survey, json=survey)
        mock_request.get(url_get_ci, json=collection_instrument_seft)
        mock_request.get(url_banner_api, status_code=404)

        # When create_payload is called
        # Then an InvalidEqPayLoad is raised
        with app.app_context():
            with self.assertRaises(InvalidEqPayLoad) as e:
                EqPayload().create_payload(
                    case,
                    collection_exercise,
                    party_id=respondent_party["id"],
                    business_party_id=business_party["id"],
                    survey=survey_eq,
                    version=None,
                )
        self.assertEqual(
            e.exception.message,
            "Collection instrument 68ad4018-2ddd-4894-89e7-33f0135887a2 type is not EQ"
        )
Пример #10
0
    def test_generate_eq_url_for_response_id_for_v2(self, mock_request):
        # Given all external services are mocked and we have an EQ collection instrument without an EQ ID
        mock_request.get(url_get_collection_exercise_events,
                         json=collection_exercise_events)
        mock_request.get(url_get_business_party, json=business_party)
        with open(
                "tests/test_data/collection_instrument/collection_instrument_eq.json"
        ) as json_data:
            collection_instrument_eq = json.load(json_data)

        mock_request.get(url_get_ci, json=collection_instrument_eq)
        mock_request.get(url_banner_api, status_code=404)

        # When create_payload is called
        # Then an InvalidEqPayLoad is raised
        with app.app_context():
            payload = EqPayload().create_payload(
                case,
                collection_exercise,
                party_id=respondent_party["id"],
                business_party_id=business_party["id"],
                survey=survey_eq,
                version="v2",
            )
        self.assertFalse("response_id" in payload)
Пример #11
0
 def test_get_case_categories_fail(self):
     with responses.RequestsMock() as rsps:
         rsps.add(rsps.GET, url_get_case_categories, status=400)
         with app.app_context():
             with self.assertRaises(ApiError):
                 self.assertRaises(ApiError,
                                   case_controller.get_case_categories())
    def test_account_delete(self, mock_request, get_respondent_party_by_id):
        mock_request.get(url_banner_api, status_code=404)
        get_respondent_party_by_id.return_value = {
            "associations": [],
            "emailAddress": "*****@*****.**",
            "firstName": "first_name",
            "id": "f956e8ae-6e0f-4414-b0cf-a07c1aa3e37b",
            "lastName": "last_name",
            "sampleUnitType": "BI",
            "status": "ACTIVE",
            "telephone": "0987654321",
            "respondent_id": 1,
        }
        with app.app_context():
            response = self.app.get("/my-account/delete")

            self.assertEqual(response.status_code, 200)
            self.assertTrue("Delete account".encode() in response.data)
            self.assertTrue(
                "All of the information about your account will be deleted.".
                encode() in response.data)
            self.assertTrue(
                "Once your data has been removed, it cannot be recovered.".
                encode() in response.data)
            self.assertTrue(
                "You will not be able to set up a new account until you are selected for a new survey."
                .encode() in response.data)
Пример #13
0
 def test_upload_collection_instrument_api_error(self, _):
     with responses.RequestsMock() as rsps:
         rsps.add(rsps.POST, url_upload_ci, status=500)
         with app.app_context():
             with self.assertRaises(ApiError):
                 collection_instrument_controller.upload_collection_instrument(
                     self.survey_file, case['id'], business_party['id'])
Пример #14
0
 def test_reset_password_request_fail(self):
     with responses.RequestsMock() as rsps:
         rsps.add(rsps.POST, url_reset_password_request, status=500)
         with app.app_context():
             with self.assertRaises(ApiError):
                 party_controller.reset_password_request(
                     respondent_party['emailAddress'])
Пример #15
0
 def test_collection_instrument_fail(self):
     with responses.RequestsMock() as rsps:
         rsps.add(rsps.GET, url_get_ci, status=400)
         with app.app_context():
             with self.assertRaises(ApiError):
                 collection_instrument_controller.get_collection_instrument(
                     collection_instrument_seft['id'])
Пример #16
0
    def test_get_respondent_by_email_not_found(self):
        with responses.RequestsMock() as rsps:
            rsps.add(rsps.GET, url_get_respondent_email, status=404)
            with app.app_context():
                respondent = party_controller.get_respondent_by_email(
                    respondent_party['emailAddress'])

                self.assertTrue(respondent is None)
Пример #17
0
 def test_upload_collection_instrument_missing_business_party(self, _):
     FileStorage(filename="testfile.xlsx")
     with app.app_context():
         with self.assertRaises(CiUploadError) as e:
             collection_instrument_controller.upload_collection_instrument(
                 self.survey_file, case, None, party["id"], survey)
     self.assertEqual(e.exception.error_message,
                      "Data needed to create the file name is missing")
Пример #18
0
 def test_get_cases_by_party_id_fail(self):
     with responses.RequestsMock() as rsps:
         rsps.add(rsps.GET, url_get_cases_by_party, status=400)
         with app.app_context():
             with self.assertRaises(ApiError):
                 case_controller.get_cases_by_party_id(
                     case['partyId'], self.app_config['CASE_URL'],
                     self.app_config['BASIC_AUTH'])
 def test_get_survey_by_id_fail(self):
     with responses.RequestsMock() as rsps:
         rsps.add(rsps.GET, url_get_survey, status=400)
         with app.app_context():
             with self.assertRaises(ApiError):
                 survey_controller.get_survey(self.app_config["SURVEY_URL"],
                                              self.app_config["BASIC_AUTH"],
                                              survey["id"])
Пример #20
0
 def test_download_collection_instrument_fail(self, _):
     with responses.RequestsMock() as rsps:
         rsps.add(rsps.GET, url_download_ci, status=400)
         with app.app_context():
             with self.assertRaises(ApiError):
                 collection_instrument_controller.download_collection_instrument(
                     collection_instrument_seft['id'], case['id'],
                     business_party['id'])
Пример #21
0
    def test_get_message_count_from_session(self):
        session = Session.from_party_id("id")
        session.set_unread_message_total(3)
        with app.app_context():
            count = conversation_controller.try_message_count_from_session(
                session)

            self.assertEqual(3, count)
Пример #22
0
 def test_get_message_count_unauthorized(self, headers):
     headers.return_value = {"Authorization": "token"}
     session = Session.from_party_id("id")
     with responses.RequestsMock() as rsps:
         rsps.add(rsps.GET, url_get_conversation_count, status=403)
         with app.app_context():
             with self.assertRaises(IncorrectAccountAccessError):
                 conversation_controller.get_message_count_from_api(session)
    def test_reset_password_get_success(self, mock_object):
        mock_object.get(url_verify_token, status_code=200)
        with app.app_context():
            token = verification.generate_email_token("test.com")
        response = self.app.get(f"passwords/reset-password/{token}", follow_redirects=True)

        self.assertEqual(response.status_code, 200)
        self.assertTrue('Reset your password'.encode() in response.data)
Пример #24
0
    def test_get_respondent_by_party_id_not_found(self):
        with responses.RequestsMock() as rsps:
            rsps.add(rsps.GET, url_get_respondent_party, status=404)
            with app.app_context():
                party = party_controller.get_respondent_party_by_id(
                    respondent_party['id'])

                self.assertTrue(party is None)
Пример #25
0
    def test_wrong_account_email_change_verification_token(self, mock_object):
        with app.app_context():
            mock_object.put(url_verify_email, status_code=404)
            mock_object.get(url_banner_api, status_code=404)
            response = self.app.get(
                "/my-account/confirm-account-email-change/test_token")

            self.assertEqual(response.status_code, 404)
    def test_reset_password_post_token_invalid(self, mock_object):
        mock_object.put(url_password_change, status_code=404)
        password_form = {"password": "******", "password_confirm": "Gizmo007!"}
        with app.app_context():
            token = verification.generate_email_token("test.com")
        response = self.app.post(f"passwords/reset-password/{token}", data=password_form, follow_redirects=True)

        self.assertEqual(response.status_code, 404)
        self.assertTrue('Page not found'.encode() in response.data)
    def test_reset_password_post_different_passwords(self, mock_object):
        mock_object.get(url_verify_token, status_code=200)
        password_form = {"password": "******", "password_confirm": "Gizmo007!"}
        with app.app_context():
            token = verification.generate_email_token("test.com")
        response = self.app.post(f"passwords/reset-password/{token}", data=password_form, follow_redirects=True)

        self.assertEqual(response.status_code, 200)
        self.assertTrue('Your passwords do not match'.encode() in response.data)
 def test_delete_user_fail(self):
     with responses.RequestsMock() as rsps:
         rsps.add(rsps.DELETE,
                  url_auth_delete,
                  status=400,
                  content_type="application/json")
         with app.app_context():
             with self.assertRaises(ApiError):
                 auth_controller.delete_account("")
 def test_delete_user_success(self):
     with responses.RequestsMock() as rsps:
         rsps.add(rsps.DELETE,
                  url_auth_delete,
                  status=204,
                  content_type="application/json")
         with app.app_context():
             actual = auth_controller.delete_account("*****@*****.**")
             self.assertEqual(204, actual.status_code)
    def test_reset_password_no_password(self, mock_object):
        mock_object.get(url_verify_token, status_code=200)
        password_form = {}
        with app.app_context():
            token = verification.generate_email_token("test.com")
        response = self.app.post(f"passwords/reset-password/{token}", data=password_form, follow_redirects=True)

        self.assertEqual(response.status_code, 200)
        self.assertTrue("Password is required".encode() in response.data)