spec/woyo/world/action_spec.rb in woyo-world-0.0.8 vs spec/woyo/world/action_spec.rb in woyo-world-0.0.9
- old
+ new
@@ -3,36 +3,36 @@
describe Woyo::Action do
let( :action ) { Woyo::Action.new :test }
- context 'has exclusions' do
+ # context 'has exclusions' do
- context ':result' do
+ # context ':result' do
- it 'exists' do
- expect(action.exclusions.names).to include :result
- end
+ # it 'exists' do
+ # expect(action.exclusions.names).to include :result
+ # end
- it 'has no members' do
- expect(action.result.members).to be_empty
- end
+ # it 'has no members' do
+ # expect(action.result.members).to be_empty
+ # end
- end
+ # end
- end
+ # end
context "execution may be defined" do
it "as a block" do
action.execution { :answer }
expect(action.execution).to be_instance_of Proc
end
end
- context "may be executed" do
+ context "executed" do
it 'by calling #execution directly' do
action.execution { :answer }
expect(action.execution.call).to eq :answer
end
@@ -45,44 +45,68 @@
context 'with result exclusion' do
it 'returns result hash with single values for single truthy result' do
action.exclusion :result, :success, :failure
- action.execution { |this| this.success! }
+ action.execution { |action| action.success! }
action.describe success: "Succeeded"
- expect(action.execute).to eq( { result: :success, describe: "Succeeded", execution: true } )
+ expect(action.execute).to eq( { result: :success, describe: "Succeeded", execution: true, changes: {} } )
end
it 'returns result hash with empty results for empty result exclusion' do
action.describe "Empty"
- expect(action.execute).to eq( { result: nil, describe: "Empty", execution: nil } )
+ expect(action.execute).to eq( { result: nil, describe: "Empty", execution: nil, changes: {} } )
end
end
context 'with result group' do
it 'returns result hash with single value for single truthy result' do
action.group :result, a: false, b: true, c: false
action.describe a: 'aaa', b: 'bbb', c: 'ccc'
- expect(action.execute).to eq( { result: :b, describe: 'bbb', execution: nil } )
+ expect(action.execute).to eq( { result: :b, describe: 'bbb', execution: nil, changes: {} } )
end
it 'returns result hash with multiple values for multiple truthy results' do
action.group :result, a: true, b: false, c: true
action.describe a: 'aaa', b: 'bbb', c: 'ccc'
- expect(action.execute).to eq( { result: [ :a, :c ], describe: [ 'aaa', 'ccc' ], execution: nil } )
+ expect(action.execute).to eq( { result: [ :a, :c ], describe: [ 'aaa', 'ccc' ], execution: nil, changes: {} } )
end
it 'returns result hash with empty results for empty result group' do
action.describe "Empty"
- expect(action.execute).to eq( { result: nil, describe: "Empty", execution: nil } )
+ expect(action.execute).to eq( { result: nil, describe: "Empty", execution: nil, changes: {} } )
end
it 'returns result hash with empty results for no truthy results' do
action.group :result, a: false, b: false, c: false
action.describe "Empty"
- expect(action.execute).to eq( { result: nil, describe: "Empty", execution: nil } )
+ expect(action.execute).to eq( { result: nil, describe: "Empty", execution: nil, changes: {} } )
+ end
+
+ end
+
+ context 'with changes' do
+
+ it 'returns changed attributes' do
+ action.attributes :a, :b ,:c
+ action.execution { |action| action.a true ; action.b false }
+ expect(action.execute[:changes]).to eq( { a: true, b: false } )
+ end
+
+ it 'returns changed attributes for this execution only' do
+ action.attributes :a, :b ,:count
+ action.execution do |action|
+ action.count ||= 0
+ action.count += 1
+ case action.count
+ when 1 then action.a true
+ when 2 then action.b true
+ end
+ end
+ expect(action.execute[:changes]).to eq( { count: 1, a: true } )
+ expect(action.execute[:changes]).to eq( { count: 2, b: true } )
end
end
end