def test_handle_verification_affirmative_message(sleep, database): client = mock.create_autospec(nexmo.Client, instance=True) client.application_id = "appid" client.send_message.return_value = {"messages": [{"error-text": ""}]} injector.set("nexmo.client", client) hotline_virtual_number = "1234567890" injector.set("secrets.virtual_number", hotline_virtual_number) event = helpers.create_event() responses = ("ok", "yes", "okay") for response in responses: member = helpers.add_unverfied_members(event) verification.maybe_handle_verification(member.number, response) member = db.get_member_by_number(member.number) assert member.verified expected_msg = "Thank you, your number is confirmed." client.send_message.assert_called_with({ "from": event.primary_number, "to": member.number, "text": expected_msg })
def handle_member_answer( event_number: str, member_number: str, origin_conversation_uuid: str, origin_call_uuid: str, client: nexmo.Client, ): """Connects an organizer to a call-in-progress when they answer.""" # Members can actually be part of multiple events, so look up the event # separately. member = db.get_member_by_number(member_number) event = db.get_event_by_number(event_number) if member is None or event is None: error_ncco = [{ "action": "talk", "text": common_text.voice_answer_error }] return error_ncco client.send_speech( origin_call_uuid, text=common_text.voice_answer_announce.format(member=member)) ncco = [ { "action": "talk", "text": common_text.voice_answer_greeting.format(member=member, event=event), }, { "action": "conversation", "name": origin_conversation_uuid, "startOnEnter": True, "endOnExit": True, }, ] audit_log.log( audit_log.Kind.VOICE_CONVERSATION_ANSWERED, description=f"{member.name} answered {origin_conversation_uuid[-12:]}.", user="******", event=event, ) return ncco
def handle_member_answer( event_number: str, member_number: str, origin_conversation_uuid: str, origin_call_uuid: str, client: nexmo.Client, ): """Connects an organizer to a call-in-progress when they answer.""" # Members can actually be part of multiple events, so look up the event # separately. member = db.get_member_by_number(member_number) event = db.get_event_by_number(event_number) if member is None or event is None: error_ncco = [{ "action": "talk", "text": ("Oh no, an error occurred and we couldn't find the event or " "member entry for this call."), }] return error_ncco client.send_speech(origin_call_uuid, text=f"{member.name} is joining this call.") ncco = [ { "action": "talk", "text": f"Hello {member.name}, connecting you to {event.name}.", }, { "action": "conversation", "name": origin_conversation_uuid, "startOnEnter": True, "endOnExit": True, }, ] return ncco
def test_handle_verification_negative_message(sleep, database): client = mock.create_autospec(nexmo.Client, instance=True) client.application_id = "appid" client.send_message.return_value = {"messages": [{"error-text": ""}]} injector.set("nexmo.client", client) hotline_virtual_number = "1234567890" injector.set("secrets.virtual_number", hotline_virtual_number) event = helpers.create_event() responses = ("nyet", "nay", "no way") for response in responses: member = helpers.add_unverfied_members(event) verification.maybe_handle_verification(member.number, response) member = db.get_member_by_number(member.number) assert not member.verified client.send_message.assert_not_called()