test/operation/persist_test.rb in trailblazer-2.0.7 vs test/operation/persist_test.rb in trailblazer-2.1.0.beta1
- old
+ new
@@ -4,39 +4,46 @@
Song = Struct.new(:title, :saved) do
def save; title=="Fail!" ? false : self.saved = true; end
end
class Create < Trailblazer::Operation
- extend Contract::DSL
- contract do
+ class Form < Reform::Form
property :title
end
+ class Fail1
+ def self.call(options, **); options["1. fail"] = "Validate" end
+ end
+
+ class Fail2
+ def self.call(options, **); options["2. fail"] = "Persist" end
+ end
+
step Model( Song, :new )
- step Contract::Build()
+ step Contract::Build( constant: Form )
step Contract::Validate()
- failure ->(options) { options["1. fail"] = "Validate" }
+ fail Fail1
step Contract::Persist()
- failure ->(options) { options["2. fail"] = "Persist" }
+ fail Fail2
end
- it { Create.(title: "In Recital")["model"].title.must_equal "In Recital" }
- it { Create.(title: "In Recital")["model"].saved.must_equal true }
+ it { Create.(params: {title: "In Recital"})[:model].title.must_equal "In Recital" }
+ it { Create.(params: {title: "In Recital"})[:model].saved.must_equal true }
# failure
it do
- result = Create.(title: "Fail!")
- result["model"].saved.must_equal nil
- result["model"].title.must_equal "Fail!"
+ result = Create.(params: {title: "Fail!"})
+ result[:model].saved.must_be_nil
+ result[:model].title.must_equal "Fail!"
result["2. fail"].must_equal "Persist"
result.success?.must_equal false
end
#---
#- inheritance
class Update < Create
end
- it { Update["pipetree"].inspect.must_equal %{[>operation.new,>model.build,>contract.build,>contract.default.validate,<persist_test.rb:17,>persist.save,<persist_test.rb:19]} }
+ it { Operation::Inspect.( Update ).must_equal %{[>model.build,>contract.build,>contract.default.validate,<<PersistTest::Create::Fail1,>persist.save,<<PersistTest::Create::Fail2]} }
#---
it do
skip "show how save! could be applied and how we could rescue and deviate to left track"
end