|
24 | 24 |
|
25 | 25 | from warehouse.accounts import views
|
26 | 26 | from warehouse.accounts.interfaces import (
|
| 27 | + IDomainStatusService, |
27 | 28 | IPasswordBreachedService,
|
28 | 29 | ITokenService,
|
29 | 30 | IUserService,
|
@@ -2575,52 +2576,47 @@ class TestVerifyEmail:
|
2575 | 2576 | ],
|
2576 | 2577 | )
|
2577 | 2578 | def test_verify_email(
|
2578 |
| - self, db_request, user_service, token_service, is_primary, confirm_message |
| 2579 | + self, mocker, db_request, ratelimit_service, is_primary, confirm_message |
2579 | 2580 | ):
|
2580 | 2581 | user = UserFactory(is_active=False, totp_secret=None)
|
2581 | 2582 | email = EmailFactory(user=user, verified=False, primary=is_primary)
|
2582 | 2583 | db_request.user = user
|
2583 | 2584 | db_request.GET.update({"token": "RANDOM_KEY"})
|
2584 |
| - db_request.route_path = pretend.call_recorder(lambda name: "/") |
2585 |
| - token_service.loads = pretend.call_recorder( |
2586 |
| - lambda token: {"action": "email-verify", "email.id": str(email.id)} |
2587 |
| - ) |
2588 |
| - email_limiter = pretend.stub(clear=pretend.call_recorder(lambda a: None)) |
2589 |
| - verify_limiter = pretend.stub(clear=pretend.call_recorder(lambda a: None)) |
2590 |
| - services = { |
2591 |
| - "email": token_service, |
2592 |
| - "email.add": email_limiter, |
2593 |
| - "email.verify": verify_limiter, |
2594 |
| - } |
2595 |
| - db_request.find_service = pretend.call_recorder( |
2596 |
| - lambda a, name, **kwargs: services[name] |
| 2585 | + db_request.route_path = mocker.Mock(return_value="/") |
| 2586 | + mock_token_service_loads = mocker.patch( |
| 2587 | + "warehouse.accounts.services.TokenService.loads", |
| 2588 | + return_value={"action": "email-verify", "email.id": str(email.id)}, |
2597 | 2589 | )
|
2598 |
| - db_request.session.flash = pretend.call_recorder(lambda *a, **kw: None) |
| 2590 | + spy_find_service = mocker.spy(db_request, "find_service") |
| 2591 | + spy_session_flash = mocker.spy(db_request.session, "flash") |
2599 | 2592 |
|
2600 | 2593 | result = views.verify_email(db_request)
|
2601 | 2594 |
|
2602 | 2595 | db_request.db.flush()
|
2603 | 2596 | assert email.verified
|
| 2597 | + assert email.domain_last_status == ["active"] |
2604 | 2598 | assert user.is_active
|
2605 | 2599 | assert isinstance(result, HTTPSeeOther)
|
2606 | 2600 | assert result.headers["Location"] == "/"
|
2607 |
| - assert db_request.route_path.calls == [ |
2608 |
| - pretend.call("manage.account.two-factor") |
2609 |
| - ] |
2610 |
| - assert token_service.loads.calls == [pretend.call("RANDOM_KEY")] |
2611 |
| - assert email_limiter.clear.calls == [pretend.call(db_request.remote_addr)] |
2612 |
| - assert verify_limiter.clear.calls == [pretend.call(user.id)] |
2613 |
| - assert db_request.session.flash.calls == [ |
2614 |
| - pretend.call( |
2615 |
| - f"Email address {email.email} verified. " + confirm_message, |
2616 |
| - queue="success", |
2617 |
| - ) |
2618 |
| - ] |
2619 |
| - assert db_request.find_service.calls == [ |
2620 |
| - pretend.call(ITokenService, name="email"), |
2621 |
| - pretend.call(IRateLimiter, name="email.add"), |
2622 |
| - pretend.call(IRateLimiter, name="email.verify"), |
2623 |
| - ] |
| 2601 | + db_request.route_path.assert_called_once_with("manage.account.two-factor") |
| 2602 | + mock_token_service_loads.assert_called_once_with("RANDOM_KEY") |
| 2603 | + ratelimit_service.clear.assert_has_calls( |
| 2604 | + [ |
| 2605 | + mocker.call(db_request.remote_addr), |
| 2606 | + mocker.call(user.id), |
| 2607 | + ] |
| 2608 | + ) |
| 2609 | + spy_session_flash.assert_called_once_with( |
| 2610 | + f"Email address {email.email} verified. " + confirm_message, queue="success" |
| 2611 | + ) |
| 2612 | + spy_find_service.assert_has_calls( |
| 2613 | + [ |
| 2614 | + mocker.call(ITokenService, name="email"), |
| 2615 | + mocker.call(IRateLimiter, name="email.add"), |
| 2616 | + mocker.call(IRateLimiter, name="email.verify"), |
| 2617 | + mocker.call(IDomainStatusService), |
| 2618 | + ] |
| 2619 | + ) |
2624 | 2620 |
|
2625 | 2621 | @pytest.mark.parametrize(
|
2626 | 2622 | ("exception", "message"),
|
@@ -2702,34 +2698,24 @@ def test_verify_email_already_verified(self, db_request):
|
2702 | 2698 | pretend.call("Email already verified", queue="error")
|
2703 | 2699 | ]
|
2704 | 2700 |
|
2705 |
| - def test_verify_email_with_existing_2fa(self, db_request, token_service): |
| 2701 | + def test_verify_email_with_existing_2fa(self, mocker, db_request): |
2706 | 2702 | user = UserFactory(is_active=False, totp_secret=b"secret")
|
2707 | 2703 | email = EmailFactory(user=user, verified=False, primary=False)
|
2708 | 2704 | db_request.user = user
|
2709 | 2705 | db_request.GET.update({"token": "RANDOM_KEY"})
|
2710 |
| - db_request.route_path = pretend.call_recorder(lambda name: "/") |
2711 |
| - token_service.loads = pretend.call_recorder( |
2712 |
| - lambda token: {"action": "email-verify", "email.id": str(email.id)} |
2713 |
| - ) |
2714 |
| - email_limiter = pretend.stub(clear=pretend.call_recorder(lambda a: None)) |
2715 |
| - verify_limiter = pretend.stub(clear=pretend.call_recorder(lambda a: None)) |
2716 |
| - services = { |
2717 |
| - "email": token_service, |
2718 |
| - "email.add": email_limiter, |
2719 |
| - "email.verify": verify_limiter, |
2720 |
| - } |
2721 |
| - db_request.find_service = pretend.call_recorder( |
2722 |
| - lambda a, name, **kwargs: services[name] |
| 2706 | + db_request.route_path = mocker.Mock(return_value="/") |
| 2707 | + mocker.patch( |
| 2708 | + "warehouse.accounts.services.TokenService.loads", |
| 2709 | + return_value={"action": "email-verify", "email.id": str(email.id)}, |
2723 | 2710 | )
|
2724 |
| - db_request.session.flash = pretend.call_recorder(lambda *a, **kw: None) |
2725 | 2711 |
|
2726 | 2712 | assert db_request.user.has_two_factor
|
2727 | 2713 |
|
2728 | 2714 | result = views.verify_email(db_request)
|
2729 | 2715 |
|
2730 | 2716 | assert isinstance(result, HTTPSeeOther)
|
2731 | 2717 | assert result.headers["Location"] == "/"
|
2732 |
| - assert db_request.route_path.calls == [pretend.call("manage.account")] |
| 2718 | + db_request.route_path.assert_called_once_with("manage.account") |
2733 | 2719 | assert db_request.user.is_active
|
2734 | 2720 |
|
2735 | 2721 |
|
|
0 commit comments