diff --git a/lib/trailblazer/test/assertion.rb b/lib/trailblazer/test/assertion.rb index fb87cce..a8da93f 100644 --- a/lib/trailblazer/test/assertion.rb +++ b/lib/trailblazer/test/assertion.rb @@ -56,29 +56,38 @@ def self.actual(asserted, reader, name) # Assertions for Activity, not for Operation. module Activity - def self.invoke_activity(ctx, operation:, **) signal, (ctx, _) = operation.call([ctx, {}]) # call with circuit interface. https://trailblazer.to/2.1/docs/operation/#operation-internals-circuit-interface return signal, ctx end - def self.invoke_activity_with_wtf(ctx, operation:, **) + def self.invoke_activity_with_tracing(ctx, operation:, **) raise end module Assert - def assert_pass(*args, **options, &block) - super(*args, **options, invoke: Activity.method(:invoke_activity), &block) + def assert_pass(*args, invoke: Activity.method(:invoke_activity), **options, &block) + super(*args, **options, invoke: invoke, &block) + end + + def assert_fail(*args, invoke: Activity.method(:invoke_activity), **options, &block) + super(*args, **options, invoke: invoke, &block) + end + +# DISCUSS: only for Suite API so far. + def assert_pass?(*args, **options, &block) + assert_pass(*args, **options, invoke: Activity.method(:invoke_activity_with_tracing), &block) end - def assert_fail(*args, **options, &block) - super(*args, **options, invoke: Activity.method(:invoke_activity), &block) + def assert_fail?(*args, **options, &block) + assert_fail(*args, **options, invoke: Activity.method(:invoke_activity_with_tracing), &block) end + # TODO: test {#assert_fail?} end - include Assertion # from Test::Assert, top-level - include Assert # our assert_* versions. + # include Assertion # from Test::Assert, top-level + # include Assert # our assert_* versions. end end end diff --git a/lib/trailblazer/test/assertion/suite.rb b/lib/trailblazer/test/assertion/suite.rb index 1802931..901a793 100644 --- a/lib/trailblazer/test/assertion/suite.rb +++ b/lib/trailblazer/test/assertion/suite.rb @@ -31,11 +31,11 @@ def Ctx(*args, **kws) end def assert_pass?(*args, **kws, &block) - assert_pass(*args, **kws, use_wtf: true, &block) + assert_pass(*args, **kws, invoke: Assertion::Wtf.method(:invoke_activity), &block) end def assert_fail?(*args, **kws, &block) - assert_fail(*args, **kws, use_wtf: true, &block) + assert_fail(*args, **kws, invoke: Assertion::Wtf.method(:invoke_activity), &block) end # Provide {Assert.assert_pass} which decouples the assertion logic from the actual test framework. @@ -87,7 +87,8 @@ def normalize_kws(user_block:, test:, operation: test.operation, expected_attrib contract_name: contract_name, model_at: model_at, user_block: user_block, - invoke: use_wtf ? Assertion::Wtf.method(:invoke_activity) : invoke, + # invoke: use_wtf ? Assertion::Wtf.method(:invoke_activity) : invoke, + invoke: invoke, **normalize_kws_for_ctx(test: test, **options) } diff --git a/test/assertion_test.rb b/test/assertion_test.rb index e3ec9c9..d54c39d 100644 --- a/test/assertion_test.rb +++ b/test/assertion_test.rb @@ -349,7 +349,8 @@ def model(ctx, params:, **) end end - include Trailblazer::Test::Assertion::Activity + include Trailblazer::Test::Assertion + include Trailblazer::Test::Assertion::Activity::Assert include Trailblazer::Test::Assertion::AssertExposes it do @@ -357,3 +358,30 @@ def model(ctx, params:, **) title: "Roxanne" end end + +class AssertionActivitySuiteTest < Minitest::Spec + Record = AssertionsTest::Record + + class Create < Trailblazer::Activity::FastTrack + step :validate + step :model + + def validate(ctx, params:, **) + params[:title] + end + + def model(ctx, params:, **) + ctx[:model] = Record.new(**params) + end + end + + include Trailblazer::Test::Assertion::Suite + include Trailblazer::Test::Assertion::Activity::Assert + include Trailblazer::Test::Assertion::AssertExposes + + let(:operation) { Create } + + it do + assert_pass?({params: {title: "Roxanne"}}, {title: "Roxanne"}) + end +end diff --git a/test/docs/assertions/pass_fail_test.rb b/test/docs/suite_test.rb similarity index 100% rename from test/docs/assertions/pass_fail_test.rb rename to test/docs/suite_test.rb