test/docs/guard_test.rb in trailblazer-2.0.2 vs test/docs/guard_test.rb in trailblazer-2.0.3

- old
+ new

@@ -1,15 +1,25 @@ require "test_helper" #-- # with proc class DocsGuardProcTest < Minitest::Spec + # test without KWs, only options. + class Update < Trailblazer::Operation + step Policy::Guard( ->(options) { options["params"][:pass] } ) + step ->(options, *) { options["x"] = true } + end + + it { Update.(pass: false)["x"].must_equal nil } + it { Update.(pass: true)["x"].must_equal true } + # TODO: test excp when current_user not available + #:proc class Create < Trailblazer::Operation - step Policy::Guard( ->(options) { options["params"][:pass] } ) - step :process + step Policy::Guard( ->(options, params:, **) { params[:pass] } ) #~pipeonly + step :process def process(*) self["x"] = true end #~pipeonly end @@ -27,11 +37,11 @@ #--- #- Guard inheritance class New < Create - step Policy::Guard( ->(options) { options["current_user"] } ), override: true + step Policy::Guard( ->(options, current_user:, **) { current_user } ), override: true end it { New["pipetree"].inspect.must_equal %{[>operation.new,>policy.default.eval,>process]} } end @@ -40,21 +50,21 @@ class DocsGuardTest < Minitest::Spec #:callable class MyGuard include Uber::Callable - def call(options) - options["params"][:pass] + def call(options, params:, **) + params[:pass] end end #:callable end #:callable-op class Create < Trailblazer::Operation step Policy::Guard( MyGuard.new ) - step :process #~pipe-only + step :process def process(*); self[:x] = true; end #~pipe-only end end #:callable-op end @@ -66,15 +76,18 @@ # with method class DocsGuardMethodTest < Minitest::Spec #:method class Create < Trailblazer::Operation step Policy::Guard( :pass? ) + + def pass?(options, params:, **) + params[:pass] + end + #~pipe-onlyy step :process - #~pipe-only - def pass?(options, *); options["params"][:pass] end def process(*); self["x"] = true; end - #~pipe-only end + #~pipe-onlyy end end #:method end it { Create.(pass: false).inspect("x").must_equal %{<Result:false [nil] >} } it { Create.(pass: true).inspect("x").must_equal %{<Result:true [true] >} } @@ -83,16 +96,16 @@ #--- # with name: class DocsGuardNamedTest < Minitest::Spec #:name class Create < Trailblazer::Operation - step Policy::Guard( ->(options) { options["current_user"] }, name: :user ) + step Policy::Guard( ->(options, current_user:, **) { current_user }, name: :user ) # ... end #:name end - it { Create.()["result.policy.user"].success?.must_equal false } + it { Create.({}, "current_user" => nil )["result.policy.user"].success?.must_equal false } it { Create.({}, "current_user" => Module)["result.policy.user"].success?.must_equal true } it { #:name-result result = Create.({}, "current_user" => true) @@ -100,33 +113,15 @@ #:name-result end } end #--- -# class-level guard -class DocsGuardClassLevelTest < Minitest::Spec - #:class-level - class Create < Trailblazer::Operation - step Policy::Guard( ->(options) { options["current_user"] == Module } ), - before: "operation.new" - #~pipe--only - step ->(options) { options["x"] = true } - #~pipe--only end - end - #:class-level end - - it { Create.(); Create["result.policy"].must_equal nil } - it { Create.({}, "current_user" => Module)["x"].must_equal true } - it { Create.({} )["x"].must_equal nil } -end - -#--- # dependency injection class DocsGuardInjectionTest < Minitest::Spec #:di-op class Create < Trailblazer::Operation - step Policy::Guard( ->(options) { options["current_user"] == Module } ) + step Policy::Guard( ->(options, current_user:, **) { current_user == Module } ) end #:di-op end it { Create.({}, "current_user" => Module).inspect("").must_equal %{<Result:true [nil] >} } it { @@ -138,8 +133,37 @@ ) #:di-call end result.inspect("").must_equal %{<Result:false [nil] >} } end +#--- +# missing current_user throws exception +class DocsGuardMissingKeywordTest < Minitest::Spec + class Create < Trailblazer::Operation + step Policy::Guard( ->(options, current_user:, **) { current_user == Module } ) + end -# TODO: -#policy.default + it { assert_raises(ArgumentError) { Create.() } } + it { Create.({}, "current_user" => Module).success?.must_equal true } +end + +#--- +# before: +class DocsGuardPositionTest < Minitest::Spec + #:before + class Create < Trailblazer::Operation + step :model! + step Policy::Guard( :authorize! ), + before: :model! + end + #:before end + + it { Create["pipetree"].inspect.must_equal %{[>operation.new,>policy.default.eval,>model!]} } + it do + #:before-pipe + puts Create["pipetree"].inspect(style: :rows) #=> + # 0 ========================>operation.new + # 1 ==================>policy.default.eval + # 2 ===============================>model! + #:before-pipe end + end +end