diff --git a/rhodecode/controllers/admin/settings.py b/rhodecode/controllers/admin/settings.py --- a/rhodecode/controllers/admin/settings.py +++ b/rhodecode/controllers/admin/settings.py @@ -397,19 +397,20 @@ class SettingsController(BaseController) settings_model = IssueTrackerSettingsModel() form = IssueTrackerPatternsForm()().to_python(request.POST) - for uid in form['delete_patterns']: - settings_model.delete_entries(uid) + if form: + for uid in form.get('delete_patterns', []): + settings_model.delete_entries(uid) - for pattern in form['patterns']: - for setting, value, type_ in pattern: - sett = settings_model.create_or_update_setting( - setting, value, type_) - Session().add(sett) + for pattern in form.get('patterns', []): + for setting, value, type_ in pattern: + sett = settings_model.create_or_update_setting( + setting, value, type_) + Session().add(sett) - Session().commit() + Session().commit() - SettingsModel().invalidate_settings_cache() - h.flash(_('Updated issue tracker entries'), category='success') + SettingsModel().invalidate_settings_cache() + h.flash(_('Updated issue tracker entries'), category='success') return redirect(url('admin_settings_issuetracker')) @HasPermissionAllDecorator('hg.admin') 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 @@ -494,6 +494,14 @@ class TestAdminSettingsIssueTracker: response = self.app.get(url('admin_settings_issuetracker')) assert response.status_code == 200 + def test_add_empty_issuetracker_pattern( + self, request, autologin_user, csrf_token): + post_url = url('admin_settings_issuetracker_save') + post_data = { + 'csrf_token': csrf_token + } + self.app.post(post_url, post_data, status=302) + def test_add_issuetracker_pattern( self, request, autologin_user, csrf_token): pattern = 'issuetracker_pat'