Create a factory for organizer

Refactor organizer user creation in tests

Fixes https://github.com/openSUSE/osem/issues/2398
This commit is contained in:
cyrille 2019-03-13 10:31:42 +01:00
parent 0197ed3c46
commit 35ec178beb
31 changed files with 48 additions and 68 deletions

View file

@ -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) }

View file

@ -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) }

View file

@ -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

View file

@ -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

View file

@ -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).

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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 { '<div id="divInjectedElement"></div>' }
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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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',

View file

@ -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

View file

@ -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"

View file

@ -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

View file

@ -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: '') }

View file

@ -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 }

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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') }

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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