Exemple #1
0
 def test_redirect_authenticated_user(self):
     pyramid_request = pretend.stub(authenticated_userid=1)
     pyramid_request.route_path = pretend.call_recorder(
         lambda a: "/the-redirect")
     result = views.request_password_reset(pyramid_request)
     assert isinstance(result, HTTPSeeOther)
     assert result.headers["Location"] == "/the-redirect"
Exemple #2
0
 def test_redirect_authenticated_user(self):
     pyramid_request = pretend.stub(authenticated_userid=1)
     pyramid_request.route_path = pretend.call_recorder(
         lambda a: '/the-redirect'
     )
     result = views.request_password_reset(pyramid_request)
     assert isinstance(result, HTTPSeeOther)
     assert result.headers["Location"] == "/the-redirect"
Exemple #3
0
    def test_request_password_reset_with_wrong_credentials(
            self, monkeypatch, pyramid_request, pyramid_config, user_service,
            token_service):

        stub_user = pretend.stub(username=pretend.stub())
        pyramid_request.method = "POST"
        token_service.dumps = pretend.call_recorder(lambda a: "TOK")
        user_service.get_user_by_username = pretend.call_recorder(
            lambda a: None
        )
        user_service.get_user_by_email = pretend.call_recorder(
            lambda a: None
        )
        pyramid_request.find_service = pretend.call_recorder(
            lambda interface, **kw: {
                IUserService: user_service,
                ITokenService: token_service,
            }[interface],
        )
        form_obj = pretend.stub(
            username_or_email=pretend.stub(data=stub_user.username),
            validate=pretend.call_recorder(lambda: True),
        )
        form_class = pretend.call_recorder(lambda d, user_service: form_obj)
        n_hours = token_service.max_age // 60 // 60
        send_password_reset_email = pretend.call_recorder(
            lambda *args, **kwargs: {'n_hours': n_hours},
        )
        monkeypatch.setattr(
            views, 'send_password_reset_email', send_password_reset_email
        )

        result = views.request_password_reset(
            pyramid_request, _form_class=form_class
        )

        assert result == {'n_hours': n_hours}
        assert user_service.get_user_by_username.calls == [
            pretend.call(stub_user.username),
        ]
        assert user_service.get_user_by_email.calls == [
            pretend.call(stub_user.username),
        ]
        assert pyramid_request.find_service.calls == [
            pretend.call(IUserService, context=None),
            pretend.call(ITokenService, name='password'),
        ]
        assert form_obj.validate.calls == [
            pretend.call(),
        ]
        assert form_class.calls == [
            pretend.call(pyramid_request.POST, user_service=user_service),
        ]
        assert send_password_reset_email.calls == [
            pretend.call(pyramid_request, None)
        ]
Exemple #4
0
    def test_request_password_reset_with_wrong_credentials(
            self, monkeypatch, pyramid_request, pyramid_config, user_service,
            token_service):

        stub_user = pretend.stub(username=pretend.stub())
        pyramid_request.method = "POST"
        token_service.dumps = pretend.call_recorder(lambda a: "TOK")
        user_service.get_user_by_username = pretend.call_recorder(
            lambda a: None
        )
        user_service.get_user_by_email = pretend.call_recorder(
            lambda a: None
        )
        pyramid_request.find_service = pretend.call_recorder(
            lambda interface, **kw: {
                IUserService: user_service,
                ITokenService: token_service,
            }[interface],
        )
        form_obj = pretend.stub(
            username_or_email=pretend.stub(data=stub_user.username),
            validate=pretend.call_recorder(lambda: True),
        )
        form_class = pretend.call_recorder(lambda d, user_service: form_obj)
        n_hours = token_service.max_age // 60 // 60
        send_password_reset_email = pretend.call_recorder(
            lambda *args, **kwargs: {'n_hours': n_hours},
        )
        monkeypatch.setattr(
            views, 'send_password_reset_email', send_password_reset_email
        )

        result = views.request_password_reset(
            pyramid_request, _form_class=form_class
        )

        assert result == {'n_hours': n_hours}
        assert user_service.get_user_by_username.calls == [
            pretend.call(stub_user.username),
        ]
        assert user_service.get_user_by_email.calls == [
            pretend.call(stub_user.username),
        ]
        assert pyramid_request.find_service.calls == [
            pretend.call(IUserService, context=None),
            pretend.call(ITokenService, name='password'),
        ]
        assert form_obj.validate.calls == [
            pretend.call(),
        ]
        assert form_class.calls == [
            pretend.call(pyramid_request.POST, user_service=user_service),
        ]
        assert send_password_reset_email.calls == [
            pretend.call(pyramid_request, None)
        ]
