Project

General

Profile

Download (10.2 KB) Statistics
| Branch: | Tag: | Revision:
require 'test_helper'

class Api::V2::RolesControllerTest < ActionController::TestCase
valid_attrs = { :name => 'staff' }

test "should get index" do
get :index
assert_response :success
assert_not_nil assigns(:roles)
roles = ActiveSupport::JSON.decode(@response.body)
assert !roles.empty?
assert_equal Role.order(:name).pluck(:name), roles['results'].map { |r| r['name'] }
end

test "should show individual record" do
get :show, params: { :id => roles(:manager).to_param }
assert_response :success
show_response = ActiveSupport::JSON.decode(@response.body)
assert !show_response.empty?
end

test "should create role" do
assert_difference('Role.count') do
post :create, params: { :role => valid_attrs }
end
assert_response :created
end

test "should update role" do
put :update, params: { :id => roles(:destroy_hosts).to_param, :role => valid_attrs }
assert_response :success
end

test "should destroy roles" do
assert_difference('Role.count', -1) do
delete :destroy, params: { :id => roles(:destroy_hosts).to_param }
end
assert_response :success
end

test "should clone role and its permissions" do
new_name = "New Manager"
manager = Role.find_by :name => "Manager"
perm_count = manager.permissions.count
post :clone, params: { :name => new_name, :id => manager.id }
assert_response :success
r = Role.find_by :name => new_name
assert_equal perm_count, r.permissions.count
end

test_attributes :pid => 'b129642d-926d-486a-84d9-5952b44ac446'
test "should remove role with associated filters" do
role = FactoryBot.create(:role, :name => "New Role")
FactoryBot.create(:filter, :role_id => role.id, :permission_ids => [permissions(:view_domains).id])
assert_difference('Role.count', -1) do
assert_difference('Filter.count', -1) do
delete :destroy, params: { :id => role.id }
end
end
assert_response :success
end

test "should clone role and its taxonomies" do
new_name = "New Role"
loc = Location.first
org = Organization.first
role = FactoryBot.create(:role, :name => "Test Role", :locations => [loc], :organizations => [org])
post :clone, params: { :id => role.id, :role => { :name => new_name } }
assert_response :success
r = Role.find_by :name => new_name
assert_equal 1, r.organizations.count
assert_equal 1, r.locations.count
assert_equal org, r.organizations.first
assert_equal loc, r.locations.first
end

test "should override attributes when clonning" do
new_name = "New Role"
loc = taxonomies(:location1)
org = taxonomies(:organization1)
desc = "default description"
new_org = taxonomies(:organization2)
new_loc = taxonomies(:location2)
new_desc = "updated description"
new_role = { :description => new_desc, :location_ids => [new_loc.id], :organization_ids => [new_org.id], :name => new_name }
role = FactoryBot.create(:role, :name => "Test Role", :locations => [loc], :organizations => [org], :description => desc)
post :clone, params: { :name => new_name,
:id => role.id,
:role => new_role }
assert_response :success
cloned_role = Role.find_by :name => new_name
assert cloned_role
assert_equal new_org, cloned_role.organizations.first
assert_equal new_loc, cloned_role.locations.first
assert_equal new_desc, cloned_role.description
end

test "should override organizations and leave locations alone when clonning" do
new_name = "New Role"
loc = taxonomies(:location1)
org = taxonomies(:organization1)
desc = "default description"
new_org = taxonomies(:organization2)
new_desc = "updated description"
new_role = { :description => new_desc, :organization_ids => [new_org.id], :name => new_name }
role = FactoryBot.create(:role, :name => "Test Role", :locations => [loc], :organizations => [org], :description => desc)
post :clone, params: { :name => new_name,
:id => role.id,
:role => new_role }
assert_response :success
cloned_role = Role.find_by :name => new_name
assert cloned_role
assert_equal new_org, cloned_role.organizations.first
assert_equal loc, cloned_role.locations.first
assert_equal new_desc, cloned_role.description
end

test "should not have any taxonomies when clonning" do
new_name = "New Role"
loc = taxonomies(:location1)
org = taxonomies(:organization1)
desc = "default description"
new_role = { :location_ids => [], :organization_ids => [], :name => new_name }
role = FactoryBot.create(:role, :name => "Test Role", :locations => [loc], :organizations => [org], :description => desc)
post :clone, params: { :name => new_name,
:id => role.id,
:role => new_role }
assert_response :success
cloned_role = Role.find_by :name => new_name
assert cloned_role
assert_equal [], cloned_role.organizations
assert_equal [], cloned_role.locations
end

