Sha256: 3991eb80774c3ed82710242479d18ccceecd5cea1657b78ad2d6897b774bb06b

Contents?: true

Size: 1.44 KB

Versions: 2

Compression:

Stored size: 1.44 KB

Contents

require 'test_helper'

describe Merit::BaseTargetFinder do

  describe '#find' do
    describe 'rule has a model_name' do
      it "should prioritize the rule's model name" do
        rule = Merit::Rule.new
        rule.to = :itself
        rule.model_name = 'comment'
        action = Merit::Action.new(target_model: 'users', target_id: 2)
        comment = Comment.new

        Comment.stubs(:find_by_id).with(2).returns(comment)

        finder = Merit::BaseTargetFinder.new(rule, action)
        collection = finder.find
        collection.must_be :==, comment
      end
    end

    describe 'rule has no model_name' do
      it "should fall back to the action#target_model" do
        rule = Merit::Rule.new
        rule.to = :itself
        action = Merit::Action.new(target_model: 'users', target_id: 3)
        user = Comment.new(id: 3)

        User.stubs(:find_by_id).with(3).returns(user)

        finder = Merit::BaseTargetFinder.new(rule, action)
        finder.find.must_be :==, user
      end
    end

    describe 'when the targetted class is not meritable' do
      it 'should warn and return' do
        rule = Merit::Rule.new
        rule.to = :itself
        rule.model_name = 'registrations'
        action = Merit::Action.new(target_model: 'users', target_id: 220)
        comment = Comment.new

        finder = Merit::BaseTargetFinder.new(rule, action)
        Rails.logger.expects(:warn)
        finder.find.must_be_nil
      end
    end
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
merit-1.5.0 test/base_target_finder_test.rb
merit-1.4.0 test/base_target_finder_test.rb