Skip to content

Instantly share code, notes, and snippets.

@minhquang4334
Last active October 29, 2020 05:18
Show Gist options
  • Save minhquang4334/a61ebfc44d4f65658ae3bca94cce74bf to your computer and use it in GitHub Desktop.
Save minhquang4334/a61ebfc44d4f65658ae3bca94cce74bf to your computer and use it in GitHub Desktop.
Everyday Rails - 第8章: Rspec Code Refactoring
require 'rails_helper'
RSpec.describe "Events", js: true, type: :system do
scenario "user open event details page /events/:id" do
event = create(:event)
visit event_path(event)
expect(page).to have_selector("h1", text: event.name)
end
context "when user login in to app" do
include_context "when login required"
scenario "user create new event /events/new" do
# login_as(create(:user))
go_to_create_event_page
start_at = Time.zone.now
end_at = start_at + 1.day
fill_in_event_info("Classi Fan Meeting", "新宿", "Classi Fan Meeting 2020", start_at, end_at)
create_event
end
scenario "user delete event /events/:id" do
event = create(:event, owner: user)
visit event_path(event)
delete_event(event)
end
end
def fill_in_event_info(name, place, content, start_at, end_at)
fill_in "名前", with: name
fill_in "場所", with: place
fill_in "内容", with: content
fill_in_start_at(start_at)
fill_in_end_at(end_at)
end
def fill_in_start_at(start_at)
start_at_field = "event_start_at"
select start_at.strftime("%Y"), from: "#{start_at_field}_1i" # 年
select I18n.l(start_at, format: '%B'), from: "#{start_at_field}_2i" # 月
select start_at.strftime("%-d"), from: "#{start_at_field}_3i" # 日
select start_at.strftime("%H"), from: "#{start_at_field}_4i" # 時
select start_at.strftime("%M"), from: "#{start_at_field}_5i" # 分
end
def fill_in_end_at(end_at)
end_at_field = "event_end_at"
select end_at.strftime("%Y"), from: "#{end_at_field}_1i" # 年
select I18n.l(end_at, format: '%B'), from: "#{end_at_field}_2i" # 月
select end_at.strftime("%-d"), from: "#{end_at_field}_3i" # 日
select end_at.strftime("%H"), from: "#{end_at_field}_4i" # 時
select end_at.strftime("%M"), from: "#{end_at_field}_5i" # 分
end
def create_event()
click_button "登録する"
expect(page).to have_selector("div.alert", text: "作成しました")
end
def go_to_create_event_page
visit new_event_path
expect(page).to have_selector("h1", text: "イベント作成")
end
def delete_event(event)
expect {
accept_confirm do
click_on "イベントを削除する"
end
aggregate_failures do
expect(current_path).to eq root_path
expect(page).to have_selector("div.alert", text: "削除しました")
expect(page).to_not have_selector("h5", text: event.name)
end
}.to change{Event.count}.by(-1)
end
end
require 'rails_helper'
RSpec.describe "Welcomes", type: :system do
scenario "open wellcome page can view title" do
visit "/"
expect(page).to have_selector("h1", text: "イベント一覧")
end
scenario "open wellcome page can view only event in future" do
visit root_path
future_event = create(:event, start_at: Time.zone.now + 3.day)
past_event = create(:event, start_at: Time.zone.now + 1.day)
Event.search_index.refresh
travel_to Time.zone.now + 2.day do
visit root_path
aggregate_failures do
check_event_exist_on_page(future_event)
check_event_not_exist_on_page(past_event)
end
end
end
scenario "can view event with search keyword and from now" do
visit root_path
search_keyword = "Classi"
event_with_search_keyword = create(:event, start_at: Time.zone.now + 3.day, name: "123_Classi_123")
event_without_search_keyword = create(:event, start_at: Time.zone.now + 3.day, name: "shinjuku eki")
event_past_with_search_keyword = create(:event, start_at: Time.zone.now + 1.day, name: "shinjuku eki")
Event.search_index.refresh
travel_to Time.zone.now + 2.day do
visit root_path
fill_in "event_search_form[keyword]", with: search_keyword
click_button "検索"
aggregate_failures do
check_event_exist_on_page(event_with_search_keyword)
check_event_not_exist_on_page(event_without_search_keyword)
check_event_not_exist_on_page(event_past_with_search_keyword)
end
end
end
scenario "select time and view event after selected time" do
visit root_path
future_event = create(:event, start_at: Time.zone.now + 3.day)
past_event = create(:event, start_at: Time.zone.now - 1.day)
long_past_event = create(:event, start_at: Time.zone.now - 3.day)
Event.search_index.refresh
visit root_path
fill_in "event_search_form[start_at]", with: Time.zone.now - 2.day
click_button "検索"
aggregate_failures do
check_event_exist_on_page(future_event)
check_event_exist_on_page(past_event)
check_event_not_exist_on_page(long_past_event)
end
end
def check_event_exist_on_page(event)
expect(page).to have_selector("h5", text: event.name)
end
def check_event_not_exist_on_page(event)
expect(page).to_not have_selector("h5", text: event.name)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment