Module: Trailblazer::Test::Suite::Assert

Defined in:
lib/trailblazer/test/suite/assert.rb

Overview

Provide Assert.assert_pass and Assert.assert_fail functions which decouple the assertion logic from the actual test framework. They are called from the #assert_pass helpers.

Class Method Summary collapse

Class Method Details

.assert_fail(params_fragment, expected_errors, assertion:, **kws) ⇒ Object



32
33
34
35
36
37
# File 'lib/trailblazer/test/suite/assert.rb', line 32

def assert_fail(params_fragment, expected_errors, assertion:, **kws)
  ctx, kws = normalize_for(params_fragment, **kws)
  activity = kws[:operation]  # FIXME.

  assertion.(activity, ctx, expected_errors, **kws)
end

.assert_pass(params_fragment, deep_merge: true, assertion:, expected_attributes_to_merge:, **kws) ⇒ Object



22
23
24
25
26
27
28
29
30
# File 'lib/trailblazer/test/suite/assert.rb', line 22

def assert_pass(params_fragment, deep_merge: true, assertion:, expected_attributes_to_merge:, **kws) # TODO: remove kws.
  ctx, kws = normalize_for(params_fragment, **kws) # compute input, .

  expected_attributes = expected_attributes_for(expected_attributes_to_merge, **kws) # compute "output", expected model attributes.

  activity = kws[:operation]  # FIXME.

  assertion.(activity, ctx, expected_model_attributes: expected_attributes, **kws)
end

.ctx_for_params_fragment(params_fragment, key_in_params:, default_ctx:) ⇒ Object

@semi-public used in rspec-trailblazer.



40
41
42
43
44
45
46
# File 'lib/trailblazer/test/suite/assert.rb', line 40

def ctx_for_params_fragment(params_fragment, key_in_params:, default_ctx:, **)
  return params_fragment if params_fragment.kind_of?(Trailblazer::Test::Context)
  # If {:key_in_params} is given, key the {params_fragment} with it, e.g. {params: {transaction: {.. params_fragment ..}}}
  merge_with_ctx = key_in_params ? {params: {key_in_params => params_fragment}} : {params: params_fragment}

  ctx = Suite.merge_for(default_ctx, merge_with_ctx, true)
end

.expected_attributes_for(expected_attributes_to_merge, expected_attributes:, deep_merge: false) ⇒ Object

FIXME: when true the result hash contains subclassed AR classes instead of the original ones.

when we got this sorted we can allows deep merging here, too.

@semi-public (for rspec-trailblazer).



84
85
86
# File 'lib/trailblazer/test/suite/assert.rb', line 84

def expected_attributes_for(expected_attributes_to_merge, expected_attributes:, deep_merge: false, **)
  _expected_attributes = Suite.merge_for(expected_attributes, expected_attributes_to_merge, deep_merge)
end

.normalize_for(params_fragment, **kws) ⇒ Object

@semi-public (for rspec-trailblazer).



14
15
16
17
18
19
# File 'lib/trailblazer/test/suite/assert.rb', line 14

def normalize_for(params_fragment, **kws)
  kws = normalize_kws(**kws)
  ctx = ctx_for_params_fragment(params_fragment, **kws)

  return ctx, kws
end

.normalize_kws(user_block:, test:, operation: test.operation, contract_name: "default", invoke: Assertion.method(:invoke_operation), **options) ⇒ Object

Gather all test case configuration. This involves reading all test ‘let` directives.



50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/trailblazer/test/suite/assert.rb', line 50

def normalize_kws(user_block:, test:, operation: test.operation, contract_name: "default", invoke: Assertion.method(:invoke_operation), **options)
  kws = {
    operation:            operation,
    test:                 test,
    contract_name:        contract_name,
    user_block:           user_block,
    invoke: invoke,

    **normalize_kws_for_ctx(test: test, **options),
    **normalize_kws_for_model_assertion(test: test, **options),
  }

  return kws
end

.normalize_kws_for_ctx(test:, key_in_params: test.key_in_params, default_ctx: test.default_ctx) ⇒ Object

@semi-public used in rspec-trailblazer. Used when building the incoming ctx, e.g. in #run.



67
68
69
70
71
72
# File 'lib/trailblazer/test/suite/assert.rb', line 67

def normalize_kws_for_ctx(test:, key_in_params: test.key_in_params, default_ctx: test.default_ctx, **)
  {
    default_ctx:          default_ctx,
    key_in_params:        key_in_params,
  }
end

.normalize_kws_for_model_assertion(test:, expected_attributes: test.expected_attributes, model_at: :model) ⇒ Object



74
75
76
77
78
79
# File 'lib/trailblazer/test/suite/assert.rb', line 74

def normalize_kws_for_model_assertion(test:, expected_attributes: test.expected_attributes, model_at: :model, **)
  {
    expected_attributes:  expected_attributes,
    model_at:             model_at,
  }
end