Exemple #5
0
    def test_request_password_reset_with_non_primary_email(
            self, monkeypatch, pyramid_request, pyramid_config, user_service,
            token_service):

        stub_user = pretend.stub(
            email="*****@*****.**",
            emails=[
                pretend.stub(email="*****@*****.**"),
                pretend.stub(email="*****@*****.**"),
            ],
        )
        pyramid_request.method = "POST"
        token_service.dumps = pretend.call_recorder(lambda a: "TOK")
        user_service.get_user_by_username = pretend.call_recorder(
            lambda a: None)
        user_service.get_user_by_email = pretend.call_recorder(
            lambda a: stub_user)
        pyramid_request.find_service = pretend.call_recorder(
            lambda interface, **kw: {
                IUserService: user_service,
                ITokenService: token_service,
            }[interface])
        form_obj = pretend.stub(
            username_or_email=pretend.stub(data="*****@*****.**"),
            validate=pretend.call_recorder(lambda: True),
        )
        form_class = pretend.call_recorder(lambda d, user_service: form_obj)
        n_hours = token_service.max_age // 60 // 60
        send_password_reset_email = pretend.call_recorder(
            lambda *args, **kwargs: {"n_hours": n_hours})
        monkeypatch.setattr(views, "send_password_reset_email",
                            send_password_reset_email)

        result = views.request_password_reset(pyramid_request,
                                              _form_class=form_class)

        assert result == {"n_hours": n_hours}
        assert user_service.get_user_by_username.calls == [
            pretend.call("*****@*****.**")
        ]
        assert user_service.get_user_by_email.calls == [
            pretend.call("*****@*****.**")
        ]
        assert pyramid_request.find_service.calls == [
            pretend.call(IUserService, context=None),
            pretend.call(ITokenService, name="password"),
        ]
        assert form_obj.validate.calls == [pretend.call()]
        assert form_class.calls == [
            pretend.call(pyramid_request.POST, user_service=user_service)
        ]
        assert send_password_reset_email.calls == [
            pretend.call(pyramid_request, (stub_user, stub_user.emails[1]))
        ]
Exemple #6
0
 def test_get(self, pyramid_request, user_service):
     form_inst = pretend.stub()
     form_class = pretend.call_recorder(lambda *args, **kwargs: form_inst)
     pyramid_request.find_service = pretend.call_recorder(
         lambda *a, **kw: user_service)
     pyramid_request.POST = pretend.stub()
     result = views.request_password_reset(pyramid_request,
                                           _form_class=form_class)
     assert result["form"] is form_inst
     assert form_class.calls == [
         pretend.call(pyramid_request.POST, user_service=user_service)
     ]
     assert pyramid_request.find_service.calls == [
         pretend.call(IUserService, context=None)
     ]
