# -*- coding: utf-8 -*- from rhodecode.lib.auth import get_crypt_password, check_password from rhodecode.model.db import User, RhodeCodeSetting, Repository from rhodecode.tests import * from rhodecode.lib import helpers as h from rhodecode.model.user import UserModel from rhodecode.model.scm import ScmModel 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() response.mustcontain("""_gaq.push(['_setAccount', '%s']);""" % new_ga_code) 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.assertFalse("""_gaq.push(['_setAccount', '%s']);""" % new_ga_code 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() response.mustcontain("""

%s

""" % new_title) 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) @parameterized.expand([('firstname', 'new_username'), ('lastname', 'new_username'), ('admin', True), ('admin', False), ('ldap_dn', 'test'), ('ldap_dn', None), ('active', False), ('active', True), ('email', 'some@email.com'), ]) def test_my_account_update(self, name, expected): uname = 'testme' usr = UserModel().create_or_update(username=uname, password='qweqwe', email='testme@rhodecod.org') self.Session().commit() params = usr.get_api_data() user_id = usr.user_id self.log_user(username=uname, password='qweqwe') params.update({name: expected}) params.update({'password_confirmation': ''}) params.update({'new_password': ''}) try: response = self.app.put(url('admin_settings_my_account_update', id=user_id), params) self.checkSessionFlash(response, 'Your account was updated successfully') updated_user = User.get_by_username(uname) updated_params = updated_user.get_api_data() updated_params.update({'password_confirmation': ''}) updated_params.update({'new_password': ''}) params['last_login'] = updated_params['last_login'] if name == 'email': params['emails'] = [expected] if name == 'ldap_dn': #cannot update this via form params['ldap_dn'] = None if name == 'active': #my account cannot deactivate account params['active'] = True if name == 'admin': #my account cannot make you an admin ! params['admin'] = False self.assertEqual(params, updated_params) finally: UserModel().delete('testme') def test_my_account_update_err_email_exists(self): self.log_user() new_email = 'test_regular@mail.com' # already exisitn email response = self.app.put(url('admin_settings_my_account_update'), params=dict( username='test_admin', new_password='test12', password_confirmation='test122', firstname='NewName', lastname='NewLastname', email=new_email,) ) response.mustcontain('This e-mail address is already taken') 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', firstname='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) def test_set_repo_fork_has_no_self_id(self): self.log_user() repo = Repository.get_by_repo_name(HG_REPO) response = self.app.get(url('edit_repo', repo_name=HG_REPO)) opt = """""" % repo.repo_id assert opt not in response.body def test_set_fork_of_repo(self): self.log_user() repo = Repository.get_by_repo_name(HG_REPO) repo2 = Repository.get_by_repo_name(GIT_REPO) response = self.app.put(url('repo_as_fork', repo_name=HG_REPO), params=dict( id_fork_of=repo2.repo_id )) repo = Repository.get_by_repo_name(HG_REPO) repo2 = Repository.get_by_repo_name(GIT_REPO) self.checkSessionFlash(response, 'Marked repo %s as fork of %s' % (repo.repo_name, repo2.repo_name)) assert repo.fork == repo2 response = response.follow() # check if given repo is selected opt = """""" % ( repo2.repo_id, repo2.repo_name) response.mustcontain(opt) # clean session flash #response = self.app.get(url('edit_repo', repo_name=HG_REPO)) ## mark it as None response = self.app.put(url('repo_as_fork', repo_name=HG_REPO), params=dict( id_fork_of=None )) repo = Repository.get_by_repo_name(HG_REPO) repo2 = Repository.get_by_repo_name(GIT_REPO) self.checkSessionFlash(response, 'Marked repo %s as fork of %s' % (repo.repo_name, "Nothing")) assert repo.fork == None def test_set_fork_of_same_repo(self): self.log_user() repo = Repository.get_by_repo_name(HG_REPO) response = self.app.put(url('repo_as_fork', repo_name=HG_REPO), params=dict( id_fork_of=repo.repo_id )) self.checkSessionFlash(response, 'An error occurred during this operation')