Sha256: ba33ab921c9bdfb5f2971f6e81dc53ef89194ba0d7396e9864613a8dd6f24141

Contents?: true

Size: 1.44 KB

Versions: 12

Compression:

Stored size: 1.44 KB

Contents

# frozen_string_literal: true

require 'wcc/contentful'

require_relative './test'

module WCC::Contentful::RSpec
  include WCC::Contentful::Test::Double
  include WCC::Contentful::Test::Factory

  ##
  # Builds out a fake Contentful entry for the given content type, and then
  # stubs the Model API to return that content type for `.find` and `.find_by`
  # query methods.
  def contentful_stub(content_type, **attrs)
    const = WCC::Contentful::Model.resolve_constant(content_type.to_s)
    instance = contentful_create(content_type, **attrs)

    # mimic what's going on inside model_singleton_methods.rb
    # find, find_by, etc always return a new instance from the same raw
    allow(WCC::Contentful::Model).to receive(:find)
      .with(instance.id, any_args) do |_id, keyword_params|
        options = keyword_params && keyword_params[:options]
        contentful_create(content_type, options, raw: instance.raw, **attrs)
      end
    allow(const).to receive(:find) { |id, options| WCC::Contentful::Model.find(id, **(options || {})) }

    attrs.each do |k, v|
      allow(const).to receive(:find_by)
        .with(hash_including(k => v)) do |filter|
          filter = filter&.dup
          options = filter&.delete(:options) || {}

          contentful_create(content_type, options, raw: instance.raw, **attrs)
        end
    end

    instance
  end
end

if defined?(RSpec)
  RSpec.configure do |config|
    config.include WCC::Contentful::RSpec
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
wcc-contentful-1.0.8 lib/wcc/contentful/rspec.rb
wcc-contentful-1.0.7 lib/wcc/contentful/rspec.rb
wcc-contentful-1.0.6 lib/wcc/contentful/rspec.rb
wcc-contentful-1.0.5 lib/wcc/contentful/rspec.rb
wcc-contentful-1.0.4 lib/wcc/contentful/rspec.rb
wcc-contentful-1.0.3 lib/wcc/contentful/rspec.rb
wcc-contentful-1.0.2 lib/wcc/contentful/rspec.rb
wcc-contentful-1.0.1 lib/wcc/contentful/rspec.rb
wcc-contentful-1.0.0 lib/wcc/contentful/rspec.rb
wcc-contentful-1.0.0.pre.rc3 lib/wcc/contentful/rspec.rb
wcc-contentful-1.0.0.pre.rc2 lib/wcc/contentful/rspec.rb
wcc-contentful-1.0.0.pre.rc1 lib/wcc/contentful/rspec.rb