Exemple #7
0
    def test_request_password_reset(
            self, monkeypatch, pyramid_request, pyramid_config, user_service,
            token_service):

        stub_user = pretend.stub(username=pretend.stub())
        pyramid_request.method = "POST"
        token_service.dumps = pretend.call_recorder(lambda a: "TOK")
        user_service.get_user_by_username = pretend.call_recorder(
            lambda a: stub_user
        )
        pyramid_request.find_service = pretend.call_recorder(
            lambda *a, **kw: user_service,
        )
        form_obj = pretend.stub(
            username=pretend.stub(data=stub_user.username),
            validate=pretend.call_recorder(lambda: True),
        )
        form_class = pretend.call_recorder(lambda d, user_service: form_obj)
        n_hours = pretend.stub()
        send_password_reset_email = pretend.call_recorder(
            lambda *args, **kwargs: {'n_hours': n_hours},
        )
        monkeypatch.setattr(
            views, 'send_password_reset_email', send_password_reset_email
        )

        result = views.request_password_reset(
            pyramid_request, _form_class=form_class
        )

        assert result == {'n_hours': n_hours}
        assert user_service.get_user_by_username.calls == [
            pretend.call(stub_user.username),
        ]
        assert pyramid_request.find_service.calls == [
            pretend.call(IUserService, context=None),
        ]
        assert form_obj.validate.calls == [
            pretend.call(),
        ]
        assert form_class.calls == [
            pretend.call(pyramid_request.POST, user_service=user_service),
        ]
        assert send_password_reset_email.calls == [
            pretend.call(pyramid_request, stub_user),
        ]
Exemple #8
0
 def test_get(self, pyramid_request, user_service):
     form_inst = pretend.stub()
     form_class = pretend.call_recorder(lambda *args, **kwargs: form_inst)
     pyramid_request.find_service = pretend.call_recorder(
         lambda *args, **kwargs: user_service
     )
     pyramid_request.POST = pretend.stub()
     result = views.request_password_reset(
         pyramid_request,
         _form_class=form_class,
     )
     assert result["form"] is form_inst
     assert form_class.calls == [
         pretend.call(pyramid_request.POST, user_service=user_service),
     ]
     assert pyramid_request.find_service.calls == [
         pretend.call(IUserService, context=None),
     ]
Exemple #9
0
    def test_request_password_reset(self, monkeypatch, pyramid_request,
                                    pyramid_config, user_service,
                                    token_service):

        stub_user = pretend.stub(email="email", username="******")
        pyramid_request.method = "POST"
        token_service.generate_token = pretend.call_recorder(lambda a: "TOK")
        user_service.get_user_by_username = pretend.call_recorder(
            lambda a: stub_user)
        pyramid_request.find_service = pretend.call_recorder(
            lambda interface, **kwargs: {
                IUserService: user_service,
                IUserTokenService: token_service,
            }[interface])
        pyramid_request.POST = {"username": stub_user.username}

        subject_renderer = pyramid_config.testing_add_renderer(
            'email/password-reset.subject.txt')
        subject_renderer.string_response = 'Email Subject'
        body_renderer = pyramid_config.testing_add_renderer(
            'email/password-reset.body.txt')
        body_renderer.string_response = 'Email Body'

        form_obj = pretend.stub(
            username=pretend.stub(data=stub_user.username),
            validate=pretend.call_recorder(lambda: True),
        )
        form_class = pretend.call_recorder(lambda d, user_service: form_obj)
        send_email = pretend.stub(
            delay=pretend.call_recorder(lambda *args, **kwargs: None))
        pyramid_request.task = pretend.call_recorder(
            lambda *args, **kwargs: send_email)
        monkeypatch.setattr(views, "send_email", send_email)

        result = views.request_password_reset(pyramid_request,
                                              _form_class=form_class)

        assert result == {"n_hours": token_service.token_max_age // 60 // 60}
        subject_renderer.assert_()
        body_renderer.assert_(token="TOK", username=stub_user.username)
        assert token_service.generate_token.calls == [
            pretend.call(stub_user),
        ]
        assert user_service.get_user_by_username.calls == [
            pretend.call(stub_user.username),
        ]
        assert pyramid_request.find_service.calls == [
            pretend.call(IUserService, context=None),
            pretend.call(IUserTokenService, context=None),
        ]
        assert form_obj.validate.calls == [
            pretend.call(),
        ]
        assert form_class.calls == [
            pretend.call(pyramid_request.POST, user_service=user_service),
        ]
        assert pyramid_request.task.calls == [
            pretend.call(send_email),
        ]
        assert send_email.delay.calls == [
            pretend.call('Email Body', [stub_user.email], 'Email Subject'),
        ]