From bfeff8d24193a63693ff5f2b322c84683f21d51c Mon Sep 17 00:00:00 2001 From: Marko Lovic Date: Thu, 27 Aug 2015 13:54:18 +0200 Subject: [PATCH] Implement custom rspec matcher appear_before --- spec/features/debates_spec.rb | 21 +++++++++------------ spec/features/moderation_spec.rb | 1 + spec/support/matchers/appear_before.rb | 6 ++++++ 3 files changed, 16 insertions(+), 12 deletions(-) create mode 100644 spec/support/matchers/appear_before.rb diff --git a/spec/features/debates_spec.rb b/spec/features/debates_spec.rb index dfafeb7db..8904199b3 100644 --- a/spec/features/debates_spec.rb +++ b/spec/features/debates_spec.rb @@ -362,19 +362,13 @@ feature 'Debates' do create(:vote, votable: @most_voted_debate) end - def expect_debate_order(order) - debates = [@most_voted_debate, @most_liked_debate, @most_recent_debate] - debate_divs = page.all("#debates .debate") - (0..2).each do |n| - expect(debate_divs[n]).to have_content(debates[order[n]].title) - end - end - scenario 'Default order is created_at' do visit debates_path expect(page).to have_select('order', selected: 'the newest') - expect_debate_order([2, 1, 0]) + #expect_debate_order([2, 1, 0]) + expect(@most_recent_debate.title).to appear_before(@most_liked_debate.title) + expect(@most_liked_debate.title).to appear_before(@most_voted_debate.title) end scenario 'Debates are ordered by most voted' do @@ -385,7 +379,8 @@ feature 'Debates' do expect(find("#debates .debate", match: :first)).to have_content(@most_voted_debate.title) # Necessary to force capybara to wait for redirect expect(current_url).to include('order=total_votes') - expect_debate_order([0, 1, 2]) + expect(@most_voted_debate.title).to appear_before(@most_liked_debate.title) + expect(@most_liked_debate.title).to appear_before(@most_recent_debate.title) end scenario 'Debates are ordered by best rated' do @@ -395,7 +390,8 @@ feature 'Debates' do expect(find("#debates .debate", match: :first)).to have_content(@most_liked_debate.title) expect(current_url).to include('order=likes') - expect_debate_order([1, 0, 2]) + expect(@most_liked_debate.title).to appear_before(@most_voted_debate.title) + expect(@most_voted_debate.title).to appear_before(@most_recent_debate.title) end scenario 'Debates are ordered by newest' do @@ -408,7 +404,8 @@ feature 'Debates' do expect(find("#debates .debate", match: :first)).to have_content(@most_recent_debate.title) expect(current_url).to include('order=created_at') - expect_debate_order([2, 1, 0]) + expect(@most_recent_debate.title).to appear_before(@most_liked_debate.title) + expect(@most_liked_debate.title).to appear_before(@most_voted_debate.title) end end end diff --git a/spec/features/moderation_spec.rb b/spec/features/moderation_spec.rb index 78df5e56f..aa49d381c 100644 --- a/spec/features/moderation_spec.rb +++ b/spec/features/moderation_spec.rb @@ -1,4 +1,5 @@ require 'rails_helper' +require 'support/matchers/appear_before' feature 'Admin' do let(:user) { create(:user) } diff --git a/spec/support/matchers/appear_before.rb b/spec/support/matchers/appear_before.rb new file mode 100644 index 000000000..bb1d65072 --- /dev/null +++ b/spec/support/matchers/appear_before.rb @@ -0,0 +1,6 @@ +RSpec::Matchers.define :appear_before do |later_content| + match do |earlier_content| + page.body.index(earlier_content) < page.body.index(later_content) + end +end +