describe 'GET #new' do
context 'my kurasu' do
subject { -> { get new_kurasu_event_path(kurasu) } }
it_behaves_like :response_status_check, 200
end
context 'not my kurasu' do
subject { -> { get new_kurasu_event_path(not_mine.kurasu) } }
it_behaves_like :response_status_check, 302
end
end
describe 'POST #create' do
before { @attrs = object.attributes; object.destroy }
subject { -> { post kurasu_events_path(kurasu), params: {event: @attrs}} }
context '正しいパラメータに対して' do
it_behaves_like :response_status_check, 302
it_behaves_like :increment_object_by_create, Event
it_behaves_like :redirect_to
it_behaves_like :flash_notice_message, 'イベントを登録しました.'
end
context '不正なパラメータに対して' do
before { @attrs['name'] = nil }
it_behaves_like :response_status_check, 200
it_behaves_like :not_increment_object_by_create, Event
it_behaves_like :flash_alert_message, 'イベントが登録できません.'
end
end
def new
@kurasus = current_teacher.kurasus.order_name
redirect_to kurasus_path and return if @kurasu.nil?
max_so = @kurasu.events.date_value_is(Date.today).maximum(:sort_order)
@event = @kurasu.events.build(name: 'イベント名', date: Date.today, sort_order: max_so ? max_so + 1 : 1)
end
def create
@event = Event.new(event_params)
if @event.save
redirect_to kurasu_events_path(@kurasu, edit_mode: true), notice: notice_message(Event)
else
flash.now[:alert] = alert_message(Event)
render action: :new
end
end
(中略)
def event_params
params.require(:event).permit(:kurasu_id, :name, :date, :sort_order)
end
private :event_params
- content_for :title do
- @title = "#{t '.title'}: #{@kurasu.name}"
= render partial: 'form', locals: {event: @event, kurasu: @kurasu}
= form_with model: [@kurasu, event], local: true do |f|
%table
%tr
%th= f.label :name
%td= f.text_field :name, autofocus: true
%tr
%th= f.label :date
%td= f.text_field :date
%tr
%th= f.label :sort_order
%td= f.text_field :sort_order
%tr
%td{colspan: 2}
= f.submit
GET #new
my kurasu
behaves like response_status_check
response should be 200
not my kurasu
behaves like response_status_check
response should be 302
POST #create
正しいパラメータに対して
behaves like response_status_check
response should be 302
behaves like increment_object_by_create
should change `Event.count` by 1
behaves like redirect_to
should redirect to "/kurasus/1902/events?edit_mode=true"
behaves like flash_notice_message
should eq "イベントを登録しました."
不正なパラメータに対して
behaves like response_status_check
response should be 200
behaves like not_increment_object_by_create
should not change `Event.count`
behaves like flash_alert_message
should eq "イベントが登録できません."
長くなったので今日はここまで