diff options
Diffstat (limited to 'spec/support')
| -rw-r--r-- | spec/support/integration_spec_helper.rb | 34 | 
1 files changed, 24 insertions, 10 deletions
| diff --git a/spec/support/integration_spec_helper.rb b/spec/support/integration_spec_helper.rb index 1bf211fe1..36306559d 100644 --- a/spec/support/integration_spec_helper.rb +++ b/spec/support/integration_spec_helper.rb @@ -1,19 +1,20 @@  module IntegrationSpecHelper -  def paginate_collection klass, decorator, page=1 -    coll = klass.page(page) +  def paginate_collection klass, decorator, page=1, context={} +    collection = klass.page(page)      if decorator -      coll = ModelDecorator.decorate( coll, with: decorator ) +      collection = ModelDecorator.decorate(collection, with: decorator, context: context)      end -    coll +    collection    end    def build_paginated_collection factory, decorator, opts={} +    context = opts.delete(:context) || {}      count = opts.delete(:count) || 2      page = opts.delete(:page) || 1      klass = nil -    count.times { klass ||= create(factory, opts).class } -    paginate_collection klass, decorator, page +    count.times { klass = create(factory, opts).class } +    paginate_collection klass, decorator, page, context    end    module Methods @@ -34,20 +35,33 @@ RSpec.configure do |config|    config.include IntegrationSpecHelper, type: :view  end -RSpec::Matchers.define :have_link_for_each_item do |collection, name, href| +RSpec::Matchers.define :have_link_for_each_item do |collection, name, opts| +  opts = {href: opts} unless opts.is_a? Hash +  href = opts[:href] +  method = opts[:method] +  method_selector = method.present? ? "[data-method='#{method.downcase}']": ""    match do |actual|      collection.each do |item| -      expect(rendered).to have_selector("tr.#{TableBuilderHelper.item_row_class_name(collection)}-#{item.id} .actions a[href='#{href.call(item)}']", count: 1) +      @selector = "tr.#{TableBuilderHelper.item_row_class_name(collection)}-#{item.id} .actions a[href='#{href.call(item)}']#{method_selector}" +      expect(rendered).to have_selector(@selector, count: 1)      end    end    description { "have #{name} link for each item" } +  failure_message do +    "expected view to have #{name} link for each item, failed with selector: \"#{@selector}\"" +  end  end  RSpec::Matchers.define :have_the_right_number_of_links do |collection, count| -  match do |actual| +  match do      collection.each do |item| -      expect(rendered).to have_selector("tr.#{TableBuilderHelper.item_row_class_name(collection)}-#{item.id} .actions a", count: count) +      @selector = "tr.#{TableBuilderHelper.item_row_class_name(collection)}-#{item.id} .actions a" +      expect(rendered).to have_selector(@selector, count: count)      end    end    description { "have #{count} links for each item" } +  failure_message do +    actual = Capybara::Node::Simple.new(rendered).all(@selector).count +    "expected #{count} links for each item, got #{actual} for \"#{@selector}\"" +  end  end | 
