diff --git a/rhodecode/admin/views/sessions.py b/rhodecode/admin/views/sessions.py --- a/rhodecode/admin/views/sessions.py +++ b/rhodecode/admin/views/sessions.py @@ -90,7 +90,7 @@ class AdminSessionSettingsView(AdminSett self.request.session.flash( _('Cleaned up old sessions'), queue='success') except user_sessions.CleanupCommand as msg: - self.request.session.flash(msg, category='warning') + self.request.session.flash(msg.message, queue='warning') except Exception as e: log.exception('Failed session cleanup') self.request.session.flash( diff --git a/rhodecode/admin/views/system_info.py b/rhodecode/admin/views/system_info.py --- a/rhodecode/admin/views/system_info.py +++ b/rhodecode/admin/views/system_info.py @@ -63,7 +63,7 @@ class AdminSystemInfoSettingsView(AdminS @view_config( route_name='admin_settings_system', request_method='GET', renderer='rhodecode:templates/admin/settings/settings.mako') - def settings_sessions(self): + def settings_system_info(self): _ = self.request.translate c.active = 'system' @@ -169,7 +169,7 @@ class AdminSystemInfoSettingsView(AdminS @view_config( route_name='admin_settings_system_update', request_method='GET', renderer='rhodecode:templates/admin/settings/settings_system_update.mako') - def settings_sessions_cleanup(self): + def settings_system_info_check_update(self): _ = self.request.translate update_url = self.get_update_url() @@ -179,9 +179,11 @@ class AdminSystemInfoSettingsView(AdminS data = self.get_update_data(update_url) except urllib2.URLError as e: log.exception("Exception contacting upgrade server") + self.request.override_renderer = 'string' return _err('Failed to contact upgrade server: %r' % e) except ValueError as e: log.exception("Bad data sent from update server") + self.request.override_renderer = 'string' return _err('Bad data sent from update server') latest = data['versions'][0] diff --git a/rhodecode/tests/functional/test_admin_settings.py b/rhodecode/tests/functional/test_admin_settings.py --- a/rhodecode/tests/functional/test_admin_settings.py +++ b/rhodecode/tests/functional/test_admin_settings.py @@ -32,11 +32,11 @@ from rhodecode.tests.utils import Assert UPDATE_DATA_QUALNAME = ( - 'rhodecode.controllers.admin.settings.SettingsController.get_update_data') + 'rhodecode.admin.views.system_info.AdminSystemInfoSettingsView.get_update_data') @pytest.mark.usefixtures('autologin_user', 'app') -class TestAdminSettingsController: +class TestAdminSettingsController(object): @pytest.mark.parametrize('urlname', [ 'admin_settings_vcs', @@ -46,7 +46,6 @@ class TestAdminSettingsController: 'admin_settings_email', 'admin_settings_hooks', 'admin_settings_search', - 'admin_settings_system', ]) def test_simple_get(self, urlname, app): app.get(url(urlname)) @@ -85,46 +84,9 @@ class TestAdminSettingsController: response.mustcontain(no=['test_hooks_2']) response.mustcontain(no=['cd /tmp2']) - def test_system_update_new_version(self): - update_data = { - 'versions': [ - { - 'version': '100.3.1415926535', - 'general': 'The latest version we are ever going to ship' - }, - { - 'version': '0.0.0', - 'general': 'The first version we ever shipped' - } - ] - } - with mock.patch(UPDATE_DATA_QUALNAME, return_value=update_data): - response = self.app.get(url('admin_settings_system_update')) - response.mustcontain('A new version is available') - - def test_system_update_nothing_new(self): - update_data = { - 'versions': [ - { - 'version': '0.0.0', - 'general': 'The first version we ever shipped' - } - ] - } - with mock.patch(UPDATE_DATA_QUALNAME, return_value=update_data): - response = self.app.get(url('admin_settings_system_update')) - response.mustcontain( - 'You already have the latest stable version.') - - def test_system_update_bad_response(self): - with mock.patch(UPDATE_DATA_QUALNAME, side_effect=ValueError('foo')): - response = self.app.get(url('admin_settings_system_update')) - response.mustcontain( - 'Bad data sent from update server') - @pytest.mark.usefixtures('autologin_user', 'app') -class TestAdminSettingsGlobal: +class TestAdminSettingsGlobal(object): def test_pre_post_code_code_active(self, csrf_token): pre_code = 'rc-pre-code-187652122' @@ -211,7 +173,7 @@ class TestAdminSettingsGlobal: @pytest.mark.usefixtures('autologin_user', 'app') -class TestAdminSettingsVcs: +class TestAdminSettingsVcs(object): def test_contains_svn_default_patterns(self, app): response = app.get(url('admin_settings_vcs')) @@ -463,7 +425,7 @@ class TestOpenSourceLicenses(object): } } read_licenses_patch = mock.patch( - 'rhodecode.admin.views.read_opensource_licenses', + 'rhodecode.admin.views.open_source_licenses.read_opensource_licenses', return_value=sample_licenses) with read_licenses_patch: response = self.app.get(self._get_url(), status=200) @@ -486,8 +448,90 @@ class TestOpenSourceLicenses(object): self.app.get(self._get_url(), status=403) +@pytest.mark.usefixtures('app') +class TestUserSessions(object): + + def _get_url(self, name='admin_settings_sessions'): + return { + 'admin_settings_sessions': ADMIN_PREFIX + '/settings/sessions', + 'admin_settings_sessions_cleanup': ADMIN_PREFIX + '/settings/sessions/cleanup' + }[name] + + def test_forbidden_when_normal_user(self, autologin_regular_user): + self.app.get(self._get_url(), status=403) + + def test_show_sessions_page(self, autologin_user): + response = self.app.get(self._get_url(), status=200) + response.mustcontain('file') + + def test_cleanup_old_sessions(self, autologin_user, csrf_token): + + post_data = { + 'csrf_token': csrf_token, + 'expire_days': '60' + } + response = self.app.post( + self._get_url('admin_settings_sessions_cleanup'), params=post_data, + status=302) + assert_session_flash(response, 'Please execute this command') + + +@pytest.mark.usefixtures('app') +class TestAdminSystemInfo(object): + def _get_url(self, name='admin_settings_system'): + return { + 'admin_settings_system': ADMIN_PREFIX + '/settings/system', + 'admin_settings_system_update': ADMIN_PREFIX + '/settings/system/updates', + }[name] + + def test_forbidden_when_normal_user(self, autologin_regular_user): + self.app.get(self._get_url(), status=403) + + def test_system_info_page(self, autologin_user): + response = self.app.get(self._get_url()) + response.mustcontain('RhodeCode Community Edition, version {}'.format( + rhodecode.__version__)) + + def test_system_update_new_version(self, autologin_user): + update_data = { + 'versions': [ + { + 'version': '100.3.1415926535', + 'general': 'The latest version we are ever going to ship' + }, + { + 'version': '0.0.0', + 'general': 'The first version we ever shipped' + } + ] + } + with mock.patch(UPDATE_DATA_QUALNAME, return_value=update_data): + response = self.app.get(self._get_url('admin_settings_system_update')) + response.mustcontain('A new version is available') + + def test_system_update_nothing_new(self, autologin_user): + update_data = { + 'versions': [ + { + 'version': '0.0.0', + 'general': 'The first version we ever shipped' + } + ] + } + with mock.patch(UPDATE_DATA_QUALNAME, return_value=update_data): + response = self.app.get(self._get_url('admin_settings_system_update')) + response.mustcontain( + 'You already have the latest stable version.') + + def test_system_update_bad_response(self, autologin_user): + with mock.patch(UPDATE_DATA_QUALNAME, side_effect=ValueError('foo')): + response = self.app.get(self._get_url('admin_settings_system_update')) + response.mustcontain( + 'Bad data sent from update server') + + @pytest.mark.usefixtures("app") -class TestAdminSettingsIssueTracker: +class TestAdminSettingsIssueTracker(object): RC_PREFIX = 'rhodecode_' SHORT_PATTERN_KEY = 'issuetracker_pat_' PATTERN_KEY = RC_PREFIX + SHORT_PATTERN_KEY