context "with organization and locations" do
before do
@org = taxonomies(:organization1)
@loc = taxonomies(:location1)
end

test "should create role with taxonomies" do
name = 'Test Role'
valid_attrs = { :name => name, :location_ids => [@loc.id], :organization_ids => [@org.id] }
post :create, params: { :role => valid_attrs }
assert_response :success
role = Role.find_by :name => name
assert_equal @org, role.organizations.first
assert_equal @loc, role.locations.first
end

test "should create org admin role" do
new_name = "Org Admin"
new_role = { :name => new_name }
post :clone, params: { :new_name => new_name,
:id => roles(:organization_admin).to_param,
:role => new_role }
assert_response :success
cloned_role = Role.find_by :name => new_name
assert cloned_role
end

test "should remove org admin role" do
new_name = "Org Admin"
new_role = { :name => new_name }
post :clone, params: { :new_name => new_name,
:id => roles(:organization_admin).to_param,
:role => new_role }
assert_response :success
cloned_role = Role.find_by :name => new_name
assert_difference('Role.count', -1) do
delete :destroy, params: { :id => cloned_role.id }
end
assert_response :success
end

test "should update non-overridable filter taxonomies on role taxonomies update" do
role_name = 'New Role'
role = FactoryBot.create(:role, :name => role_name)
filter = FactoryBot.create(:filter, :role_id => role.id, :permission_ids => [permissions(:view_domains).id])
new_role_attrs = { :location_ids => [@loc.id], :organization_ids => [@org.id] }
put :update, params: { :id => role.id, :role => new_role_attrs }
assert_response :success
updated_role = Role.find_by :name => role_name
assert @org, updated_role.organizations.first
assert @loc, updated_role.locations.first
updated_filter = Filter.find_by :id => filter.id
assert_equal @org, updated_filter.organizations.first
assert_equal @loc, updated_filter.locations.first
end

test "should not update overridable filter taxonomies on role taxonomies update" do
role_name = 'New Role'
role = FactoryBot.create(:role, :name => role_name)
filter = FactoryBot.create(:filter, :role_id => role.id, :permission_ids => [permissions(:view_domains).id], :override => true)
new_role_attrs = { :location_ids => [@loc.id], :organization_ids => [@org.id] }
put :update, params: { :id => role.id, :role => new_role_attrs }
assert_response :success
updated_role = Role.find_by :name => role_name
assert @org, updated_role.organizations.first
assert @loc, updated_role.locations.first
updated_filter = Filter.find_by :id => filter.id
assert_equal [], updated_filter.organizations
assert_equal [], updated_filter.locations
end

test "should create overridable filter" do
filter_org = taxonomies(:organization2)
filter_loc = taxonomies(:location2)
role = FactoryBot.create(:role, :name => 'New Role', :location_ids => [@loc.id], :organization_ids => [@org.id])
filter = FactoryBot.create(:filter, :role_id => role.id, :permission_ids => [permissions(:view_domains).id], :location_ids => [filter_loc.id], :organization_ids => [filter_org.id], :override => true)
assert_equal true, filter.override
assert_equal filter_org, filter.organizations.first
assert_equal filter_loc, filter.locations.first
end

test "should not create overridable filter" do
role_name = 'New Role'
role = FactoryBot.create(:role, :name => role_name)
assert_raise do
FactoryBot.create(:filter, :role_id => role.id, :permission_ids => [permissions(:view_architectures).id], :location_ids => [@loc.id], :organization_ids => [@org.id], :override => true)
end
end

test "should create filter without override" do
role = FactoryBot.create(:role, :name => 'New Role', :location_ids => [@loc.id], :organization_ids => [@org.id])
filter = FactoryBot.create(:filter, :role_id => role.id, :permission_ids => [permissions(:view_domains).id])
assert_equal false, filter.override
assert_equal @org, filter.organizations.first
assert_equal @loc, filter.locations.first
end

test "should create non-overridable filter" do
role_name = 'New Role'
role = FactoryBot.create(:role, :name => role_name)
filter = FactoryBot.create(:filter, :role_id => role.id, :permission_ids => [permissions(:view_architectures).id])
assert_equal role.id, filter.role.id
end
end

test "org admin should not create roles by default" do
user = User.create :login => "foo", :mail => "foo@bar.com", :auth_source => auth_sources(:one), :roles => [Role.find_by_name('Organization admin')]
as_user user do
put :create, params: { :role => { :name => 'newrole'} }
end
assert_response :forbidden
response = JSON.parse(@response.body)
assert_equal "Missing one of the required permissions: create_roles", response['error']['details']
end
end
(47-47/61)