# -*- coding: utf-8 -*- from rhodecode.lib.auth import get_crypt_password, check_password from rhodecode.model.db import User, RhodeCodeSetting from rhodecode.tests import * from rhodecode.lib import helpers as h class TestAdminSettingsController(TestController): def test_index(self): response = self.app.get(url('admin_settings')) # Test response... def test_index_as_xml(self): response = self.app.get(url('formatted_admin_settings', format='xml')) def test_create(self): response = self.app.post(url('admin_settings')) def test_new(self): response = self.app.get(url('admin_new_setting')) def test_new_as_xml(self): response = self.app.get(url('formatted_admin_new_setting', format='xml')) def test_update(self): response = self.app.put(url('admin_setting', setting_id=1)) def test_update_browser_fakeout(self): response = self.app.post(url('admin_setting', setting_id=1), params=dict(_method='put')) def test_delete(self): response = self.app.delete(url('admin_setting', setting_id=1)) def test_delete_browser_fakeout(self): response = self.app.post(url('admin_setting', setting_id=1), params=dict(_method='delete')) def test_show(self): response = self.app.get(url('admin_setting', setting_id=1)) def test_show_as_xml(self): response = self.app.get(url('formatted_admin_setting', setting_id=1, format='xml')) def test_edit(self): response = self.app.get(url('admin_edit_setting', setting_id=1)) def test_edit_as_xml(self): response = self.app.get(url('formatted_admin_edit_setting', setting_id=1, format='xml')) def test_ga_code_active(self): self.log_user() old_title = 'RhodeCode' old_realm = 'RhodeCode authentication' new_ga_code = 'ga-test-123456789' response = self.app.post(url('admin_setting', setting_id='global'), params=dict( _method='put', rhodecode_title=old_title, rhodecode_realm=old_realm, rhodecode_ga_code=new_ga_code )) self.checkSessionFlash(response, 'Updated application settings') self.assertEqual(RhodeCodeSetting .get_app_settings()['rhodecode_ga_code'], new_ga_code) response = response.follow() self.assertTrue("""_gaq.push(['_setAccount', '%s']);""" % new_ga_code in response.body) def test_ga_code_inactive(self): self.log_user() old_title = 'RhodeCode' old_realm = 'RhodeCode authentication' new_ga_code = '' response = self.app.post(url('admin_setting', setting_id='global'), params=dict( _method='put', rhodecode_title=old_title, rhodecode_realm=old_realm, rhodecode_ga_code=new_ga_code )) self.assertTrue('Updated application settings' in response.session['flash'][0][1]) self.assertEqual(RhodeCodeSetting .get_app_settings()['rhodecode_ga_code'], new_ga_code) response = response.follow() self.assertTrue("""_gaq.push(['_setAccount', '%s']);""" % new_ga_code not in response.body) def test_title_change(self): self.log_user() old_title = 'RhodeCode' new_title = old_title + '_changed' old_realm = 'RhodeCode authentication' for new_title in ['Changed', 'Żółwik', old_title]: response = self.app.post(url('admin_setting', setting_id='global'), params=dict( _method='put', rhodecode_title=new_title, rhodecode_realm=old_realm, rhodecode_ga_code='' )) self.checkSessionFlash(response, 'Updated application settings') self.assertEqual(RhodeCodeSetting .get_app_settings()['rhodecode_title'], new_title.decode('utf-8')) response = response.follow() self.assertTrue("""

%s

""" % new_title in response.body) def test_my_account(self): self.log_user() response = self.app.get(url('admin_settings_my_account')) self.assertTrue('value="test_admin' in response.body) def test_my_account_update(self): self.log_user() new_email = 'new@mail.pl' new_name = 'NewName' new_lastname = 'NewLastname' new_password = 'test123' response = self.app.post(url('admin_settings_my_account_update'), params=dict(_method='put', username='test_admin', new_password=new_password, password_confirmation=new_password, password='', name=new_name, lastname=new_lastname, email=new_email,)) response.follow() assert 'Your account was updated successfully' in response.session['flash'][0][1], 'no flash message about success of change' user = self.Session.query(User).filter(User.username == 'test_admin').one() assert user.email == new_email, 'incorrect user email after update got %s vs %s' % (user.email, new_email) assert user.name == new_name, 'updated field mismatch %s vs %s' % (user.name, new_name) assert user.lastname == new_lastname, 'updated field mismatch %s vs %s' % (user.lastname, new_lastname) assert check_password(new_password, user.password) is True, 'password field mismatch %s vs %s' % (user.password, new_password) #bring back the admin settings old_email = 'test_admin@mail.com' old_name = 'RhodeCode' old_lastname = 'Admin' old_password = 'test12' response = self.app.post(url('admin_settings_my_account_update'), params=dict( _method='put', username='test_admin', new_password=old_password, password_confirmation=old_password, password='', name=old_name, lastname=old_lastname, email=old_email,)) response.follow() self.checkSessionFlash(response, 'Your account was updated successfully') user = self.Session.query(User).filter(User.username == 'test_admin').one() assert user.email == old_email, 'incorrect user email after update got %s vs %s' % (user.email, old_email) assert user.email == old_email, 'incorrect user email after update got %s vs %s' % (user.email, old_email) assert user.name == old_name, 'updated field mismatch %s vs %s' % (user.name, old_name) assert user.lastname == old_lastname, 'updated field mismatch %s vs %s' % (user.lastname, old_lastname) assert check_password(old_password, user.password) is True, 'password updated field mismatch %s vs %s' % (user.password, old_password) def test_my_account_update_err_email_exists(self): self.log_user() new_email = 'test_regular@mail.com' # already exisitn email response = self.app.post(url('admin_settings_my_account_update'), params=dict( _method='put', username='test_admin', new_password='test12', password_confirmation='test122', name='NewName', lastname='NewLastname', email=new_email,)) assert 'This e-mail address is already taken' in response.body, 'Missing error message about existing email' def test_my_account_update_err(self): self.log_user('test_regular2', 'test12') new_email = 'newmail.pl' response = self.app.post(url('admin_settings_my_account_update'), params=dict( _method='put', username='test_admin', new_password='test12', password_confirmation='test122', name='NewName', lastname='NewLastname', email=new_email,) ) response.mustcontain('An email address must contain a single @') from rhodecode.model import validators msg = validators.ValidUsername(edit=False, old_data={})._messages['username_exists'] msg = h.html_escape(msg % {'username': 'test_admin'}) response.mustcontain(u"%s" % msg)