implements adding the proposal by admin users
This commit is contained in:
parent
2a0e1b5dea
commit
b86c03f898
8 changed files with 287 additions and 4 deletions
88
spec/controllers/admin/events_controller_spec.rb
Normal file
88
spec/controllers/admin/events_controller_spec.rb
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Admin::EventsController do
|
||||
let!(:admin) { create(:admin) }
|
||||
let(:conference) { create(:conference) }
|
||||
let(:event_type) { create :event_type }
|
||||
let(:event) { create(:event, program: conference.program) }
|
||||
|
||||
context 'admin is signed in' do
|
||||
before { sign_in admin }
|
||||
|
||||
describe 'GET #index' do
|
||||
before { get :index, conference_id: conference.short_title }
|
||||
|
||||
it 'renders index template' do
|
||||
expect(response).to render_template('index')
|
||||
end
|
||||
end
|
||||
|
||||
describe 'GET #edit' do
|
||||
before { get :edit, conference_id: conference.short_title, id: event.id }
|
||||
|
||||
it 'renders edit template' do
|
||||
expect(response).to render_template('edit')
|
||||
end
|
||||
|
||||
it 'assigns event variable' do
|
||||
expect(assigns(:event)).to be_instance_of(Event)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'GET #new' do
|
||||
before { get :new, conference_id: conference.short_title }
|
||||
|
||||
it 'renders new template' do
|
||||
expect(response).to render_template('new')
|
||||
end
|
||||
|
||||
it 'assigns event variable' do
|
||||
expect(assigns(:event)).to be_instance_of(Event)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST #create' do
|
||||
context 'saves successfuly' do
|
||||
before do
|
||||
post :create, event: attributes_for(:event, event_type_id: event_type.id).merge!(submitter_id: admin.id, speaker_id: admin.id), conference_id: conference.short_title
|
||||
end
|
||||
|
||||
it 'redirects to admin events index path' do
|
||||
expect(response).to redirect_to admin_conference_program_events_path(conference_id: conference.short_title)
|
||||
end
|
||||
|
||||
it 'shows success message in flash notice' do
|
||||
expect(flash[:notice]).to match('Event was successfully submitted.')
|
||||
end
|
||||
|
||||
it 'creates new event' do
|
||||
expect(Event.find(event.id)).to be_instance_of(Event)
|
||||
end
|
||||
end
|
||||
|
||||
context 'save fails' do
|
||||
before do
|
||||
allow_any_instance_of(Event).to receive(:save).and_return(false)
|
||||
post :create, event: attributes_for(:event), conference_id: conference.short_title
|
||||
end
|
||||
|
||||
it 'renders new template' do
|
||||
expect(response).to render_template('new')
|
||||
end
|
||||
|
||||
it 'shows error in flash message' do
|
||||
expect(flash[:error]).to match("Could not create event: #{event.errors.full_messages.join(', ')}")
|
||||
end
|
||||
|
||||
it 'does not create new event' do
|
||||
allow_any_instance_of(Event).to receive(:save).and_return(false)
|
||||
expect do
|
||||
post :create, event: attributes_for(:event, event_type_id: event_type.id),
|
||||
conference_id: conference.short_title,
|
||||
user: attributes_for(:user)
|
||||
end.not_to change{ Event.count }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -96,6 +96,43 @@ describe Event do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'submitter_and_speaker_present' do
|
||||
context 'is invalid with owner validation enabled' do
|
||||
before :each do
|
||||
@new_event = build(:event, program: conference.program)
|
||||
@new_event.validate_owners = true
|
||||
end
|
||||
it 'when submitter id is blank' do
|
||||
expect(@new_event).to be_invalid
|
||||
expect(@new_event.errors[:submitter_id]).to eq ["can't be blank!"]
|
||||
end
|
||||
it 'when speaker id is blank' do
|
||||
expect(@new_event).to be_invalid
|
||||
expect(@new_event.errors[:speaker_id]).to eq ["can't be blank!"]
|
||||
end
|
||||
it 'when submitter is is provided but the user does not exist' do
|
||||
@new_event.submitter_id = 'deadbeef'
|
||||
expect(@new_event).to be_invalid
|
||||
expect(@new_event.errors[:submitter_id]).to eq ["user should exist!"]
|
||||
end
|
||||
it 'when speaker id is provided but the user does not exist' do
|
||||
@new_event.speaker_id = 'deadbeef'
|
||||
expect(@new_event).to be_invalid
|
||||
expect(@new_event.errors[:speaker_id]).to eq ["user should exist!"]
|
||||
end
|
||||
end
|
||||
context 'is valid with owner validation enabled' do
|
||||
it 'when submitter and speaker ids are not blank and users with these ids exist' do
|
||||
new_event = build(:event, program: conference.program)
|
||||
new_user = create(:user)
|
||||
new_event.submitter_id = new_user.id
|
||||
new_event.speaker_id = new_user.id
|
||||
new_event.validate_owners = true
|
||||
expect(new_event).to be_valid
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'scope ' do
|
||||
|
|
|
|||
|
|
@ -38,4 +38,19 @@ describe 'admin/events/index' do
|
|||
expect(rendered).to have_selector('table tr:nth-of-type(2) td:nth-of-type(2)', text: 'event2')
|
||||
expect(rendered).to have_selector('table tr:nth-of-type(2) td:nth-of-type(5)', text: 'German')
|
||||
end
|
||||
|
||||
it 'has the Add Event link with a new event path' do
|
||||
assign(:conference, conference)
|
||||
assign(:program, conference.program)
|
||||
program.languages = 'en,de'
|
||||
assign(:events, [ event1, event2 ])
|
||||
assign(:event_types, [ create(:event_type, program: conference.program), create(:event_type, program: conference.program) ])
|
||||
assign(:tracks, [ create(:track, program: conference.program), create(:track, program: conference.program) ])
|
||||
assign(:difficulty_levels, [ create(:difficulty_level, program: conference.program), create(:difficulty_level, program: conference.program) ])
|
||||
|
||||
render
|
||||
|
||||
expect(rendered).to have_link('Add Event', href: new_admin_conference_program_event_path(conference.short_title))
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
15
spec/views/admin/events/new.html.haml_spec.rb
Normal file
15
spec/views/admin/events/new.html.haml_spec.rb
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe 'admin/conferences/events/new' do
|
||||
it 'renders the new event template' do
|
||||
@conference = create(:conference)
|
||||
@user = create(:user)
|
||||
@program = @conference.program
|
||||
@event = build(:event, program: @conference.program)
|
||||
@event_type = create(:event_type, program: @program)
|
||||
@url = admin_conference_program_events_path(@conference.short_title, @event)
|
||||
@users = User.all
|
||||
render template: 'admin/events/_form.html.haml'
|
||||
expect(rendered).to include('New Event')
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue