require 'rails_helper' RSpec.feature "Contests", type: :feature do let!(:user) { create(:user) } before do login(user) end context "index" do let!(:first_contest) { create(:contest, user: user) } let!(:second_contest) { create(:contest, user: user) } it "should list existing contests and offer to open them" do visit contests_path expect(page).to have_content(I18n.t("contests.index.title", username: user.username)) expect(page).to have_content(first_contest.name) expect(page).to have_content(second_contest.name) find(".stretched-link[href=\"/contests/#{first_contest.friendly_id}\"]").click expect(page).to have_current_path("/contests/#{first_contest.friendly_id}") end it "should offer to create a new contest" do visit contests_path click_link I18n.t("contests.index.new_contest") expect(page).to have_current_path("/contests/new") end end context "new" do it "should prevent creating contests without a name" do visit new_contest_path click_button I18n.t("helpers.buttons.create") expect(page).to have_content(I18n.t("activerecord.errors.models.contest.attributes.name.blank")) end it "should allow creating new contests with valid parameters" do visit new_contest_path fill_in I18n.t("activerecord.attributes.contest.name"), with: "Contest name" click_button I18n.t("helpers.buttons.create") expect(page).to have_current_path(contest_path(Contest.find_by(name: "Contest name"))) end end context "edit" do let!(:contest) { create(:contest, user: user) } it "should prevent editing contests without a name" do visit edit_contest_path(contest) fill_in I18n.t("activerecord.attributes.contest.name"), with: "" click_button I18n.t("helpers.buttons.save") expect(page).to have_content(I18n.t("activerecord.errors.models.contest.attributes.name.blank")) end it "should allow editing contests with valid parameters" do visit edit_contest_path(contest) fill_in I18n.t("activerecord.attributes.contest.name"), with: "Contest name" click_button I18n.t("helpers.buttons.save") expect(page).to have_current_path(contest_path(contest)) end end end