示例#1
0
 def test_user_validated(self):
     profile = UserProfile(validated=False)
     dialog_state = DialogState(phone_number="123456789",
                                seq="0",
                                user_profile=profile)
     event = UserValidated(
         phone_number="123456789",
         user_profile=profile,
         code_validation_payload=CodeValidationPayload(
             valid=True,
             is_demo=False,
             account_info={
                 "employer_id": 1,
                 "unit_id": 1,
                 "employer_name": "employer_name",
                 "unit_name": "unit_name",
             },
         ),
     )
     event.apply_to(dialog_state)
     self.assertTrue(dialog_state.user_profile.validated)
     self.assertEqual(
         {
             "employer_id": 1,
             "unit_id": 1,
             "employer_name": "employer_name",
             "unit_name": "unit_name",
         },
         dialog_state.user_profile.account_info,
     )
示例#2
0
 def test_user_revalidated(self):
     profile = UserProfile(validated=True, is_demo=True)
     dialog_state = DialogState(
         "123456789",
         "0",
         user_profile=profile,
         current_drill=DRILL,
         drill_instance_id=uuid.uuid4(),
         current_prompt_state=PromptState(slug=DRILL.prompts[0].slug,
                                          start_time=NOW),
     )
     event = UserValidated(
         phone_number="123456789",
         user_profile=profile,
         code_validation_payload=CodeValidationPayload(
             valid=True, is_demo=False, account_info={"foo": "bar"}),
     )
     event.apply_to(dialog_state)
     self.assertTrue(dialog_state.user_profile.validated)
     self.assertFalse(dialog_state.user_profile.is_demo)
     self.assertIsNone(dialog_state.current_drill)
     self.assertIsNone(dialog_state.current_prompt_state)
     self.assertIsNone(dialog_state.drill_instance_id)
     self.assertEqual({"foo": "bar"},
                      dialog_state.user_profile.account_info)
示例#3
0
 def test_user_validated(self):
     original = UserValidated(
         "123456789",
         user_profile=UserProfile(True),
         code_validation_payload=CodeValidationPayload(valid=True,
                                                       is_demo=True),
     )
     serialized = original.to_dict()
     deserialized = event_from_dict(serialized)
     self._make_base_assertions(original, deserialized)
示例#4
0
 def test_user_validated(self):
     profile = UserProfile(validated=False)
     dialog_state = DialogState("123456789", "0", user_profile=profile)
     event = UserValidated(
         phone_number="123456789",
         user_profile=profile,
         code_validation_payload=CodeValidationPayload(
             valid=True, is_demo=False, account_info={"foo": "bar"}),
     )
     event.apply_to(dialog_state)
     self.assertTrue(dialog_state.user_profile.validated)
     self.assertEqual({"foo": "bar"},
                      dialog_state.user_profile.account_info)
示例#5
0
 def test_user_revalidated(self):
     user_id = self._make_user_and_get_id()
     for slug in get_all_drill_slugs():
         drill = copy(self.drill)
         drill.slug = slug
         event = DrillStarted(
             phone_number=self.phone_number,
             user_profile=UserProfile(True),
             drill=Drill(slug=slug, name="name", prompts=[]),
             first_prompt=self.prompt,
         )
         event2 = DrillCompleted(
             phone_number=self.phone_number,
             user_profile=UserProfile(True),
             drill_instance_id=event.drill_instance_id,
         )
         self.repo._mark_drill_started(user_id, event, self.repo.engine)
         self.repo._mark_drill_completed(event2, self.repo.engine)
         drill_status = self.repo.get_drill_status(user_id, slug)
         self.assertIsNotNone(drill_status.started_time)
         self.assertIsNotNone(drill_status.completed_time)
     self.repo.update_user(
         self._make_batch([
             UserValidated(
                 phone_number=self.phone_number,
                 user_profile=UserProfile(True),
                 code_validation_payload=CodeValidationPayload(valid=True),
             )
         ]))
     for slug in get_all_drill_slugs():
         drill_status = self.repo.get_drill_status(user_id, slug)
         self.assertIsNone(drill_status.drill_instance_id)
         self.assertIsNone(drill_status.started_time)
         self.assertIsNone(drill_status.completed_time)
示例#6
0
 def test_initiates_first_drill(self):
     batch1 = DialogEventBatch(
         phone_number="123456789",
         seq="0",
         events=[
             UserValidated(
                 phone_number="123456789",
                 user_profile=UserProfile(True),
                 code_validation_payload=CodeValidationPayload(valid=True),
             ),
             DrillStarted(
                 phone_number="123456789",
                 user_profile=UserProfile(True),
                 drill=self.drill,
                 first_prompt=self.drill.prompts[0],
             ),
         ],
     )
     batch2 = DialogEventBatch(
         phone_number="987654321",
         seq="1",
         events=[
             DrillStarted(
                 phone_number="987654321",
                 user_profile=UserProfile(True),
                 drill=self.drill,
                 first_prompt=self.drill.prompts[0],
             )
         ],
     )
     self.assertTrue(initiates_first_drill(batch1))
     self.assertFalse(initiates_first_drill(batch2))
示例#7
0
 def test_user_validated_event(self):
     code_validation_payload = CodeValidationPayload(valid=True,
                                                     is_demo=False)
     dialog_events: List[DialogEvent] = [
         UserValidated(self.phone, self.validated_user_profile,
                       code_validation_payload)
     ]
     outbound_messages = get_outbound_sms_commands(dialog_events)
     self.assertEqual(len(outbound_messages), 0)
