Last active
October 29, 2020 05:18
-
-
Save minhquang4334/a61ebfc44d4f65658ae3bca94cce74bf to your computer and use it in GitHub Desktop.
Everyday Rails - 第8章: Rspec Code Refactoring
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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