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"
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"
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) ]
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])) ]
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) ]
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), ]
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), ]
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'), ]