diff --git a/spec/controllers/admin/cfps_controller_spec.rb b/spec/controllers/admin/cfps_controller_spec.rb index 68dec45e..d2582f2f 100644 --- a/spec/controllers/admin/cfps_controller_spec.rb +++ b/spec/controllers/admin/cfps_controller_spec.rb @@ -7,8 +7,7 @@ require 'spec_helper' describe Admin::CfpsController do let!(:today) { Date.today } let!(:conference) { create(:conference, start_date: today + 20.days, end_date: today + 30.days) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, role_ids: organizer_role.id) } + let!(:organizer) { create(:organizer, resource: conference) } let(:cfp) { create(:cfp, program: conference.program) } before { sign_in(organizer) } diff --git a/spec/controllers/admin/comments_controller_spec.rb b/spec/controllers/admin/comments_controller_spec.rb index 702b7396..daffa788 100644 --- a/spec/controllers/admin/comments_controller_spec.rb +++ b/spec/controllers/admin/comments_controller_spec.rb @@ -6,8 +6,7 @@ describe Admin::CommentsController, type: :controller do # It is necessary to use bang version of let to build roles before user let(:conference) { create(:conference) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let(:organizer) { create(:user, role_ids: organizer_role.id, last_sign_in_at: Time.now - 1.day) } + let(:organizer) { create(:organizer, resource: conference, last_sign_in_at: Time.now - 1.day) } let(:participant) { create(:user) } let(:event) { create(:event, program: conference.program) } let(:comment) { create(:comment, commentable_type: 'Event', commentable_id: event.id) } diff --git a/spec/controllers/admin/conferences_controller_spec.rb b/spec/controllers/admin/conferences_controller_spec.rb index 9a10610c..714910f4 100644 --- a/spec/controllers/admin/conferences_controller_spec.rb +++ b/spec/controllers/admin/conferences_controller_spec.rb @@ -7,11 +7,11 @@ describe Admin::ConferencesController do # It is necessary to use bang version of let to build roles before user let!(:organization) { create(:organization, name: 'organization') } let!(:conference) { create(:conference, organization: organization, end_date: Date.new(2014, 05, 26) + 15) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } let!(:organization_admin_role) { Role.find_by(name: 'organization_admin', resource: organization) } let(:organization_admin) { create(:user, role_ids: organization_admin_role.id) } - let(:organizer) { create(:user, role_ids: organizer_role.id) } - let(:organizer2) { create(:user, email: 'organizer2@email.osem', role_ids: organizer_role.id) } + let(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } + let!(:organizer) { create(:organizer, resource: conference) } + let!(:organizer2) { create(:organizer, email: 'organizer2@email.osem', resource: conference) } let(:participant) { create(:user) } shared_examples 'access as organizer or organization_admin' do diff --git a/spec/controllers/admin/event_schedules_controller_spec.rb b/spec/controllers/admin/event_schedules_controller_spec.rb index 96350d80..bb6109ea 100644 --- a/spec/controllers/admin/event_schedules_controller_spec.rb +++ b/spec/controllers/admin/event_schedules_controller_spec.rb @@ -8,8 +8,7 @@ describe Admin::EventSchedulesController do let(:room) { create(:room, venue: venue) } let(:schedule) { create(:schedule, program: conference.program)} let(:event_schedule) { create(:event_schedule, schedule: schedule)} - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let(:organizer) { create(:user, role_ids: organizer_role.id) } + let!(:organizer) { create(:organizer, resource: conference) } context 'logged in as an organizer' do before :each do diff --git a/spec/controllers/admin/events_controller_spec.rb b/spec/controllers/admin/events_controller_spec.rb index fb91af94..104e7044 100644 --- a/spec/controllers/admin/events_controller_spec.rb +++ b/spec/controllers/admin/events_controller_spec.rb @@ -4,8 +4,7 @@ require 'spec_helper' describe Admin::EventsController do let(:conference) { create(:conference) } - let(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let(:organizer) { create(:user, role_ids: organizer_role.id) } + let!(:organizer) { create(:organizer, resource: conference) } # The where_object() and where_object_changes() methods of paper_trail gem are broken when having: # an Event with ID 1, an Event with ID 2, and a commercial with ID 1, for event with ID 2 # (the numbers could be different as long as there is this matching of IDs). diff --git a/spec/controllers/admin/programs_controller_spec.rb b/spec/controllers/admin/programs_controller_spec.rb index ee9931c1..955d1477 100644 --- a/spec/controllers/admin/programs_controller_spec.rb +++ b/spec/controllers/admin/programs_controller_spec.rb @@ -6,8 +6,7 @@ describe Admin::ProgramsController, type: :controller do # It is necessary to use bang version of let to build roles before user let(:conference) { create(:conference) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let(:organizer) { create(:user, role_ids: organizer_role.id, last_sign_in_at: Time.now - 1.day) } + let!(:organizer) { create(:organizer, resource: conference) } context 'not logged in user' do describe 'GET #show' do diff --git a/spec/controllers/admin/registration_periods_controller_spec.rb b/spec/controllers/admin/registration_periods_controller_spec.rb index d4f0823a..84bcadf1 100644 --- a/spec/controllers/admin/registration_periods_controller_spec.rb +++ b/spec/controllers/admin/registration_periods_controller_spec.rb @@ -6,10 +6,9 @@ describe Admin::RegistrationPeriodsController do # It is necessary to use bang version of let to build roles before user let(:conference) { create(:conference) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } let!(:registration_ticket) { create(:registration_ticket, conference: conference) } - let(:organizer) { create(:user, role_ids: organizer_role.id) } - let(:organizer2) { create(:user, email: 'organizer2@email.osem', role_ids: organizer_role.id) } + let!(:organizer) { create(:organizer, resource: conference) } + let!(:organizer2) { create(:organizer, email: 'organizer2@email.osem', resource: conference) } let(:participant) { create(:user) } shared_examples 'access as administration or organizer' do diff --git a/spec/controllers/admin/schedules_controller_spec.rb b/spec/controllers/admin/schedules_controller_spec.rb index 38ba33e3..5432765c 100644 --- a/spec/controllers/admin/schedules_controller_spec.rb +++ b/spec/controllers/admin/schedules_controller_spec.rb @@ -5,8 +5,7 @@ require 'spec_helper' describe Admin::SchedulesController do let(:conference) { create(:conference) } let(:schedule) { create(:schedule, program: conference.program)} - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let(:organizer) { create(:user, role_ids: organizer_role.id) } + let!(:organizer) { create(:organizer, resource: conference) } context 'logged in as an organizer' do before :each do diff --git a/spec/factories/users.rb b/spec/factories/users.rb index 22e4ea7a..24affba4 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -13,7 +13,8 @@ # `create(:admin, is_admin: false)` # # For a non-admin user, use: `create(:user)` -# For an admin user, use: `create(:admin) +# For an admin user, use: `create(:admin)` +# For an organizer user, use `create(:organizer)` FactoryBot.define do factory :user do @@ -58,4 +59,14 @@ FactoryBot.define do biography { '
' } end + factory :organizer, parent: :user do + transient do + resource { create(:resource) } + end + + after(:create) do |user, evaluator| + user.roles << Role.find_or_create_by(name: 'organizer', resource: evaluator.resource) + user.save! + end + end end diff --git a/spec/features/commercials_spec.rb b/spec/features/commercials_spec.rb index 107a0693..a0710f86 100644 --- a/spec/features/commercials_spec.rb +++ b/spec/features/commercials_spec.rb @@ -6,8 +6,7 @@ feature Commercial do # It is necessary to use bang version of let to build roles before user let!(:conference) { create(:conference) } let!(:cfp) { create(:cfp, program: conference.program) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, resource: conference) } let!(:participant) { create(:user) } context 'in admin area' do diff --git a/spec/features/conference_spec.rb b/spec/features/conference_spec.rb index 4c2b1438..95f422bc 100644 --- a/spec/features/conference_spec.rb +++ b/spec/features/conference_spec.rb @@ -39,8 +39,7 @@ feature Conference do scenario 'update conference', feature: true, js: true do conference = create(:conference) - organizer_role = Role.find_by(name: 'organizer', resource: conference) - organizer = create(:user, role_ids: [organizer_role.id]) + organizer = create(:organizer, resource: conference) expected_count = Conference.count diff --git a/spec/features/contact_spec.rb b/spec/features/contact_spec.rb index 10b2d761..47585cc9 100644 --- a/spec/features/contact_spec.rb +++ b/spec/features/contact_spec.rb @@ -5,8 +5,7 @@ require 'spec_helper' feature Contact do let!(:conference) { create(:conference) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, email: 'admin@example.com', role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, resource: conference) } shared_examples 'contact field' do |field_name, field_value| it 'updates a contact' do diff --git a/spec/features/difficulty_levels_spec.rb b/spec/features/difficulty_levels_spec.rb index bb513cf0..c8ce8b2f 100644 --- a/spec/features/difficulty_levels_spec.rb +++ b/spec/features/difficulty_levels_spec.rb @@ -4,8 +4,7 @@ require 'spec_helper' feature DifficultyLevel do let!(:conference) { create(:conference) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, resource: conference) } shared_examples 'difficulty levels' do scenario 'adds difficulty level', feature: true, js: true do diff --git a/spec/features/email_spec.rb b/spec/features/email_spec.rb index 0856e15b..a110dd2c 100644 --- a/spec/features/email_spec.rb +++ b/spec/features/email_spec.rb @@ -4,8 +4,7 @@ require 'spec_helper' feature EmailSettings do let!(:conference) { create(:conference) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, resource: conference) } shared_examples 'email settings' do scenario 'updates email settings', diff --git a/spec/features/event_types_spec.rb b/spec/features/event_types_spec.rb index 7e256bd5..8e05784a 100644 --- a/spec/features/event_types_spec.rb +++ b/spec/features/event_types_spec.rb @@ -4,8 +4,7 @@ require 'spec_helper' feature EventType do let!(:conference) { create(:conference) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, resource: conference) } shared_examples 'event types' do scenario 'adds and updates event type', feature: true do diff --git a/spec/features/lodgings_spec.rb b/spec/features/lodgings_spec.rb index 1728c286..f8cc7626 100644 --- a/spec/features/lodgings_spec.rb +++ b/spec/features/lodgings_spec.rb @@ -4,8 +4,7 @@ require 'spec_helper' feature Lodging do let!(:conference) { create(:conference) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, resource: conference) } scenario 'Add a lodging', feature: true, js: true do path = "#{Rails.root}/app/assets/images/rails.png" diff --git a/spec/features/program_spec.rb b/spec/features/program_spec.rb index 968d287e..273e79cb 100644 --- a/spec/features/program_spec.rb +++ b/spec/features/program_spec.rb @@ -6,8 +6,7 @@ feature Program do let!(:conference) { create(:conference) } let!(:program) { conference.program } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, resource: conference) } describe 'edit program' do before :each do diff --git a/spec/features/proposals_spec.rb b/spec/features/proposals_spec.rb index 947208c6..9bd0e1c3 100644 --- a/spec/features/proposals_spec.rb +++ b/spec/features/proposals_spec.rb @@ -6,8 +6,7 @@ feature Event do let!(:conference) { create(:conference) } let!(:registration_period) { create(:registration_period, conference: conference, start_date: Date.current) } let!(:cfp) { create(:cfp, program_id: conference.program.id) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, email: 'admin@example.com', role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, resource: conference) } let!(:participant) { create(:user) } let!(:participant_without_bio) { create(:user, biography: '') } diff --git a/spec/features/registration_periods_spec.rb b/spec/features/registration_periods_spec.rb index de94f7bb..4ef0573b 100644 --- a/spec/features/registration_periods_spec.rb +++ b/spec/features/registration_periods_spec.rb @@ -5,8 +5,7 @@ require 'spec_helper' feature RegistrationPeriod do # It is necessary to use bang version of let to build roles before user let!(:conference) { create(:conference) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, email: 'admin@example.com', role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, email: 'admin@example.com', resource: conference) } let(:start_date) { Date.today } let(:end_date) { Date.today + 5 } diff --git a/spec/features/rooms_spec.rb b/spec/features/rooms_spec.rb index b4a4fb24..fbb2dcbe 100644 --- a/spec/features/rooms_spec.rb +++ b/spec/features/rooms_spec.rb @@ -5,8 +5,7 @@ require 'spec_helper' feature Room do let!(:conference) { create(:conference) } let!(:venue) { create(:venue, conference: conference) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, resource: conference) } shared_examples 'rooms' do scenario 'adds a room', feature: true, js: true do diff --git a/spec/features/splashpage_spec.rb b/spec/features/splashpage_spec.rb index c87fca4a..c637d523 100644 --- a/spec/features/splashpage_spec.rb +++ b/spec/features/splashpage_spec.rb @@ -6,8 +6,7 @@ feature Splashpage do # It is necessary to use bang version of let to build roles before user let!(:conference) { create(:conference) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, email: 'admin@example.com', role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, resource: conference) } let!(:participant) { create(:user, biography: '', is_admin: false) } scenario 'create a valid splashpage', js: true do diff --git a/spec/features/sponsor_spec.rb b/spec/features/sponsor_spec.rb index 270d33bb..e64946ea 100644 --- a/spec/features/sponsor_spec.rb +++ b/spec/features/sponsor_spec.rb @@ -4,8 +4,7 @@ require 'spec_helper' feature Sponsor do let!(:conference) { create(:conference) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, resource: conference) } shared_examples 'sponsors' do scenario 'adds and updates sponsors', feature: true, js: true do diff --git a/spec/features/sponsorship_level_spec.rb b/spec/features/sponsorship_level_spec.rb index 92ba6d4c..5392978c 100644 --- a/spec/features/sponsorship_level_spec.rb +++ b/spec/features/sponsorship_level_spec.rb @@ -4,8 +4,7 @@ require 'spec_helper' feature SponsorshipLevel do let!(:conference) { create(:conference) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, resource: conference) } shared_examples 'sponsorship_levels' do scenario 'adds a sponsorship level', feature: true, js: true do diff --git a/spec/features/tickets_spec.rb b/spec/features/tickets_spec.rb index a4dfed92..161d64d2 100644 --- a/spec/features/tickets_spec.rb +++ b/spec/features/tickets_spec.rb @@ -4,8 +4,7 @@ require 'spec_helper' feature Ticket do let!(:conference) { create(:conference, title: 'ExampleCon') } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, email: 'admin@example.com', role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, resource: conference) } context 'as a organizer' do before(:each) do diff --git a/spec/features/tracks_spec.rb b/spec/features/tracks_spec.rb index 9b0d2428..2abda427 100644 --- a/spec/features/tracks_spec.rb +++ b/spec/features/tracks_spec.rb @@ -4,8 +4,7 @@ require 'spec_helper' feature Track do let!(:conference) { create(:conference) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, resource: conference) } let(:user) { create(:user) } shared_examples 'admin tracks' do diff --git a/spec/features/venues_spec.rb b/spec/features/venues_spec.rb index d345a9f4..9d513d40 100644 --- a/spec/features/venues_spec.rb +++ b/spec/features/venues_spec.rb @@ -4,8 +4,7 @@ require 'spec_helper' feature Conference do let!(:conference) { create(:conference) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, resource: conference) } shared_examples 'venue' do scenario 'adds and updates venue' do diff --git a/spec/features/versions_spec.rb b/spec/features/versions_spec.rb index 7791bbe8..ec443fd0 100644 --- a/spec/features/versions_spec.rb +++ b/spec/features/versions_spec.rb @@ -5,8 +5,7 @@ require 'spec_helper' feature 'Version' do let!(:conference) { create(:conference) } let!(:cfp) { create(:cfp, program: conference.program) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, resource: conference) } let(:event_with_commercial) { create(:event, program: conference.program) } let(:event_commercial) { create(:event_commercial, commercialable: event_with_commercial, url: 'https://www.youtube.com/watch?v=M9bq_alk-sw') } diff --git a/spec/features/volunteers_spec.rb b/spec/features/volunteers_spec.rb index 50d86108..30960a73 100644 --- a/spec/features/volunteers_spec.rb +++ b/spec/features/volunteers_spec.rb @@ -4,8 +4,7 @@ require 'spec_helper' feature Conference do let!(:conference) { create(:conference) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, resource: conference) } shared_examples 'volunteer' do scenario 'adds and updates vdays', feature: true, js: true do diff --git a/spec/models/conference_spec.rb b/spec/models/conference_spec.rb index 5e082e06..81e7d406 100755 --- a/spec/models/conference_spec.rb +++ b/spec/models/conference_spec.rb @@ -285,8 +285,7 @@ describe Conference do describe '#get_top_submitter' do let!(:conference) { create(:conference) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, resource: conference) } it 'calculates correct hash with top submitters' do event = create(:event, program: subject.program) @@ -866,8 +865,7 @@ describe Conference do describe 'self#event_distribution' do let!(:conference) { create(:conference) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, role_ids: [organizer_role.id]) } + let!(:organizer) { create(:organizer, resource: conference) } it 'self#user_distribution calculates correct values with user' do result = {} @@ -1386,9 +1384,7 @@ describe Conference do # It is necessary to use bang version of let to build roles before user let!(:conference) { create(:conference) } - let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } - let!(:organizer) { create(:user, role_ids: [organizer_role.id]) } - + let!(:organizer) { create(:organizer, resource: conference) } let(:user) { create(:user) } context 'user not registered' do diff --git a/spec/models/role_spec.rb b/spec/models/role_spec.rb index 5edeb8e8..1d2c60a4 100644 --- a/spec/models/role_spec.rb +++ b/spec/models/role_spec.rb @@ -6,7 +6,7 @@ describe Role do let(:conference) { create(:conference) } let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } let!(:cfp_role) { Role.find_by(name: 'cfp', resource: conference) } - let!(:organizer) { create(:user, role_ids: organizer_role.id) } + let!(:organizer) { create(:organizer, resource: conference) } let(:user) { create(:user) } it 'get_users' do diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index cdfc4893..fc80d484 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -10,7 +10,7 @@ describe User do let(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } let(:cfp_role) { Role.find_by(name: 'cfp', resource: conference) } let(:volunteers_coordinator_role) { Role.find_by(name: 'volunteers_coordinator', resource: conference) } - let(:organizer) { create(:user, role_ids: [organizer_role.id]) } + let(:organizer) { create(:organizer, resource: conference) } let(:user) { create(:user) } let(:user_disabled) { create(:user, :disabled) } @@ -417,8 +417,7 @@ describe User do describe '#has_cached_role?' do describe 'when user has a role' do it 'returns true when the user has the role' do - user = create(:user, role_ids: organizer_role.id) - expect(user.has_cached_role?('organizer', conference)).to be true + expect(organizer.has_cached_role?('organizer', conference)).to be true end it 'returns false when the user does not have the role' do