From: Anton Khorev Date: Fri, 7 Mar 2025 14:47:45 +0000 (+0300) Subject: Add empty issue reporters page X-Git-Tag: live~5^2~4 X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/a440afc604becf167e2a2666dec29435ff2751c4?ds=inline Add empty issue reporters page --- diff --git a/app/controllers/issues/reporters_controller.rb b/app/controllers/issues/reporters_controller.rb new file mode 100644 index 000000000..0bc0695fc --- /dev/null +++ b/app/controllers/issues/reporters_controller.rb @@ -0,0 +1,17 @@ +module Issues + class ReportersController < ApplicationController + layout "site" + + before_action :authorize_web + before_action :set_locale + before_action :check_database_readable + + authorize_resource :issue + + def index + @issue = Issue.visible_to(current_user).find(params[:issue_id]) + rescue ActiveRecord::RecordNotFound + redirect_to :controller => "/errors", :action => "not_found" + end + end +end diff --git a/app/views/issues/reporters/index.html.erb b/app/views/issues/reporters/index.html.erb new file mode 100644 index 000000000..e69de29bb diff --git a/config/routes.rb b/config/routes.rb index 8d42db69b..ec78f6ffd 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -375,6 +375,7 @@ OpenStreetMap::Application.routes.draw do # issues and reports resources :issues do resources :comments, :controller => :issue_comments + resources :reporters, :module => :issues, :only => :index member do post "resolve" post "assign" diff --git a/test/controllers/issues/reporters_controller_test.rb b/test/controllers/issues/reporters_controller_test.rb new file mode 100644 index 000000000..06cfba3c1 --- /dev/null +++ b/test/controllers/issues/reporters_controller_test.rb @@ -0,0 +1,98 @@ +require "test_helper" + +module Issues + class DataControllerTest < ActionDispatch::IntegrationTest + ## + # test all routes which lead to this controller + def test_routes + assert_routing( + { :path => "/issues/1/reporters", :method => :get }, + { :controller => "issues/reporters", :action => "index", :issue_id => "1" } + ) + end + + def test_index_missing_issue_as_moderator + session_for(create(:moderator_user)) + get issue_reporters_path(999111) + + assert_redirected_to :controller => "/errors", :action => :not_found + end + + def test_index_missing_issue_as_administrator + session_for(create(:administrator_user)) + get issue_reporters_path(999111) + + assert_redirected_to :controller => "/errors", :action => :not_found + end + + def test_index_assigned_to_moderator_as_unauthorized + issue = create(:issue, :assigned_role => "moderator") + + get issue_reporters_path(issue) + + assert_redirected_to login_path(:referer => issue_reporters_path(issue)) + end + + def test_index_assigned_to_moderator_as_regular_user + issue = create(:issue, :assigned_role => "moderator") + + session_for(create(:user)) + get issue_reporters_path(issue) + + assert_redirected_to :controller => "/errors", :action => :forbidden + end + + def test_index_assigned_to_moderator_as_administrator + issue = create(:issue, :assigned_role => "moderator") + + session_for(create(:administrator_user)) + get issue_reporters_path(issue) + + assert_redirected_to :controller => "/errors", :action => :not_found + end + + def test_index_assigned_to_moderator_as_moderator + issue = create(:issue, :assigned_role => "moderator") + + session_for(create(:moderator_user)) + get issue_reporters_path(issue) + + assert_response :success + end + + def test_index_assigned_to_administrator_as_unauthorized + issue = create(:issue, :assigned_role => "administrator") + + get issue_reporters_path(issue) + + assert_redirected_to login_path(:referer => issue_reporters_path(issue)) + end + + def test_index_assigned_to_administrator_as_regular_user + issue = create(:issue, :assigned_role => "administrator") + + session_for(create(:user)) + get issue_reporters_path(issue) + + assert_redirected_to :controller => "/errors", :action => :forbidden + end + + def test_index_assigned_to_administrator_as_moderator + issue = create(:issue, :assigned_role => "administrator") + + session_for(create(:moderator_user)) + get issue_reporters_path(issue) + + assert_redirected_to :controller => "/errors", :action => :not_found + end + + def test_index_assigned_to_administrator_as_administrator + issue = create(:issue, :assigned_role => "administrator") + + session_for(create(:administrator_user)) + get issue_reporters_path(issue) + + assert_response :success + end + end +end