17
17
RBACPermission ,
18
18
)
19
19
from apps .base .models import UserNotificationPolicy
20
+ from apps .phone_notifications .exceptions import FailedToFinishVerification
20
21
from apps .schedules .models import CustomOnCallShift , OnCallScheduleWeb
21
22
from apps .user_management .models .user import default_working_hours
22
23
@@ -471,7 +472,7 @@ def test_user_get_other_verification_code(
471
472
472
473
client = APIClient ()
473
474
url = reverse ("api-internal:user-get-verification-code" , kwargs = {"pk" : admin .public_primary_key })
474
- with patch ("apps.twilioapp.phone_manager.PhoneManager.send_verification_code " , return_value = Mock ()):
475
+ with patch ("apps.phone_notifications.phone_backend.PhoneBackend.send_verification_sms " , return_value = Mock ()):
475
476
response = client .get (url , format = "json" , ** make_user_auth_headers (tester , token ))
476
477
477
478
assert response .status_code == expected_status
@@ -486,7 +487,7 @@ def test_validation_of_verification_code(
486
487
client = APIClient ()
487
488
url = reverse ("api-internal:user-verify-number" , kwargs = {"pk" : user .public_primary_key })
488
489
with patch (
489
- "apps.twilioapp.phone_manager.PhoneManager .verify_phone_number" , return_value = ( True , None )
490
+ "apps.phone_notifications.phone_backend.PhoneBackend .verify_phone_number" , return_value = True
490
491
) as verify_phone_number :
491
492
url_with_token = f"{ url } ?token=some_token"
492
493
r = client .put (url_with_token , format = "json" , ** make_user_auth_headers (user , token ))
@@ -504,6 +505,24 @@ def test_validation_of_verification_code(
504
505
assert verify_phone_number .call_count == 1
505
506
506
507
508
+ @pytest .mark .django_db
509
+ def test_verification_code_provider_exception (
510
+ make_organization_and_user_with_plugin_token ,
511
+ make_user_auth_headers ,
512
+ ):
513
+ organization , user , token = make_organization_and_user_with_plugin_token ()
514
+ client = APIClient ()
515
+ url = reverse ("api-internal:user-verify-number" , kwargs = {"pk" : user .public_primary_key })
516
+ with patch (
517
+ "apps.phone_notifications.phone_backend.PhoneBackend.verify_phone_number" ,
518
+ side_effect = FailedToFinishVerification ,
519
+ ) as verify_phone_number :
520
+ url_with_token = f"{ url } ?token=some_token"
521
+ r = client .put (url_with_token , format = "json" , ** make_user_auth_headers (user , token ))
522
+ assert r .status_code == 503
523
+ assert verify_phone_number .call_count == 1
524
+
525
+
507
526
@pytest .mark .django_db
508
527
@pytest .mark .parametrize (
509
528
"role,expected_status" ,
@@ -561,7 +580,7 @@ def test_user_verify_another_phone(
561
580
client = APIClient ()
562
581
url = reverse ("api-internal:user-verify-number" , kwargs = {"pk" : other_user .public_primary_key })
563
582
564
- with patch ("apps.twilioapp.phone_manager.PhoneManager .verify_phone_number" , return_value = ( True , None ) ):
583
+ with patch ("apps.phone_notifications.phone_backend.PhoneBackend .verify_phone_number" , return_value = True ):
565
584
response = client .put (f"{ url } ?token=12345" , format = "json" , ** make_user_auth_headers (tester , token ))
566
585
567
586
assert response .status_code == expected_status
@@ -686,7 +705,7 @@ def test_admin_can_detail_users(
686
705
assert response .status_code == status .HTTP_200_OK
687
706
688
707
689
- @patch ("apps.twilioapp.phone_manager.PhoneManager.send_verification_code " , return_value = Mock ())
708
+ @patch ("apps.phone_notifications.phone_backend.PhoneBackend.send_verification_sms " , return_value = Mock ())
690
709
@pytest .mark .django_db
691
710
def test_admin_can_get_own_verification_code (
692
711
mock_verification_start ,
@@ -702,7 +721,7 @@ def test_admin_can_get_own_verification_code(
702
721
assert response .status_code == status .HTTP_200_OK
703
722
704
723
705
- @patch ("apps.twilioapp.phone_manager.PhoneManager.send_verification_code " , return_value = Mock ())
724
+ @patch ("apps.phone_notifications.phone_backend.PhoneBackend.send_verification_sms " , return_value = Mock ())
706
725
@pytest .mark .django_db
707
726
def test_admin_can_get_another_user_verification_code (
708
727
mock_verification_start ,
@@ -719,7 +738,7 @@ def test_admin_can_get_another_user_verification_code(
719
738
assert response .status_code == status .HTTP_200_OK
720
739
721
740
722
- @patch ("apps.twilioapp.phone_manager.PhoneManager .verify_phone_number" , return_value = ( True , None ) )
741
+ @patch ("apps.phone_notifications.phone_backend.PhoneBackend .verify_phone_number" , return_value = True )
723
742
@pytest .mark .django_db
724
743
def test_admin_can_verify_own_phone (
725
744
mocked_verification_check ,
@@ -734,7 +753,7 @@ def test_admin_can_verify_own_phone(
734
753
assert response .status_code == status .HTTP_200_OK
735
754
736
755
737
- @patch ("apps.twilioapp.phone_manager.PhoneManager .verify_phone_number" , return_value = ( True , None ) )
756
+ @patch ("apps.phone_notifications.phone_backend.PhoneBackend .verify_phone_number" , return_value = True )
738
757
@pytest .mark .django_db
739
758
def test_admin_can_verify_another_user_phone (
740
759
mocked_verification_check ,
@@ -912,7 +931,7 @@ def test_user_can_detail_users(
912
931
assert response .status_code == status .HTTP_403_FORBIDDEN
913
932
914
933
915
- @patch ("apps.twilioapp.phone_manager.PhoneManager.send_verification_code " , return_value = Mock ())
934
+ @patch ("apps.phone_notifications.phone_backend.PhoneBackend.send_verification_sms " , return_value = Mock ())
916
935
@pytest .mark .django_db
917
936
def test_user_can_get_own_verification_code (
918
937
mock_verification_start , make_organization_and_user_with_plugin_token , make_user_auth_headers
@@ -926,7 +945,7 @@ def test_user_can_get_own_verification_code(
926
945
assert response .status_code == status .HTTP_200_OK
927
946
928
947
929
- @patch ("apps.twilioapp.phone_manager.PhoneManager.send_verification_code " , return_value = Mock ())
948
+ @patch ("apps.phone_notifications.phone_backend.PhoneBackend.send_verification_sms " , return_value = Mock ())
930
949
@pytest .mark .django_db
931
950
def test_user_cant_get_another_user_verification_code (
932
951
mock_verification_start ,
@@ -944,7 +963,7 @@ def test_user_cant_get_another_user_verification_code(
944
963
assert response .status_code == status .HTTP_403_FORBIDDEN
945
964
946
965
947
- @patch ("apps.twilioapp.phone_manager.PhoneManager .verify_phone_number" , return_value = ( True , None ) )
966
+ @patch ("apps.phone_notifications.phone_backend.PhoneBackend .verify_phone_number" , return_value = True )
948
967
@pytest .mark .django_db
949
968
def test_user_can_verify_own_phone (
950
969
mocked_verification_check , make_organization_and_user_with_plugin_token , make_user_auth_headers
@@ -958,7 +977,7 @@ def test_user_can_verify_own_phone(
958
977
assert response .status_code == status .HTTP_200_OK
959
978
960
979
961
- @patch ("apps.twilioapp.phone_manager.PhoneManager .verify_phone_number" , return_value = ( True , None ) )
980
+ @patch ("apps.phone_notifications.phone_backend.PhoneBackend .verify_phone_number" , return_value = True )
962
981
@pytest .mark .django_db
963
982
def test_user_cant_verify_another_user_phone (
964
983
mocked_verification_check ,
@@ -1218,7 +1237,7 @@ def test_viewer_cant_detail_users(
1218
1237
assert response .status_code == status .HTTP_403_FORBIDDEN
1219
1238
1220
1239
1221
- @patch ("apps.twilioapp.phone_manager.PhoneManager.send_verification_code " , return_value = Mock ())
1240
+ @patch ("apps.phone_notifications.phone_backend.PhoneBackend.send_verification_sms " , return_value = Mock ())
1222
1241
@pytest .mark .django_db
1223
1242
def test_viewer_cant_get_own_verification_code (
1224
1243
mock_verification_start , make_organization_and_user_with_plugin_token , make_user_auth_headers
@@ -1232,7 +1251,7 @@ def test_viewer_cant_get_own_verification_code(
1232
1251
assert response .status_code == status .HTTP_403_FORBIDDEN
1233
1252
1234
1253
1235
- @patch ("apps.twilioapp.phone_manager.PhoneManager.send_verification_code " , return_value = Mock ())
1254
+ @patch ("apps.phone_notifications.phone_backend.PhoneBackend.send_verification_sms " , return_value = Mock ())
1236
1255
@pytest .mark .django_db
1237
1256
def test_viewer_cant_get_another_user_verification_code (
1238
1257
mock_verification_start ,
@@ -1250,7 +1269,7 @@ def test_viewer_cant_get_another_user_verification_code(
1250
1269
assert response .status_code == status .HTTP_403_FORBIDDEN
1251
1270
1252
1271
1253
- @patch ("apps.twilioapp.phone_manager.PhoneManager .verify_phone_number" , return_value = ( True , None ) )
1272
+ @patch ("apps.phone_notifications.phone_backend.PhoneBackend .verify_phone_number" , return_value = True )
1254
1273
@pytest .mark .django_db
1255
1274
def test_viewer_cant_verify_own_phone (
1256
1275
mocked_verification_check , make_organization_and_user_with_plugin_token , make_user_auth_headers
@@ -1264,7 +1283,7 @@ def test_viewer_cant_verify_own_phone(
1264
1283
assert response .status_code == status .HTTP_403_FORBIDDEN
1265
1284
1266
1285
1267
- @patch ("apps.twilioapp.phone_manager.PhoneManager .verify_phone_number" , return_value = ( True , None ) )
1286
+ @patch ("apps.phone_notifications.phone_backend.PhoneBackend .verify_phone_number" , return_value = True )
1268
1287
@pytest .mark .django_db
1269
1288
def test_viewer_cant_verify_another_user_phone (
1270
1289
mocked_verification_check ,
@@ -1340,9 +1359,7 @@ def test_forget_own_number(
1340
1359
1341
1360
client = APIClient ()
1342
1361
url = reverse ("api-internal:user-forget-number" , kwargs = {"pk" : user .public_primary_key })
1343
- with patch (
1344
- "apps.twilioapp.phone_manager.PhoneManager.notify_about_changed_verified_phone_number" , return_value = None
1345
- ):
1362
+ with patch ("apps.phone_notifications.phone_backend.PhoneBackend._notify_disconnected_number" , return_value = None ):
1346
1363
response = client .put (url , None , format = "json" , ** make_user_auth_headers (user , token ))
1347
1364
assert response .status_code == expected_status
1348
1365
@@ -1390,9 +1407,7 @@ def test_forget_other_number(
1390
1407
1391
1408
client = APIClient ()
1392
1409
url = reverse ("api-internal:user-forget-number" , kwargs = {"pk" : admin_primary_key })
1393
- with patch (
1394
- "apps.twilioapp.phone_manager.PhoneManager.notify_about_changed_verified_phone_number" , return_value = None
1395
- ):
1410
+ with patch ("apps.phone_notifications.phone_backend.PhoneBackend._notify_disconnected_number" , return_value = None ):
1396
1411
response = client .put (url , None , format = "json" , ** make_user_auth_headers (other_user , token ))
1397
1412
assert response .status_code == expected_status
1398
1413
@@ -1574,8 +1589,8 @@ def test_check_availability_other_user(make_organization_and_user_with_plugin_to
1574
1589
assert response .status_code == status .HTTP_200_OK
1575
1590
1576
1591
1577
- @patch ("apps.twilioapp.phone_manager.PhoneManager.send_verification_code " , return_value = Mock ())
1578
- @patch ("apps.twilioapp.phone_manager.PhoneManager .verify_phone_number" , return_value = ( True , None ) )
1592
+ @patch ("apps.phone_notifications.phone_backend.PhoneBackend.send_verification_sms " , return_value = Mock ())
1593
+ @patch ("apps.phone_notifications.phone_backend.PhoneBackend .verify_phone_number" , return_value = True )
1579
1594
@patch (
1580
1595
"apps.api.throttlers.GetPhoneVerificationCodeThrottlerPerUser.get_throttle_limits" ,
1581
1596
return_value = (1 , 10 * 60 ),
@@ -1616,8 +1631,8 @@ def test_phone_number_verification_flow_ratelimit_per_user(
1616
1631
assert response .status_code == status .HTTP_429_TOO_MANY_REQUESTS
1617
1632
1618
1633
1619
- @patch ("apps.twilioapp.phone_manager.PhoneManager.send_verification_code " , return_value = Mock ())
1620
- @patch ("apps.twilioapp.phone_manager.PhoneManager .verify_phone_number" , return_value = ( True , None ) )
1634
+ @patch ("apps.phone_notifications.phone_backend.PhoneBackend.send_verification_sms " , return_value = Mock ())
1635
+ @patch ("apps.phone_notifications.phone_backend.PhoneBackend .verify_phone_number" , return_value = True )
1621
1636
@patch (
1622
1637
"apps.api.throttlers.GetPhoneVerificationCodeThrottlerPerOrg.get_throttle_limits" ,
1623
1638
return_value = (1 , 10 * 60 ),
@@ -1659,7 +1674,7 @@ def test_phone_number_verification_flow_ratelimit_per_org(
1659
1674
assert response .status_code == status .HTTP_429_TOO_MANY_REQUESTS
1660
1675
1661
1676
1662
- @patch ("apps.twilioapp.phone_manager.PhoneManager.send_verification_code " , return_value = True )
1677
+ @patch ("apps.phone_notifications.phone_backend.PhoneBackend.send_verification_sms " , return_value = Mock () )
1663
1678
@pytest .mark .parametrize (
1664
1679
"recaptcha_testing_pass,expected_status" ,
1665
1680
[
@@ -1686,7 +1701,7 @@ def test_phone_number_verification_recaptcha(
1686
1701
response = client .get (url , format = "json" , ** request_headers )
1687
1702
assert response .status_code == expected_status
1688
1703
if expected_status == status .HTTP_200_OK :
1689
- mock_verification_start .assert_called_once_with ()
1704
+ mock_verification_start .assert_called_once_with (user )
1690
1705
else :
1691
1706
mock_verification_start .assert_not_called ()
1692
1707
0 commit comments