kanbanworkflowstimelinescrumrubyroadmapproject-planningproject-managementopenprojectangularissue-trackerifcgantt-chartganttbug-trackerboardsbcf
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
323 lines
9.7 KiB
323 lines
9.7 KiB
#-- copyright
|
|
# OpenProject Global Roles Plugin
|
|
#
|
|
# Copyright (C) 2010 - 2014 the OpenProject Foundation (OPF)
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# version 3.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
#++
|
|
|
|
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
|
|
|
describe RolesController, :type => :controller do
|
|
before (:each) do
|
|
allow(@controller).to receive(:check_if_login_required)
|
|
expect(@controller).to receive(:require_admin)
|
|
disable_flash_sweep
|
|
end
|
|
|
|
after (:each) do
|
|
User.current = nil
|
|
end
|
|
|
|
shared_examples_for "index" do
|
|
it {expect(response).to be_success}
|
|
it {expect(assigns(:roles)).to eql(@roles)}
|
|
it {expect(response).to render_template "roles/index"}
|
|
end
|
|
|
|
shared_examples_for "global assigns" do
|
|
it {expect(assigns(:global_permissions)).to eql @global_role.setable_permissions}
|
|
it {expect(assigns(:global_roles)).to eql @global_roles}
|
|
it {expect(assigns(:global_role)).to eql @global_role}
|
|
end
|
|
|
|
shared_examples_for "permission assigns" do
|
|
it {expect(assigns(:member_permissions)).to eql @member_role.setable_permissions}
|
|
it {expect(assigns(:global_permissions)).to eql GlobalRole.setable_permissions}
|
|
end
|
|
|
|
shared_examples_for "successful create" do
|
|
it {expect(response).to be_redirect}
|
|
it {expect(response).to redirect_to "/admin/roles"}
|
|
it {expect(flash[:notice]).to eql I18n.t(:notice_successful_create)}
|
|
end
|
|
|
|
shared_examples_for "failed create" do
|
|
it {expect(response).to be_success}
|
|
it {expect(response).to render_template "new"}
|
|
end
|
|
|
|
|
|
|
|
describe "WITH get" do
|
|
describe "VERB", :index do
|
|
before (:each) do
|
|
mock_role_find
|
|
end
|
|
|
|
describe "html" do
|
|
before {get "index"}
|
|
|
|
it_should_behave_like "index"
|
|
|
|
end
|
|
|
|
describe "xhr" do
|
|
before {xhr :get, "index"}
|
|
|
|
it_should_behave_like "index"
|
|
end
|
|
end
|
|
|
|
describe "VERB", :new do
|
|
before (:each) do
|
|
@member_role = mocks_for_creating Role
|
|
allow(GlobalRole).to receive(:setable_permissions).and_return([:perm1, :perm2, :perm3])
|
|
@non_member_role = mock_model Role
|
|
mock_permissions_on @non_member_role
|
|
allow(Role).to receive(:non_member).and_return(@non_member_role)
|
|
|
|
mock_role_find
|
|
get "new"
|
|
end
|
|
|
|
it {expect(response).to be_success}
|
|
it {expect(response).to render_template "roles/new"}
|
|
it {expect(assigns(:member_permissions)).to eql @member_role.setable_permissions}
|
|
it {expect(assigns(:roles)).to eql @roles}
|
|
it {expect(assigns(:role)).to eql @member_role}
|
|
it {expect(assigns(:global_permissions)).to eql GlobalRole.setable_permissions}
|
|
end
|
|
|
|
describe "VERB", :edit do
|
|
before(:each) do
|
|
@member_role = mocks_for_creating Role
|
|
@global_role = mocks_for_creating GlobalRole
|
|
mock_role_find
|
|
end
|
|
|
|
describe "WITH member_role id" do
|
|
before (:each) do
|
|
@params = {"id" => "1"}
|
|
allow(Role).to receive(:find).and_return(@member_role)
|
|
end
|
|
|
|
describe "RESULT" do
|
|
describe "success" do
|
|
describe "html" do
|
|
before {get :edit, @params}
|
|
|
|
it {expect(response).to be_success}
|
|
it {expect(response).to render_template "roles/edit"}
|
|
it {expect(assigns(:role)).to eql @member_role}
|
|
it {expect(assigns(:permissions)).to eql @member_role.setable_permissions}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "WITH post" do
|
|
before(:each) do
|
|
@member_role = mocks_for_creating Role
|
|
@global_role = mocks_for_creating GlobalRole
|
|
mock_role_find
|
|
allow(Role).to receive(:find).with("1").and_return(@member_role)
|
|
allow(Role).to receive(:find).with("2").and_return(@global_role)
|
|
end
|
|
|
|
describe "VERB", :create do
|
|
|
|
describe "WITH member_role params" do
|
|
before (:each) do
|
|
@params = {"role"=>{"name"=>"role",
|
|
"permissions"=>["perm1", "perm2", "perm3"],
|
|
"assignable"=>"1"}}
|
|
end
|
|
|
|
describe "RESULT" do
|
|
describe "success" do
|
|
before(:each) do
|
|
expect(Role).to receive(:new).with(@params["role"]).and_return(@member_role)
|
|
allow(@member_role).to receive(:save).and_return(true)
|
|
allow(@member_role).to receive(:errors).and_return([])
|
|
end
|
|
|
|
describe "html" do
|
|
before (:each) do
|
|
post "create", @params
|
|
end
|
|
|
|
it_should_behave_like "successful create"
|
|
it {expect(assigns(:role)).to eql @member_role}
|
|
end
|
|
end
|
|
|
|
describe "failure" do
|
|
before(:each) do
|
|
expect(Role).to receive(:new).with(@params["role"]).and_return(@member_role)
|
|
allow(@member_role).to receive(:save).and_return(false)
|
|
allow(@member_role).to receive(:errors).and_return(["something is wrong"])
|
|
end
|
|
|
|
describe "html" do
|
|
before {post "create", @params}
|
|
|
|
it_should_behave_like "failed create"
|
|
it {expect(assigns(:role)).to eql @member_role}
|
|
it {expect(assigns(:roles)).to eql Role.all}
|
|
it_should_behave_like "permission assigns"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "WITH global_role params" do
|
|
before (:each) do
|
|
@params = {"role"=>{"name"=>"role",
|
|
"permissions"=>["perm1", "perm2", "perm3"]
|
|
},
|
|
"global_role" => "1"}
|
|
end
|
|
|
|
describe "RESULTS" do
|
|
describe "success" do
|
|
before(:each) do
|
|
expect(GlobalRole).to receive(:new).with(@params["role"]).and_return(@global_role)
|
|
allow(@global_role).to receive(:save).and_return(true)
|
|
end
|
|
|
|
describe "html" do
|
|
before {post "create", @params}
|
|
|
|
it_should_behave_like "successful create"
|
|
end
|
|
end
|
|
|
|
describe "failure" do
|
|
before(:each) do
|
|
expect(GlobalRole).to receive(:new).with(@params["role"]).and_return(@global_role)
|
|
allow(@global_role).to receive(:save).and_return(false)
|
|
end
|
|
|
|
describe "html" do
|
|
before {post "create", @params}
|
|
|
|
it_should_behave_like "failed create"
|
|
it {expect(assigns(:role)).to eql @global_role}
|
|
it {expect(assigns(:roles)).to eql Role.all}
|
|
it_should_behave_like "permission assigns"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
describe "VERB", :destroy do
|
|
shared_examples_for "destroy results" do
|
|
describe "success" do
|
|
before (:each) do
|
|
expect(@role).to receive(:destroy)
|
|
post "destroy", @params
|
|
end
|
|
|
|
it {expect(response).to be_redirect}
|
|
it {expect(response).to redirect_to "/admin/roles"}
|
|
end
|
|
end
|
|
|
|
describe "WITH member_role params" do
|
|
before (:each) do
|
|
@params = {"class" => "Role", "id" => "1"}
|
|
@role = @member_role
|
|
end
|
|
|
|
describe "RESULTS" do
|
|
it_should_behave_like "destroy results"
|
|
end
|
|
end
|
|
|
|
describe "WITH global_role params" do
|
|
before (:each) do
|
|
@params = {"class" => "Role", "id" => "2"}
|
|
@role = @global_role
|
|
end
|
|
|
|
describe "RESULTS" do
|
|
it_should_behave_like "destroy results"
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
describe "VERB", :update do
|
|
shared_examples_for "update results" do
|
|
describe "success" do
|
|
describe "html" do
|
|
before (:each) do
|
|
expect(@role).to receive(:update_attributes).with(@params["role"]).and_return(true)
|
|
allow(@role).to receive(:errors).and_return([])
|
|
post :update, @params
|
|
end
|
|
|
|
it {expect(response).to be_redirect}
|
|
it {expect(response).to redirect_to "/admin/roles"}
|
|
it {expect(flash[:notice]).to eql I18n.t(:notice_successful_update)}
|
|
end
|
|
end
|
|
|
|
describe "failure" do
|
|
describe "html" do
|
|
before(:each) do
|
|
expect(@role).to receive(:update_attributes).with(@params["role"]).and_return(false)
|
|
allow(@role).to receive(:errors).and_return(["something is wrong"])
|
|
post :update, @params
|
|
end
|
|
|
|
it { expect(response).to render_template "roles/edit" }
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "WITH member_role params" do
|
|
before (:each) do
|
|
@params = {"role" => {"permissions" => ["permA", "permB"],
|
|
"name" => "schmu"},
|
|
"id" => "1"}
|
|
@role = @member_role
|
|
end
|
|
|
|
describe "RESULT" do
|
|
it_should_behave_like "update results"
|
|
end
|
|
end
|
|
|
|
describe "WITH global_role params" do
|
|
before (:each) do
|
|
@params = {"role" => {"permissions" => ["permA", "permB"],
|
|
"name" => "schmu"},
|
|
"id" => "2"}
|
|
@role = @global_role
|
|
end
|
|
|
|
describe "RESULT" do
|
|
it_should_behave_like "update results"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|