implements adding the proposal by admin users

This commit is contained in:
Eugene Dubinin 2017-01-19 17:05:25 +02:00
parent 2a0e1b5dea
commit b86c03f898
8 changed files with 287 additions and 4 deletions

View 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

View file

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

View file

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

View 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