Sha256: 845f93f5d1a92a2a9d6acdf88072f92bda0f51a8d749318e1c339e1469906782

Contents?: true

Size: 1.2 KB

Versions: 2

Compression:

Stored size: 1.2 KB

Contents

RSpec.describe Patterns::Rule do
  after(:each) do
    Object.send(:remove_const, :CustomRule) if defined?(CustomRule)
  end

  it 'requires subject as the first argument' do
    CustomRule = Class.new(Patterns::Rule)

    expect { CustomRule.new }.to raise_error ArgumentError
    expect { CustomRule.new(Object.new) }.not_to raise_error
  end

  it 'requires #satisfied? method to be defined' do
    InvalidCustomRule = Class.new(Patterns::Rule)
    CustomRule = Class.new(Patterns::Rule) do
      def satisfied?
        true
      end
    end

    expect { InvalidCustomRule.new(Object.new).satisfied? }.to raise_error NotImplementedError
    expect { CustomRule.new(Object.new).satisfied? }.not_to raise_error
  end

  describe '#satisfied?' do
    context 'when subject meets the conditions' do
      it 'returns true' do
        article = OpenStruct.new('published?' => true, 'deleted?' => false)

        ArticleIsPublishedRule = Class.new(Patterns::Rule) do
          def satisfied?
            subject.published?
          end

          def not_applicable?
            subject.deleted?
          end
        end

        expect(ArticleIsPublishedRule.new(article).satisfied?).to eq true
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rails-patterns-0.11.0 spec/patterns/rule_spec.rb
rails-patterns-0.10.0 spec/patterns/rule_spec.rb