def test_it_returns_existing_lookup(self): lookup = PhoneNumberLookup(phone_number='5551234567', is_valid=True) lookup.save() with self.mock_twilio(): assert PhoneNumberLookup.objects.get_or_lookup('5551234567') == lookup self.is_phone_number_valid.assert_not_called() self.get_carrier_info.assert_not_called()
def test_it_ignores_users_with_invalid_numbers(self): user = OnboardingInfoFactory().user r = RemindBoops() assert r.get_queryset().count() == 1 # type: ignore pl = PhoneNumberLookup(phone_number=user.phone_number, is_valid=False) pl.save() assert r.get_queryset().count() == 0 # type: ignore
def test_it_modifies_existing_records(self, db): orig = PhoneNumberLookup(phone_number="5551234567", is_valid=True, carrier={"hi": 1}) orig.save() lookup = PhoneNumberLookup.objects.invalidate("5551234567") assert lookup.pk == orig.pk assert lookup.is_valid is False assert lookup.carrier is None
def test_send_sms_still_works_if_lookup_says_number_is_valid( db, settings, smsoutbox): apply_twilio_settings(settings) pn = PhoneNumberLookup(phone_number="5551234567", is_valid=True) pn.carrier = {"blah": 1} pn.save() send_sms("5551234567", "boop") assert len(smsoutbox) == 1
def test_send_sms_ignores_invalid_numbers_we_thought_were_valid( db, settings, requests_mock): apply_twilio_settings(settings) mock_invalid_number(settings, requests_mock) PhoneNumberLookup(phone_number="5551234567", is_valid=True, carrier={}).save() assert send_sms("5551234567", "boop", ignore_invalid_phone_number=True) == INVALID_SMS_RESULT lookup = PhoneNumberLookup.objects.get(phone_number="5551234567") assert lookup.is_valid is False
def test_it_works(self, settings): UserFactory(phone_number='5551234567', username='******') UserFactory(phone_number='5551230000', username='******') lookup = PhoneNumberLookup(phone_number='5551234567', is_valid=True, carrier={'type': 'mobile'}) lookup.save() settings.TWILIO_ACCOUNT_SID = 'blarg' with self.mock_twilio(is_valid=False): assert self.run_command() == [ 'Looking up phone number for blarg.', 'Done syncing phone number lookups.' ] self.is_phone_number_valid.assert_called_once_with('5551230000') self.is_phone_number_valid.reset_mock() assert self.run_command() == ['Done syncing phone number lookups.'] self.is_phone_number_valid.assert_not_called() assert PhoneNumberLookup.objects.get( phone_number='5551230000').is_valid is False
def test_it_works(self, settings): UserFactory(phone_number="5551234567", username="******") UserFactory(phone_number="5551230000", username="******") lookup = PhoneNumberLookup(phone_number="5551234567", is_valid=True, carrier={"type": "mobile"}) lookup.save() settings.TWILIO_ACCOUNT_SID = "blarg" with self.mock_twilio(is_valid=False): assert self.run_command() == [ "Looking up phone number for blarg.", "Done syncing phone number lookups.", ] self.is_phone_number_valid.assert_called_once_with("5551230000") self.is_phone_number_valid.reset_mock() assert self.run_command() == ["Done syncing phone number lookups."] self.is_phone_number_valid.assert_not_called() assert PhoneNumberLookup.objects.get( phone_number="5551230000").is_valid is False
def test_users_are_excluded_when_lookup_indicates_invalid_phone_number(self): PhoneNumberLookup(phone_number=self.phone_number, is_valid=False).save() assert self.get_users_with_valid_numbers().count() == 0
from unittest.mock import patch from contextlib import contextmanager import pytest from users.models import JustfixUser from users.tests.factories import UserFactory from texting.models import ( PhoneNumberLookup, get_lookup_description_for_phone_number, exclude_users_with_invalid_phone_numbers, ) @pytest.mark.parametrize('obj,expected', [ [PhoneNumberLookup(), 'unknown'], [PhoneNumberLookup(is_valid=True), 'valid'], [PhoneNumberLookup(is_valid=False), 'invalid'], ]) def test_pnl_validity_str(obj, expected): assert obj.validity_str == expected @pytest.mark.parametrize('obj,expected', [ [PhoneNumberLookup(), ''], [PhoneNumberLookup(carrier={'type': 'mobile'}), 'mobile'], ]) def test_pnl_carrier_type(obj, expected): assert obj.carrier_type == expected @pytest.mark.parametrize('obj,expected', [
from users.models import JustfixUser from users.tests.factories import UserFactory from texting.models import ( PhoneNumberLookup, Reminder, REMINDERS, get_lookup_description_for_phone_number, exclude_users_with_invalid_phone_numbers, ) from texting.twilio import SendSmsResult, TWILIO_BLOCKED_NUMBER_ERR, TWILIO_OTHER_ERR @pytest.mark.parametrize( "obj,expected", [ [PhoneNumberLookup(), "unknown"], [PhoneNumberLookup(is_valid=True), "valid"], [PhoneNumberLookup(is_valid=False), "invalid"], ], ) def test_pnl_validity_str(obj, expected): assert obj.validity_str == expected @pytest.mark.parametrize( "obj,expected", [ [PhoneNumberLookup(), ""], [PhoneNumberLookup(carrier={"type": "mobile"}), "mobile"], ], )
def test_send_sms_does_not_send_to_invalid_numbers(db, settings, requests_mock): apply_twilio_settings(settings) PhoneNumberLookup(phone_number="5551234567", is_valid=False).save() assert send_sms("5551234567", "boop", ignore_invalid_phone_number=True) == INVALID_SMS_RESULT