spec/unit/rule/check_spec.rb in dry-logic-0.1.3 vs spec/unit/rule/check_spec.rb in dry-logic-0.1.4

- old
+ new

@@ -1,18 +1,18 @@ RSpec.describe Rule::Check do - subject(:rule) do - Rule::Check::Unary.new(:name, other.(input).curry(predicate), [:name]) - end - include_context 'predicates' let(:other) do Rule::Value.new(:name, none?).or(Rule::Value.new(:name, filled?)) end describe '#call' do - context 'when then given predicate passed' do + subject(:rule) do + Rule::Check::Unary.new(:name, other.(input).curry(predicate), [:name]) + end + + context 'when the given predicate passed' do let(:input) { 'Jane' } let(:predicate) { :filled? } it 'returns a success' do expect(rule.('Jane')).to be_success @@ -24,8 +24,33 @@ let(:predicate) { :filled? } it 'returns a failure' do expect(rule.(nil)).to be_failure end + end + end + + describe '#call with a nested result' do + subject(:rule) do + Rule::Check::Binary.new(:address, result, [:user, { user: :address }]) + end + + let(:other) { Rule::Value.new(:user, hash?) } + let(:result) { other.(input).curry(:hash?) } + let(:input) { { address: 'Earth' } } + + it 'evaluates the input' do + expect(rule.(user: result).to_ary).to eql([ + :input, [ + :address, { address: 'Earth' }, + [ + [:check, [ + :address, [ + :input, [:user, { address: 'Earth' }, [ + [:val, [:user, [:predicate, [:hash?, []]]]]]]] + ]] + ] + ] + ]) end end end