def test_activate_invalid(self): from horus.views import RegisterController from pyramid_mailer.interfaces import IMailer from pyramid_mailer.mailer import DummyMailer from horus.interfaces import IUserClass from horus.tests.models import User from horus.interfaces import IActivationClass from horus.tests.models import Activation self.config.registry.registerUtility(Activation, IActivationClass) self.config.registry.registerUtility(User, IUserClass) self.config.include('horus') self.config.add_route('index', '/') self.config.registry.registerUtility(DummyMailer(), IMailer) user = User(username='******', email='*****@*****.**') user.password = '******' user.activation = Activation() self.session.add(user) self.session.flush() request = testing.DummyRequest() request.matchdict = Mock() get = Mock() get.return_value = 'invalid' request.matchdict.get = get controller = RegisterController(request) response = controller.activate() user = User.get_by_username(request, 'sontek') assert not user.is_activated assert response.status_int == 404
def test_register_creates_user(self): from horus.views import RegisterController from pyramid_mailer.mailer import DummyMailer from pyramid_mailer.interfaces import IMailer from horus.interfaces import IUserClass from horus.tests.models import User from horus.interfaces import IActivationClass from horus.tests.models import Activation self.config.registry.registerUtility(Activation, IActivationClass) self.config.registry.registerUtility(User, IUserClass) self.config.include('horus') self.config.registry.registerUtility(DummyMailer(), IMailer) self.config.add_route('index', '/') request = self.get_csrf_request(post={ 'username': '******', 'password': { 'password': '******', 'password-confirm': 'test123', }, 'email': '*****@*****.**' }, request_method='POST') request.user = Mock() controller = RegisterController(request) response = controller.register() assert response.status_int == 302 user = User.get_by_username(request, 'admin') assert user != None
def test_register_redirects_if_logged_in(self): from horus.views import RegisterController from pyramid_mailer.mailer import DummyMailer from pyramid_mailer.interfaces import IMailer from horus.interfaces import IUserClass from horus.tests.models import User from horus.interfaces import IActivationClass from horus.tests.models import Activation self.config.registry.registerUtility(Activation, IActivationClass) self.config.registry.registerUtility(User, IUserClass) self.config.include('horus') self.config.registry.registerUtility(DummyMailer(), IMailer) self.config.add_route('index', '/') self.config.registry.settings['horus.login_redirect'] = 'index' self.config.registry.settings['horus.logout_redirect'] = 'index' request = testing.DummyRequest() request.user = Mock() controller = RegisterController(request) response = controller.register() assert response.status_int == 302
def test_register_validation(self): from horus.views import RegisterController from pyramid_mailer.mailer import DummyMailer from pyramid_mailer.interfaces import IMailer from horus.interfaces import IUserClass from horus.tests.models import User from horus.interfaces import IActivationClass from horus.tests.models import Activation self.config.registry.registerUtility(Activation, IActivationClass) self.config.registry.registerUtility(User, IUserClass) self.config.include('horus') self.config.registry.registerUtility(DummyMailer(), IMailer) self.config.add_route('index', '/') request = self.get_csrf_request(request_method='POST') request.user = Mock() controller = RegisterController(request) response = controller.register() assert len(response['errors']) == 3 assert 'There was a problem with your submission' in response['form']
def test_register_existing_user(self): from horus.views import RegisterController from pyramid_mailer.mailer import DummyMailer from pyramid_mailer.interfaces import IMailer from horus.interfaces import IUserClass from horus.tests.models import User from horus.interfaces import IActivationClass from horus.tests.models import Activation self.config.registry.registerUtility(Activation, IActivationClass) self.config.registry.registerUtility(User, IUserClass) self.config.include('horus') self.config.registry.registerUtility(DummyMailer(), IMailer) self.config.add_route('index', '/') admin = User(username='******', email='*****@*****.**') admin.password = '******' self.session.add(admin) self.session.flush() request = self.get_csrf_request(post={ 'username': '******', 'password': { 'password': '******', 'password-confirm': 'test123', }, 'email': '*****@*****.**' }, request_method='POST') view = RegisterController(request) adict = view.register() assert isinstance(adict, dict) assert adict['errors']
def test_register_no_email_validation(self): from horus.views import RegisterController from pyramid_mailer.mailer import DummyMailer from pyramid_mailer.interfaces import IMailer from hem.interfaces import IDBSession from horus.events import NewRegistrationEvent from horus.interfaces import IUserClass from horus.tests.models import User from horus.interfaces import IActivationClass from horus.tests.models import Activation self.config.registry.registerUtility(Activation, IActivationClass) self.config.registry.registerUtility(User, IUserClass) self.config.include('horus') self.config.registry.registerUtility(DummyMailer(), IMailer) self.config.add_route('index', '/') self.config.registry.settings['horus.require_activation'] = False def handle_registration(event): request = event.request session = request.registry.getUtility(IDBSession) session.commit() self.config.add_subscriber(handle_registration, NewRegistrationEvent) request = self.get_csrf_request(post={ 'username': '******', 'password': { 'password': '******', 'password-confirm': 'test123', }, 'email': '*****@*****.**' }, request_method='POST') flash = Mock() request.session.flash = flash request.user = Mock() controller = RegisterController(request) response = controller.register() assert response.status_int == 302 user = User.get_by_username(request, 'admin') assert user.is_activated == True flash.assert_called_with( 'You have been registered, you may log in now!', 'success')
def test_activate_invalid_user(self): from horus.views import RegisterController from pyramid_mailer.interfaces import IMailer from pyramid_mailer.mailer import DummyMailer from horus.interfaces import IUserClass from horus.tests.models import User from horus.interfaces import IActivationClass from horus.tests.models import Activation self.config.registry.registerUtility(Activation, IActivationClass) self.config.registry.registerUtility(User, IUserClass) self.config.include('horus') self.config.add_route('index', '/') self.config.registry.registerUtility(DummyMailer(), IMailer) bad_act = Activation() user = User(username='******', email='*****@*****.**') user.activation = Activation() user.password = '******' user2 = User(username='******', email='*****@*****.**') user2.activation = bad_act user2.password = '******' self.session.add(user) self.session.add(user2) self.session.flush() request = testing.DummyRequest() request.matchdict = Mock() def get(val, ret): if val == 'code': return bad_act.code elif val == 'user_id': return user.id request.matchdict.get = get controller = RegisterController(request) response = controller.activate() new_user1 = User.get_by_username(request, 'sontek') new_user2 = User.get_by_username(request, 'jessie') assert not new_user1.is_activated assert not new_user2.is_activated assert response.status_int == 404
def register(self): request = self.request action = request.params.get('action', 'register') if action not in ['register', 'activate']: raise HTTPBadRequest() controller = RegisterController(request) form = controller.form form.formid = 'register' form.use_ajax = True form.ajax_options = self.ajax_options if request.POST.get('__formid__', '') == 'register': result = getattr(controller, action)() error = request.session.pop_flash('error') if isinstance(result, dict): if error: form.error = colander.Invalid(form.schema, error[0]) result = {'form': form.render()} else: return result return dict(register=result) lm = request.layout_manager lm.layout.add_form(form) return dict(register={'form': form.render()})
def test_registration_craps_out(self): from horus.views import RegisterController from pyramid_mailer.interfaces import IMailer from horus.interfaces import IUserClass from horus.tests.models import User from horus.interfaces import IActivationClass from horus.tests.models import Activation self.config.registry.registerUtility(Activation, IActivationClass) self.config.registry.registerUtility(User, IUserClass) def send(message): raise Exception("I broke!") mailer = Mock() mailer.send = send self.config.include('horus') self.config.registry.registerUtility(mailer, IMailer) self.config.add_route('index', '/') request = self.get_csrf_request(post={ 'username': '******', 'password': { 'password': '******', 'password-confirm': 'test123', }, 'email': '*****@*****.**' }, request_method='POST') request.user = Mock() controller = RegisterController(request) self.assertRaises(Exception, controller.register)
def test_register_controller_extensions_without_mail(self): from horus.views import RegisterController from horus.interfaces import IRegisterSchema from horus.interfaces import IRegisterForm from horus.interfaces import IUserClass from horus.interfaces import IUIStrings from horus.strings import UIStringsBase from horus.tests.models import User from horus.interfaces import IActivationClass from horus.tests.models import Activation self.config.registry.registerUtility(Activation, IActivationClass) self.config.registry.registerUtility(User, IUserClass) self.config.registry.registerUtility(UIStringsBase, IUIStrings) self.config.add_route('index', '/') request = testing.DummyRequest() getUtility = Mock() getUtility.return_value = True schema = Mock() form = Mock() self.config.registry.settings['horus.require_activation'] = False self.config.registry.registerUtility(schema, IRegisterSchema) self.config.registry.registerUtility(form, IRegisterForm) with patch('horus.views.get_mailer') as get_mailer: RegisterController(request) assert not get_mailer.called schema.assert_called_once_with() assert form.called
def test_activate_multiple_users(self): from horus.views import RegisterController from pyramid_mailer.interfaces import IMailer from pyramid_mailer.mailer import DummyMailer from horus.interfaces import IUserClass from horus.tests.models import User from horus.interfaces import IActivationClass from horus.tests.models import Activation self.config.registry.registerUtility(Activation, IActivationClass) self.config.registry.registerUtility(User, IUserClass) self.config.include('horus') self.config.add_route('index', '/') self.config.registry.registerUtility(DummyMailer(), IMailer) user = User(username='******', email='*****@*****.**') user.activation = Activation() user.password = '******' user1 = User(username='******', email='*****@*****.**') user1.activation = Activation() user1.password = '******' self.session.add(user) self.session.add(user1) self.session.flush() request = testing.DummyRequest() request.matchdict = Mock() def get(key, default): if key == 'code': return user1.activation.code else: return user1.id request.matchdict.get = get controller = RegisterController(request) response = controller.activate() user = User.get_by_username(request, 'sontek1') activations = Activation.get_all(request) assert len(activations.all()) == 1 assert user.is_activated assert response.status_int == 302
def test_register_no_email_validation(self): from horus.views import RegisterController from pyramid_mailer.mailer import DummyMailer from pyramid_mailer.interfaces import IMailer from hem.interfaces import IDBSession from horus.events import NewRegistrationEvent from horus.interfaces import IUserClass from horus.tests.models import User from horus.interfaces import IActivationClass from horus.tests.models import Activation self.config.registry.registerUtility(Activation, IActivationClass) self.config.registry.registerUtility(User, IUserClass) self.config.include('horus') self.config.registry.registerUtility(DummyMailer(), IMailer) self.config.add_route('index', '/') self.config.registry.settings['horus.require_activation'] = False def handle_registration(event): request = event.request session = request.registry.getUtility(IDBSession) session.commit() self.config.add_subscriber(handle_registration, NewRegistrationEvent) request = self.get_csrf_request(post={ 'username': '******', 'password': { 'password': '******', 'password-confirm': 'test123', }, 'email': '*****@*****.**' }, request_method='POST') request.user = Mock() view = RegisterController(request) with patch('horus.views.FlashMessage') as FlashMessage: response = view.register() FlashMessage.assert_called_with(request, view.Str.registration_done, kind="success") assert response.status_int == 302 user = User.get_by_username(request, 'admin') assert user.is_activated == True
def test_activate(self): from horus.views import RegisterController from pyramid_mailer.interfaces import IMailer from pyramid_mailer.mailer import DummyMailer from horus.interfaces import IHorusUserClass from horus.tests.models import User from horus.interfaces import IHorusActivationClass from horus.tests.models import Activation self.config.registry.registerUtility(Activation, IHorusActivationClass) self.config.registry.registerUtility(User, IHorusUserClass) self.config.include('horus') self.config.add_route('index', '/') self.config.registry.registerUtility(DummyMailer(), IMailer) user = User(user_name='sontek', email='*****@*****.**') user.set_password('foo') user.activation = Activation() self.session.add(user) self.session.flush() request = testing.DummyRequest() request.matchdict = Mock() def get(key, default): if key == 'code': return user.activation.code else: return user.pk request.matchdict.get = get controller = RegisterController(request) response = controller.activate() user = User.get_by_user_name(request, 'sontek') assert user.is_activated assert response.status_int == 302
def test_registration_craps_out(self): from horus.views import RegisterController from pyramid_mailer.interfaces import IMailer from horus.interfaces import IHorusUserClass from horus.tests.models import User from horus.interfaces import IHorusActivationClass from horus.tests.models import Activation self.config.registry.registerUtility(Activation, IHorusActivationClass) self.config.registry.registerUtility(User, IHorusUserClass) def send(message): raise Exception("I broke!") mailer = Mock() mailer.send = send self.config.include('horus') self.config.registry.registerUtility(mailer, IMailer) self.config.add_route('index', '/') request = self.get_csrf_request(post={ 'Username': '******', 'Password': { 'Password': '******', 'Password-confirm': 'test123', }, 'Email': '*****@*****.**' }, request_method='POST') flash = Mock() request.session.flash = flash request.user = Mock() controller = RegisterController(request) controller.register() flash.assert_called_with('I broke!', 'error')
def test_register_existing_user(self): from horus.views import RegisterController from pyramid_mailer.mailer import DummyMailer from pyramid_mailer.interfaces import IMailer from horus.interfaces import IHorusUserClass from horus.tests.models import User from horus.interfaces import IHorusActivationClass from horus.tests.models import Activation self.config.registry.registerUtility(Activation, IHorusActivationClass) self.config.registry.registerUtility(User, IHorusUserClass) self.config.include('horus') self.config.registry.registerUtility(DummyMailer(), IMailer) self.config.add_route('index', '/') admin = User(username='******', email='*****@*****.**') admin.set_password('test123') self.session.add(admin) self.session.flush() request = self.get_csrf_request(post={ 'Username': '******', 'Password': { 'Password': '******', 'Password-confirm': 'test123', }, 'Email': '*****@*****.**' }, request_method='POST') flash = Mock() request.session.flash = flash controller = RegisterController(request) controller.register() flash.assert_called_with(u'That username is already used.', 'error')
def test_register_loads_not_logged_in(self): from horus.views import RegisterController from pyramid_mailer.mailer import DummyMailer from pyramid_mailer.interfaces import IMailer from horus.interfaces import IUserClass from horus.tests.models import User from horus.interfaces import IActivationClass from horus.tests.models import Activation self.config.registry.registerUtility(Activation, IActivationClass) self.config.registry.registerUtility(User, IUserClass) self.config.registry.registerUtility(DummyMailer(), IMailer) self.config.include('horus') self.config.add_route('index', '/') request = testing.DummyRequest() request.user = None controller = RegisterController(request) response = controller.register() assert response.get('form', None)
def test_register_controller_extensions_with_mail(self): from pyramid_mailer.mailer import DummyMailer from pyramid_mailer.interfaces import IMailer from horus.views import RegisterController from horus.interfaces import IRegisterSchema from horus.interfaces import IRegisterForm from horus.interfaces import IUserClass from horus.tests.models import User from horus.interfaces import IUIStrings from horus.strings import UIStringsBase from horus.interfaces import IActivationClass from horus.tests.models import Activation self.config.registry.registerUtility(Activation, IActivationClass) self.config.registry.registerUtility(User, IUserClass) self.config.registry.registerUtility(UIStringsBase, IUIStrings) self.config.add_route('index', '/') request = testing.DummyRequest() getUtility = Mock() getUtility.return_value = True schema = Mock() form = Mock() self.config.registry.registerUtility(schema, IRegisterSchema) self.config.registry.registerUtility(form, IRegisterForm) self.config.registry.registerUtility(DummyMailer(), IMailer) with patch('horus.views.get_mailer') as get_mailer: RegisterController(request) assert get_mailer.called assert schema.called assert form.called
def register(self): result = RegisterController(self.request).register() return self.respond(result)
def register_controller(self): return RegisterController(self.request)