mirror of
https://github.com/openSUSE/osem.git
synced 2026-08-13 19:54:02 +00:00
User can see the total amount that he paid for the tickets and total amount spent by him on each ticket
458 lines
18 KiB
Ruby
458 lines
18 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe ConferenceRegistrationsController, type: :controller do
|
|
let(:conference) { create(:conference, title: 'My Conference', short_title: 'myconf') }
|
|
let(:user) { create(:user) }
|
|
let(:not_registered_user) { create(:user) }
|
|
let(:registered_user) { create(:user) }
|
|
let!(:registration) { create(:registration, conference: conference, user: registered_user, created_at: 1.day.ago) }
|
|
|
|
shared_examples 'access #new action' do |user, ichain, path, message|
|
|
before :each do
|
|
sign_in send(user) if user
|
|
stub_const('ENV', ENV.to_hash.merge('OSEM_ICHAIN_ENABLED' => ichain))
|
|
get :new, conference_id: conference.short_title
|
|
end
|
|
|
|
it 'redirects' do
|
|
expect(response).to redirect_to path
|
|
end
|
|
|
|
it 'shows flash alert' do
|
|
expect(flash[:alert]).to eq message
|
|
end
|
|
end
|
|
|
|
shared_examples 'can access #new action' do |user, ichain|
|
|
before :each do
|
|
sign_in send(user) if user
|
|
stub_const('ENV', ENV.to_hash.merge('OSEM_ICHAIN_ENABLED' => ichain))
|
|
get :new, conference_id: conference.short_title
|
|
end
|
|
|
|
it 'user variable exists' do
|
|
expect(assigns(:user)).not_to be_nil
|
|
end
|
|
|
|
it 'renders the new template' do
|
|
expect(response).to render_template('new')
|
|
end
|
|
end
|
|
|
|
context 'user is signed in' do
|
|
before :each do
|
|
sign_in user
|
|
end
|
|
|
|
describe 'GET #new' do
|
|
let(:not_registered_confirmed_speaker) { create(:user) }
|
|
let(:registered_confirmed_speaker) { create(:user) }
|
|
let!(:speaker_registration) { create(:registration, conference: conference, user: registered_confirmed_speaker, created_at: 1.day.ago) }
|
|
let!(:confirmed_event) { create(:event, program: conference.program, speakers: [not_registered_confirmed_speaker, registered_confirmed_speaker], state: 'confirmed') }
|
|
|
|
context 'registration period open' do
|
|
before :each do
|
|
create(:registration_period, conference: conference, start_date: 3.days.ago, end_date: 1.day.from_now)
|
|
end
|
|
|
|
context 'registration limit not exceeded' do
|
|
before :each do
|
|
conference.registration_limit = 0
|
|
conference.save!
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED true, user registered' do
|
|
it_behaves_like 'access #new action', :registered_user, 'true', '/conferences/myconf/register/edit', nil
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED true, user not registered' do
|
|
it_behaves_like 'can access #new action', :not_registered_user, 'true'
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED true, user registered, confirmed speaker' do
|
|
it_behaves_like 'access #new action', :registered_confirmed_speaker, 'true', '/conferences/myconf/register/edit', nil
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED true, user not registered, confirmed speaker' do
|
|
it_behaves_like 'can access #new action', :not_registered_confirmed_speaker, 'true'
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED false, user registered' do
|
|
it_behaves_like 'access #new action', :registered_user, 'false', '/conferences/myconf/register/edit', nil
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED false, user not registered' do
|
|
it_behaves_like 'can access #new action', :not_registered_user, 'false'
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED false, user registered, confirmed speaker' do
|
|
it_behaves_like 'access #new action', :registered_confirmed_speaker, 'false', '/conferences/myconf/register/edit', nil
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED false, user not registered, confirmed speaker' do
|
|
it_behaves_like 'can access #new action', :not_registered_confirmed_speaker, 'false'
|
|
end
|
|
end
|
|
|
|
context 'registration limit exceeded' do
|
|
before :each do
|
|
conference.registration_limit = 1
|
|
conference.save!
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED true, user registered' do
|
|
it_behaves_like 'access #new action', :registered_user, 'true', '/conferences/myconf/register/edit', nil
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED true, user not registered' do
|
|
it_behaves_like 'access #new action', :not_registered_user, 'true', '/', 'Sorry, you can not register for My Conference. Registration limit exceeded or the registration is not open.'
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED true, user registered, confirmed speaker' do
|
|
it_behaves_like 'access #new action', :registered_confirmed_speaker, 'true', '/conferences/myconf/register/edit', nil
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED true, user not registered, confirmed speaker' do
|
|
it_behaves_like 'can access #new action', :not_registered_confirmed_speaker, 'true'
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED false, user registered' do
|
|
it_behaves_like 'access #new action', :registered_user, 'false', '/conferences/myconf/register/edit', nil
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED false, user not registered' do
|
|
it_behaves_like 'access #new action', :not_registered_user, 'false', '/', 'Sorry, you can not register for My Conference. Registration limit exceeded or the registration is not open.'
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED false, user registered, confirmed speaker' do
|
|
it_behaves_like 'access #new action', :registered_confirmed_speaker, 'false', '/conferences/myconf/register/edit', nil
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED false, user not registered, confirmed speaker' do
|
|
it_behaves_like 'can access #new action', :not_registered_confirmed_speaker, 'false'
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'registration period not open' do
|
|
before :each do
|
|
create(:registration_period, conference: conference, start_date: 3.days.ago, end_date: 1.day.ago)
|
|
end
|
|
|
|
context 'registration limit not exceeded' do
|
|
before :each do
|
|
conference.registration_limit = 0
|
|
conference.save!
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED true, user registered' do
|
|
it_behaves_like 'access #new action', :registered_user, 'true', '/conferences/myconf/register/edit', nil
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED true, user not registered' do
|
|
it_behaves_like 'access #new action', :not_registered_user, 'true', '/', 'Sorry, you can not register for My Conference. Registration limit exceeded or the registration is not open.'
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED true, user registered, confirmed speaker' do
|
|
it_behaves_like 'access #new action', :registered_confirmed_speaker, 'true', '/conferences/myconf/register/edit', nil
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED true, user not registered, confirmed speaker' do
|
|
it_behaves_like 'can access #new action', :not_registered_confirmed_speaker, 'true'
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED false, user registered' do
|
|
it_behaves_like 'access #new action', :registered_user, 'false', '/conferences/myconf/register/edit', nil
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED false, user not registered' do
|
|
it_behaves_like 'access #new action', :not_registered_user, 'false', '/', 'Sorry, you can not register for My Conference. Registration limit exceeded or the registration is not open.'
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED false, user registered, confirmed speaker' do
|
|
it_behaves_like 'access #new action', :registered_confirmed_speaker, 'false', '/conferences/myconf/register/edit', nil
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED false, user not registered, confirmed speaker' do
|
|
it_behaves_like 'can access #new action', :not_registered_confirmed_speaker, 'false'
|
|
end
|
|
end
|
|
|
|
context 'registration limit exceeded' do
|
|
before do
|
|
conference.registration_limit = 1
|
|
conference.save!
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED true, user registered' do
|
|
it_behaves_like 'access #new action', :registered_user, 'true', '/conferences/myconf/register/edit', nil
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED true, user not registered' do
|
|
it_behaves_like 'access #new action', :not_registered_user, 'true', '/', 'Sorry, you can not register for My Conference. Registration limit exceeded or the registration is not open.'
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED true, user registered, confirmed speaker' do
|
|
it_behaves_like 'access #new action', :registered_confirmed_speaker, 'true', '/conferences/myconf/register/edit', nil
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED true, user not registered, confirmed speaker' do
|
|
it_behaves_like 'can access #new action', :not_registered_confirmed_speaker, 'true'
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED false, user registered' do
|
|
it_behaves_like 'access #new action', :registered_user, 'false', '/conferences/myconf/register/edit', nil
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED false, user not registered' do
|
|
it_behaves_like 'access #new action', :not_registered_user, 'false', '/', 'Sorry, you can not register for My Conference. Registration limit exceeded or the registration is not open.'
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED false, user registered, confirmed speaker' do
|
|
it_behaves_like 'access #new action', :registered_confirmed_speaker, 'false', '/conferences/myconf/register/edit', nil
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED false, user not registered, confirmed speaker' do
|
|
it_behaves_like 'can access #new action', :not_registered_confirmed_speaker, 'false'
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'GET #show' do
|
|
before do
|
|
@registration = create(:registration, conference: conference, user: user)
|
|
@event_with_registration = create(:event, program: conference.program, require_registration: true, max_attendees: 5, state: 'confirmed')
|
|
@event_without_registration = create(:event, program: conference.program, require_registration: true, max_attendees: 5, state: 'confirmed')
|
|
@registration.events << @event_with_registration
|
|
end
|
|
|
|
context 'successful request' do
|
|
before do
|
|
get :show, conference_id: conference.short_title
|
|
end
|
|
|
|
it 'assigns variables' do
|
|
expect(assigns(:conference)).to eq conference
|
|
expect(assigns(:registration)).to eq @registration
|
|
end
|
|
|
|
it 'renders the show template' do
|
|
expect(response).to render_template('show')
|
|
end
|
|
end
|
|
|
|
context 'user has purchased a ticket' do
|
|
before do
|
|
@ticket = create(:ticket, conference: conference)
|
|
@purchased_ticket = create(:ticket_purchase, conference: conference,
|
|
user: user,
|
|
ticket: @ticket)
|
|
get :show, conference_id: conference.short_title
|
|
end
|
|
|
|
it 'does not assign price of purchased tickets to total_price and purchased tickets to tickets without payment' do
|
|
expect(assigns(:total_price)).to eq 0
|
|
end
|
|
end
|
|
|
|
context 'user has not purchased any ticket' do
|
|
before do
|
|
get :show, conference_id: conference.short_title
|
|
end
|
|
|
|
it 'assigns 0 dollars to total_price and empty array to tickets variables' do
|
|
expect(assigns(:total_price)).to eq 0
|
|
expect(assigns(:tickets)).to match_array []
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'GET #edit' do
|
|
before do
|
|
@registration = create(:registration, conference: conference, user: user)
|
|
get :edit, conference_id: conference.short_title
|
|
end
|
|
|
|
it 'assigns conference and registration variable' do
|
|
expect(assigns(:conference)).to eq conference
|
|
expect(assigns(:registration)).to eq @registration
|
|
end
|
|
|
|
it 'renders the edit template' do
|
|
expect(response).to render_template('edit')
|
|
end
|
|
end
|
|
|
|
describe 'PATCH #update' do
|
|
before do
|
|
@registration = create(:registration,
|
|
conference: conference,
|
|
user: user,
|
|
arrival: Date.new(2014, 04, 25))
|
|
end
|
|
|
|
context 'updates successfully' do
|
|
before do
|
|
patch :update, registration: attributes_for(:registration, arrival: Date.new(2014, 04, 29)),
|
|
conference_id: conference.short_title
|
|
end
|
|
|
|
it 'redirects to registration show path' do
|
|
expect(response).to redirect_to conference_conference_registration_path(conference.short_title)
|
|
end
|
|
|
|
it 'shows success message in flash notice' do
|
|
expect(flash[:notice]).to match('Registration was successfully updated.')
|
|
end
|
|
|
|
it 'updates the registration' do
|
|
@registration.reload
|
|
expect(@registration.arrival).to eq Date.new(2014, 04, 29)
|
|
end
|
|
end
|
|
|
|
context 'update fails' do
|
|
before do
|
|
allow_any_instance_of(Registration).to receive(:update_attributes).and_return(false)
|
|
patch :update, registration: attributes_for(:registration, arrival: Date.new(2014, 04, 27)),
|
|
conference_id: conference.short_title
|
|
end
|
|
|
|
it 'renders edit template' do
|
|
expect(response).to render_template('edit')
|
|
end
|
|
|
|
it 'shows error in flash message' do
|
|
expect(flash[:error]).to match "Could not update your registration for #{conference.title}: #{@registration.errors.full_messages.join('. ')}."
|
|
end
|
|
|
|
it 'does not update the registration' do
|
|
@registration.reload
|
|
expect(@registration.arrival).to eq Date.new(2014, 04, 25)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'DELETE #destroy' do
|
|
before do
|
|
@registration = create(:registration, conference: conference, user: user)
|
|
end
|
|
|
|
context 'deletes successfully' do
|
|
before(:each, run: true) do
|
|
delete :destroy, conference_id: conference.short_title
|
|
end
|
|
|
|
it 'redirects to root path', run: true do
|
|
expect(response).to redirect_to root_path
|
|
end
|
|
|
|
it 'shows success message in flash notice', run: true do
|
|
expect(flash[:notice]).to match("You are not registered for #{conference.title} anymore!")
|
|
end
|
|
|
|
it 'deletes the registration' do
|
|
expect do
|
|
delete :destroy, conference_id: conference.short_title
|
|
end.to change{ Registration.count }.from(2).to(1)
|
|
end
|
|
end
|
|
|
|
context 'delete fails' do
|
|
before do
|
|
allow_any_instance_of(Registration).to receive(:destroy).and_return(false)
|
|
delete :destroy, conference_id: conference.short_title
|
|
end
|
|
|
|
it 'redirects to registration show path' do
|
|
expect(response).to redirect_to conference_conference_registration_path(conference.short_title)
|
|
end
|
|
|
|
it 'shows error in flash message' do
|
|
expect(flash[:error]).to match "Could not delete your registration for #{conference.title}: #{@registration.errors.full_messages.join('. ')}."
|
|
end
|
|
|
|
it 'does not delete the registration' do
|
|
expect(assigns(:registration)).to eq @registration
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'user is not signed in' do
|
|
describe 'GET #new' do
|
|
context 'registration period open' do
|
|
before :each do
|
|
create(:registration_period, conference: conference, start_date: 3.days.ago, end_date: 1.day.from_now)
|
|
end
|
|
|
|
context 'registration limit not exceeded' do
|
|
before :each do
|
|
conference.registration_limit = 0
|
|
conference.save!
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED is true' do
|
|
it_behaves_like 'access #new action', nil, 'true', '/', 'You are not authorized to access this page. Maybe you need to sign in?'
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED is false' do
|
|
it_behaves_like 'can access #new action', nil, 'false'
|
|
end
|
|
end
|
|
|
|
context 'registration limit exceeded' do
|
|
before :each do
|
|
conference.registration_limit = 1
|
|
conference.save!
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED is true' do
|
|
it_behaves_like 'access #new action', nil, 'true', '/', 'Sorry, you can not register for My Conference. Registration limit exceeded or the registration is not open.'
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED is false' do
|
|
it_behaves_like 'access #new action', nil, 'false', '/', 'Sorry, you can not register for My Conference. Registration limit exceeded or the registration is not open.'
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'registration period not open' do
|
|
before :each do
|
|
create(:registration_period, conference: conference, start_date: 3.days.ago, end_date: 1.day.ago)
|
|
end
|
|
|
|
context 'registration limit not exceeded' do
|
|
before :each do
|
|
conference.registration_limit = 0
|
|
conference.save!
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED is true' do
|
|
it_behaves_like 'access #new action', nil, 'true', '/', 'Sorry, you can not register for My Conference. Registration limit exceeded or the registration is not open.'
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED is false' do
|
|
it_behaves_like 'access #new action', nil, 'false', '/', 'Sorry, you can not register for My Conference. Registration limit exceeded or the registration is not open.'
|
|
end
|
|
end
|
|
|
|
context 'registration limit exceeded' do
|
|
before :each do
|
|
conference.registration_limit = 1
|
|
conference.save!
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED is true' do
|
|
it_behaves_like 'access #new action', nil, 'true', '/', 'Sorry, you can not register for My Conference. Registration limit exceeded or the registration is not open.'
|
|
end
|
|
|
|
context 'OSEM_ICHAIN_ENABLED is false' do
|
|
it_behaves_like 'access #new action', nil, 'false', '/', 'Sorry, you can not register for My Conference. Registration limit exceeded or the registration is not open.'
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|