mirror of
https://github.com/openSUSE/osem.git
synced 2026-08-13 19:54:02 +00:00
Add controller tests for roles
This commit is contained in:
parent
efc00787fc
commit
88f613ef8c
2 changed files with 136 additions and 13 deletions
|
|
@ -203,24 +203,23 @@ module Admin
|
|||
@roles = Role::ACTIONABLES + Role::LABELS
|
||||
|
||||
params[:user] ? (@selection = params[:user][:roles].parameterize.underscore) : (@selection = 'organizer')
|
||||
@role = Role.where(name: @selection, resource: @conference)
|
||||
@role_users = get_users(@selection)
|
||||
end
|
||||
|
||||
def add_user
|
||||
user = User.find_by(email: params[:user][:email])
|
||||
@user = User.find_by(email: params[:user][:email])
|
||||
@selection = params[:role].parameterize.underscore
|
||||
@role_users = get_users(@selection)
|
||||
@user.add_role @selection.to_sym, @conference
|
||||
|
||||
user.add_role @selection.to_sym, @conference
|
||||
@role_users = get_users(@selection)
|
||||
render 'roles', formats: [:js]
|
||||
end
|
||||
|
||||
def remove_user
|
||||
@selection = params[:role]
|
||||
@role_users = get_users(@selection)
|
||||
|
||||
@user.revoke @selection.to_sym, @conference
|
||||
|
||||
@role_users = get_users(@selection)
|
||||
render 'roles', formats: [:js]
|
||||
end
|
||||
|
||||
|
|
@ -228,11 +227,10 @@ module Admin
|
|||
|
||||
def get_users(role_name)
|
||||
@role_users = {}
|
||||
role = Role.where(name: role_name, resource: @conference)
|
||||
role.blank? ? @role_users[role_name] = role : @role_users[role_name] = role.first.users
|
||||
|
||||
# Initialize @role variable, so that view can show the role description
|
||||
@role = Role.where(name: role_name, resource: @conference)
|
||||
@role.blank? ? @role_users[role_name] = @role : @role_users[role_name] = @role.first.users
|
||||
|
||||
@role_users
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -7,10 +7,11 @@ describe Admin::ConferenceController do
|
|||
let!(:first_user) { create(:user) }
|
||||
let!(:organizer_role) { create(:role, name: 'organizer', resource: conference) }
|
||||
|
||||
let(:organizer) { create(:user, role_ids: organizer_role.id, is_admin: true) }
|
||||
let(:organizer) { create(:user, role_ids: organizer_role.id) }
|
||||
let(:organizer2) { create(:user, email: 'organizer2@email.osem', role_ids: organizer_role.id) }
|
||||
let(:participant) { create(:user) }
|
||||
|
||||
shared_examples 'access as administration' do
|
||||
shared_examples 'access as organizer' do
|
||||
|
||||
describe 'PATCH #update' do
|
||||
|
||||
|
|
@ -211,15 +212,139 @@ describe Admin::ConferenceController do
|
|||
expect(response).to render_template :new
|
||||
end
|
||||
end
|
||||
|
||||
describe 'GET #roles' do
|
||||
before(:each) do
|
||||
get :roles, id: conference.short_title
|
||||
end
|
||||
|
||||
it 'assigns default value to selection' do
|
||||
expect(assigns(:selection)).to eq('organizer')
|
||||
end
|
||||
|
||||
it 'finds the correct role' do
|
||||
expect(assigns(:role)).to eq([organizer_role])
|
||||
end
|
||||
|
||||
it 'properly assigns role_users hash' do
|
||||
expect(assigns(:role_users)).to eq('organizer' => [organizer, organizer2])
|
||||
end
|
||||
|
||||
it 'properly assigns roles variable' do
|
||||
expect(assigns(:roles)).to eq(['Organizer', 'CfP', 'Info Desk', 'Volunteers Coordinator', 'Attendee', 'Volunteer', 'Speaker', 'Sponsor', 'Press', 'Keynote Speaker', ])
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST #roles' do
|
||||
before(:each) do
|
||||
post :roles, id: conference.short_title, user: { roles: 'CfP' }
|
||||
end
|
||||
|
||||
it 'assigns selected value to selection' do
|
||||
expect(assigns(:selection)).to eq('cfp')
|
||||
end
|
||||
|
||||
it 'sets role variable' do
|
||||
post :roles, id: conference.short_title, user: { roles: 'Organizer' }
|
||||
role = Role.where(name: 'organizer', resource: conference)
|
||||
expect(assigns(:role)).to eq(role)
|
||||
end
|
||||
|
||||
it 'sets role variable (returns blank for nil role)' do
|
||||
expect(assigns(:role)).to eq([])
|
||||
end
|
||||
|
||||
it 'sets role_users hash with blank' do
|
||||
expect(assigns(:role_users)).to eq('cfp' => [])
|
||||
end
|
||||
|
||||
it 'sets role_users has with data' do
|
||||
organizer.add_role :cfp, conference
|
||||
post :roles, id: conference.short_title, user: { roles: 'CfP' }
|
||||
expect(assigns(:role_users)).to eq('cfp' => [organizer])
|
||||
end
|
||||
|
||||
it 'sets roles variable' do
|
||||
expect(assigns(:roles)).to eq(['Organizer', 'CfP', 'Info Desk', 'Volunteers Coordinator', 'Attendee', 'Volunteer', 'Speaker', 'Sponsor', 'Press', 'Keynote Speaker', ])
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST #add_user' do
|
||||
before(:each) do
|
||||
@new_user = create(:user, email: 'new_user@email.osem')
|
||||
post :add_user, id: conference.short_title, user: { email: 'new_user@email.osem' }, role: 'organizer'
|
||||
end
|
||||
|
||||
it 'finds correct user' do
|
||||
expect(assigns(:user)).to eq(@new_user)
|
||||
end
|
||||
|
||||
it 'sets role_users variable' do
|
||||
expect(assigns(:role_users)).to eq('organizer' => organizer_role.users)
|
||||
|
||||
post :add_user, id: conference.short_title, user: { email: 'new_user@email.osem' }, role: 'cfp'
|
||||
expect(assigns(:role_users)).to eq('cfp' => [@new_user])
|
||||
end
|
||||
|
||||
it 'assigns role to user' do
|
||||
expect(@new_user.roles).to eq([organizer_role])
|
||||
end
|
||||
|
||||
it 'assigns second role to user' do
|
||||
post :add_user, id: conference.short_title, user: { email: @new_user.email }, role: 'cfp'
|
||||
cfp_role = Role.find_by(name: 'cfp', resource: conference)
|
||||
expect(@new_user.roles).to eq([organizer_role, cfp_role])
|
||||
end
|
||||
end
|
||||
|
||||
describe 'DELETE #remove_user' do
|
||||
before(:each) do
|
||||
|
||||
end
|
||||
|
||||
it 'sets selection variable' do
|
||||
delete :remove_user, id: conference.short_title, user_id: organizer2.id, role: 'organizer'
|
||||
expect(assigns(:selection)).to eq('organizer')
|
||||
end
|
||||
|
||||
it 'sets role_users hash' do
|
||||
delete :remove_user, id: conference.short_title, user_id: organizer2.id, role: 'organizer'
|
||||
expect(assigns(:role_users)).to eq('organizer' => [organizer])
|
||||
end
|
||||
|
||||
it 'removes role from user' do
|
||||
delete :remove_user, id: conference.short_title, user_id: organizer2.id, role: 'organizer'
|
||||
organizer2.reload
|
||||
expect(organizer2.roles).to eq([])
|
||||
end
|
||||
|
||||
it 'removes second role from user' do
|
||||
# Add cfp role
|
||||
organizer2.add_role :cfp, conference
|
||||
cfp_role = Role.find_by(name: 'cfp', resource: conference)
|
||||
# Remove role organizer
|
||||
delete :remove_user, id: conference.short_title, user_id: organizer2.id, role: 'organizer'
|
||||
|
||||
organizer2.reload
|
||||
expect(organizer2.roles).to include(cfp_role)
|
||||
expect(organizer2.roles[0]).to eq(cfp_role)
|
||||
expect(organizer2.roles.count).to eq(1)
|
||||
expect(assigns(:role_users)).to eq('organizer' => [organizer])
|
||||
|
||||
delete :remove_user, id: conference.short_title, user_id: organizer2.id, role: 'cfp'
|
||||
organizer2.reload
|
||||
expect(organizer2.roles).to eq([])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'administrator access' do
|
||||
describe 'organizer access' do
|
||||
|
||||
before do
|
||||
sign_in(organizer)
|
||||
end
|
||||
|
||||
it_behaves_like 'access as administration'
|
||||
it_behaves_like 'access as organizer'
|
||||
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue