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