示例#8
0
 def _make_user_and_get_id(self, **overrides) -> uuid.UUID:
     return self.repo._create_or_update_user(
         self._make_batch([
             UserValidated(
                 phone_number=overrides.get("phone_number",
                                            self.phone_number),
                 user_profile=UserProfile(True),
                 code_validation_payload=CodeValidationPayload(valid=True),
             )
         ]),
         None,
         self.repo.engine,
     )
示例#9
0
 def _validate_demo_registration(
         self, dialog_state: DialogState,
         base_args: Dict[str, Any]) -> Optional[List[DialogEvent]]:
     if not dialog_state.user_profile.is_demo:
         return None
     validation_payload = self.registration_validator.validate_code(
         self.content_lower)
     if validation_payload.valid:
         return [
             UserValidated(code_validation_payload=validation_payload,
                           **base_args)
         ]
     return None
示例#10
0
    def _validate_registration(
        self, dialog_state: DialogState, base_args: Dict[str, Any]
    ) -> Optional[List[stopcovid.dialog.models.events.DialogEvent]]:

        if dialog_state.user_profile.is_demo or not dialog_state.user_profile.validated:
            validation_payload = self.registration_validator.validate_code(
                self.content_lower)
            if validation_payload.valid:
                return [
                    UserValidated(code_validation_payload=validation_payload,
                                  **base_args)
                ]
            if not dialog_state.user_profile.validated:
                return [UserValidationFailed(**base_args)]
示例#11
0
 def _validate_registration(
         self, dialog_state: DialogState,
         base_args: Dict[str, Any]) -> Optional[List[DialogEvent]]:
     if not dialog_state.user_profile.validated or (
             dialog_state.user_profile.account_info
             and not dialog_state.user_profile.account_info.employer_id):
         validation_payload = self.registration_validator.validate_code(
             self.content_lower)
         if validation_payload.valid:
             return [
                 UserValidated(code_validation_payload=validation_payload,
                               **base_args)
             ]
         if not dialog_state.user_profile.validated:
             return [UserValidationFailed(**base_args)]
     return None
    def setUp(self):
        os.environ["STAGE"] = "test"
        self.drill_progress_repo = DrillProgressRepository(
            db.get_test_sqlalchemy_engine)
        self.drill_progress_repo.drop_and_recreate_tables_testing_only()
        self.phone_number = "123456789"
        self.user_id = self.drill_progress_repo._create_or_update_user(
            DialogEventBatch(
                events=[
                    UserValidated(self.phone_number, UserProfile(True),
                                  CodeValidationPayload(True))
                ],
                phone_number=self.phone_number,
                seq="0",
                batch_id=uuid.uuid4(),
            ),
            None,
            self.drill_progress_repo.engine,
        )

        drill_db_patch = patch(
            "stopcovid.drill_progress.trigger_reminders.ReminderTriggerer._get_drill_progress_repo",
            return_value=self.drill_progress_repo,
        )
        drill_db_patch.start()

        self.addCleanup(drill_db_patch.stop)

        self.idempotency_checker = IdempotencyChecker(
            region_name="us-west-2",
            endpoint_url="http://localhost:9000",
            aws_access_key_id="fake-key",
            aws_secret_access_key="fake-secret",
        )
        self.idempotency_checker.drop_and_recreate_table()

        idempotency_patch = patch(
            "stopcovid.drill_progress.trigger_reminders.IdempotencyChecker",
            return_value=self.idempotency_checker,
        )
        idempotency_patch.start()
        self.addCleanup(idempotency_patch.stop)
    def test_user_revalidated(self):
        drill_instance1 = self._make_drill_instance()
        drill_instance2 = self._make_drill_instance()
        self.repo._save_drill_instance(drill_instance1)
        self.repo._save_drill_instance(drill_instance2)
        self.assertTrue(drill_instance1.is_valid)
        self.assertTrue(drill_instance2.is_valid)

        self.repo.update_user(
            self._make_batch([
                UserValidated(
                    phone_number=self.phone_number,
                    user_profile=UserProfile(True),
                    code_validation_payload=CodeValidationPayload(
                        valid=True, is_demo=True),
                )
            ]))
        drill_instance1 = self.repo.get_drill_instance(
            drill_instance1.drill_instance_id)
        drill_instance2 = self.repo.get_drill_instance(
            drill_instance2.drill_instance_id)
        self.assertFalse(drill_instance1.is_valid)
        self.assertFalse(drill_instance2.is_valid)
 def setUp(self):
     logging.disable(logging.CRITICAL)
     self.repo = DrillProgressRepository(db.get_test_sqlalchemy_engine)
     self.repo.drop_and_recreate_tables_testing_only()
     self.phone_number = "123456789"
     self.prompt1 = Prompt(slug="first", messages=[])
     self.prompt2 = Prompt(slug="second", messages=[])
     self.drill = Drill(slug="slug", name="name", prompts=[self.prompt1])
     self.seq = 1
     self.user_id = self.repo._create_or_update_user(
         DialogEventBatch(
             events=[
                 UserValidated(self.phone_number, UserProfile(True),
                               CodeValidationPayload(True))
             ],
             phone_number=self.phone_number,
             seq="0",
             batch_id=uuid.uuid4(),
         ),
         None,
         self.repo.engine,
     )
     self.drill_instance = self._make_drill_instance()