trailblazer-test 0.1.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +20 -0
- data/CHANGES.md +4 -0
- data/Gemfile +7 -0
- data/README.md +23 -118
- data/Rakefile +0 -3
- data/lib/trailblazer/test/assertion/assert_exposes.rb +73 -0
- data/lib/trailblazer/test/assertion/assert_fail.rb +58 -0
- data/lib/trailblazer/test/assertion/assert_pass.rb +101 -0
- data/lib/trailblazer/test/assertion.rb +114 -0
- data/lib/trailblazer/test/context.rb +5 -0
- data/lib/trailblazer/test/endpoint.rb +42 -0
- data/lib/trailblazer/test/helper/mock_step.rb +19 -0
- data/lib/trailblazer/test/suite/assert.rb +90 -0
- data/lib/trailblazer/test/suite/ctx.rb +51 -0
- data/lib/trailblazer/test/suite.rb +58 -0
- data/lib/trailblazer/test/testing.rb +62 -0
- data/lib/trailblazer/test/version.rb +1 -1
- data/lib/trailblazer/test.rb +13 -4
- data/trailblazer-test.gemspec +9 -4
- metadata +65 -20
- data/.rubocop-https---raw-githubusercontent-com-trailblazer-meta-master-rubocop-yml +0 -115
- data/.rubocop.yml +0 -17
- data/.travis.yml +0 -14
- data/lib/trailblazer/test/assertions.rb +0 -37
- data/lib/trailblazer/test/deprecation/operation/assertions.rb +0 -42
- data/lib/trailblazer/test/deprecation/operation/helper.rb +0 -28
- data/lib/trailblazer/test/operation/assertions.rb +0 -89
- data/lib/trailblazer/test/operation/helper.rb +0 -54
- data/lib/trailblazer/test/operation/policy_assertions.rb +0 -13
@@ -0,0 +1,90 @@
|
|
1
|
+
module Trailblazer
|
2
|
+
module Test
|
3
|
+
# Offers the assertions `#assert_pass` and friends but with a configuration "DSL".
|
4
|
+
# That means you can write super short and concise test cases using the defaulting
|
5
|
+
# in this module.
|
6
|
+
module Suite
|
7
|
+
# Provide {Assert.assert_pass} and {Assert.assert_fail} functions which decouple
|
8
|
+
# the assertion logic from the actual test framework.
|
9
|
+
# They are called from the {Suite#assert_pass} helpers.
|
10
|
+
module Assert
|
11
|
+
module_function
|
12
|
+
|
13
|
+
# @semi-public (for rspec-trailblazer).
|
14
|
+
def normalize_for(params_fragment, **kws)
|
15
|
+
kws = normalize_kws(**kws)
|
16
|
+
ctx = ctx_for_params_fragment(params_fragment, **kws)
|
17
|
+
|
18
|
+
return ctx, kws
|
19
|
+
end
|
20
|
+
|
21
|
+
#@public
|
22
|
+
def assert_pass(params_fragment, deep_merge: true, assertion:, expected_attributes_to_merge:, **kws) # TODO: remove kws.
|
23
|
+
ctx, kws = normalize_for(params_fragment, **kws) # compute input, .
|
24
|
+
|
25
|
+
expected_attributes = expected_attributes_for(expected_attributes_to_merge, **kws) # compute "output", expected model attributes.
|
26
|
+
|
27
|
+
activity = kws[:operation] # FIXME.
|
28
|
+
|
29
|
+
assertion.(activity, ctx, expected_model_attributes: expected_attributes, **kws)
|
30
|
+
end
|
31
|
+
|
32
|
+
def assert_fail(params_fragment, expected_errors, assertion:, **kws)
|
33
|
+
ctx, kws = normalize_for(params_fragment, **kws)
|
34
|
+
activity = kws[:operation] # FIXME.
|
35
|
+
|
36
|
+
assertion.(activity, ctx, expected_errors, **kws)
|
37
|
+
end
|
38
|
+
|
39
|
+
# @semi-public used in rspec-trailblazer.
|
40
|
+
def ctx_for_params_fragment(params_fragment, key_in_params:, default_ctx:, **)
|
41
|
+
return params_fragment if params_fragment.kind_of?(Trailblazer::Test::Context)
|
42
|
+
# If {:key_in_params} is given, key the {params_fragment} with it, e.g. {params: {transaction: {.. params_fragment ..}}}
|
43
|
+
merge_with_ctx = key_in_params ? {params: {key_in_params => params_fragment}} : {params: params_fragment}
|
44
|
+
|
45
|
+
ctx = Suite.merge_for(default_ctx, merge_with_ctx, true)
|
46
|
+
end
|
47
|
+
|
48
|
+
# @private
|
49
|
+
# Gather all test case configuration. This involves reading all test `let` directives.
|
50
|
+
def normalize_kws(user_block:, test:, operation: test.operation, contract_name: "default", invoke: Assertion.method(:invoke_operation), **options)
|
51
|
+
kws = {
|
52
|
+
operation: operation,
|
53
|
+
test: test,
|
54
|
+
contract_name: contract_name,
|
55
|
+
user_block: user_block,
|
56
|
+
invoke: invoke,
|
57
|
+
|
58
|
+
**normalize_kws_for_ctx(test: test, **options),
|
59
|
+
**normalize_kws_for_model_assertion(test: test, **options),
|
60
|
+
}
|
61
|
+
|
62
|
+
return kws
|
63
|
+
end
|
64
|
+
|
65
|
+
# @semi-public used in rspec-trailblazer.
|
66
|
+
# Used when building the incoming {ctx}, e.g. in {#run}.
|
67
|
+
def normalize_kws_for_ctx(test:, key_in_params: test.key_in_params, default_ctx: test.default_ctx, **)
|
68
|
+
{
|
69
|
+
default_ctx: default_ctx,
|
70
|
+
key_in_params: key_in_params,
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
def normalize_kws_for_model_assertion(test:, expected_attributes: test.expected_attributes, model_at: :model, **)
|
75
|
+
{
|
76
|
+
expected_attributes: expected_attributes,
|
77
|
+
model_at: model_at,
|
78
|
+
}
|
79
|
+
end
|
80
|
+
|
81
|
+
# FIXME: when {deep_merge: true} the result hash contains subclassed AR classes instead of the original ones.
|
82
|
+
# when we got this sorted we can allows deep merging here, too.
|
83
|
+
# @semi-public (for rspec-trailblazer).
|
84
|
+
def expected_attributes_for(expected_attributes_to_merge, expected_attributes:, deep_merge: false, **)
|
85
|
+
_expected_attributes = Suite.merge_for(expected_attributes, expected_attributes_to_merge, deep_merge)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require "hashie"
|
2
|
+
require "trailblazer/test/context"
|
3
|
+
|
4
|
+
module Trailblazer
|
5
|
+
module Test
|
6
|
+
module Suite
|
7
|
+
# @private
|
8
|
+
class CtxHash < Hash
|
9
|
+
include Hashie::Extensions::DeepMerge
|
10
|
+
end
|
11
|
+
|
12
|
+
module_function
|
13
|
+
# @private
|
14
|
+
def merge_for(dest, source, deep_merge)
|
15
|
+
return dest.merge(source) unless deep_merge
|
16
|
+
|
17
|
+
CtxHash[dest].deep_merge(CtxHash[source]) # FIXME: this subclasses ActiveRecord classes in dest like {class: ReportSubscription}
|
18
|
+
end
|
19
|
+
|
20
|
+
def Ctx(merge_with_ctx={}, exclude: false, merge: true, **kws)
|
21
|
+
if merge
|
22
|
+
options = Suite::Assert.normalize_kws_for_ctx(test: self, **kws) # FIXME: why test?
|
23
|
+
key_in_params = options[:key_in_params]
|
24
|
+
default_ctx = options[:default_ctx]
|
25
|
+
|
26
|
+
# Extract {:params} from {default_ctx}
|
27
|
+
default_params = key_in_params ? default_ctx[:params][key_in_params] : default_ctx[:params]
|
28
|
+
|
29
|
+
# Remove {:exclude} variables from the {params:} part
|
30
|
+
filtered_default_params =
|
31
|
+
if exclude
|
32
|
+
default_params.slice(*(default_params.keys - exclude))
|
33
|
+
else
|
34
|
+
default_params # use original params if no filtering configured.
|
35
|
+
end
|
36
|
+
|
37
|
+
# FIXME: very, very redundant.
|
38
|
+
default_params_for_ctx = key_in_params ? {key_in_params => filtered_default_params} : filtered_default_params
|
39
|
+
|
40
|
+
ctx = default_ctx.merge({params: default_params_for_ctx})
|
41
|
+
else # FIXME: if/else here sucks.
|
42
|
+
ctx = {}
|
43
|
+
end
|
44
|
+
|
45
|
+
ctx = Suite.merge_for(ctx, merge_with_ctx, true) # merge injections
|
46
|
+
|
47
|
+
Trailblazer::Test::Context[ctx] # this signals "pass-through"
|
48
|
+
end
|
49
|
+
end # Suite
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Trailblazer
|
2
|
+
module Test
|
3
|
+
# Offers the assertions `#assert_pass` and friends but with a configuration "DSL".
|
4
|
+
# That means you can write super short and concise test cases using the defaulting
|
5
|
+
# in this module.
|
6
|
+
module Suite
|
7
|
+
# Defaults so tests run without tweaking (almost).
|
8
|
+
module Spec
|
9
|
+
def self.included(includer)
|
10
|
+
includer.let(:operation) { raise "Trailblazer::Test: `let(:operation) { ... }` is missing" }
|
11
|
+
includer.let(:key_in_params) { false }
|
12
|
+
includer.let(:expected_attributes) { {} } # You need to override this in your tests.
|
13
|
+
includer.let(:default_ctx) { {} }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# For Minitest::Test, given there are still people using this awkward syntax. :)
|
18
|
+
module Test
|
19
|
+
def operation
|
20
|
+
raise "Trailblazer::Test: `def operation` is missing"
|
21
|
+
end
|
22
|
+
|
23
|
+
def key_in_params
|
24
|
+
false
|
25
|
+
end
|
26
|
+
|
27
|
+
def expected_attributes
|
28
|
+
{}
|
29
|
+
end
|
30
|
+
|
31
|
+
def default_ctx
|
32
|
+
{}
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# The assertions and helpers included into the actual test.
|
37
|
+
def assert_pass(params_fragment, expected_attributes_to_merge={}, assertion: Assertion::AssertPass, **kws, &block)
|
38
|
+
Assert.assert_pass(params_fragment, test: self, user_block: block, assertion: assertion, expected_attributes_to_merge: expected_attributes_to_merge, **kws)
|
39
|
+
end
|
40
|
+
|
41
|
+
def assert_fail(params_fragment, expected_errors=nil, assertion: Assertion::AssertFail, **kws, &block)
|
42
|
+
Assert.assert_fail(params_fragment, expected_errors, test: self, user_block: block, assertion: assertion, **kws)
|
43
|
+
end
|
44
|
+
|
45
|
+
def assert_pass?(*args, **kws, &block)
|
46
|
+
assert_pass(*args, **kws, invoke: Assertion.method(:invoke_operation_with_wtf), &block)
|
47
|
+
end
|
48
|
+
|
49
|
+
def assert_fail?(*args, **kws, &block)
|
50
|
+
assert_fail(*args, **kws, invoke: Assertion.method(:invoke_operation_with_wtf), &block)
|
51
|
+
end
|
52
|
+
|
53
|
+
def Ctx(*args, **kws)
|
54
|
+
Assert.Ctx(*args, test: self, **kws)
|
55
|
+
end
|
56
|
+
end # Suite
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require "trailblazer/macro"
|
2
|
+
require "trailblazer/macro/contract"
|
3
|
+
# require "reform/form/active_model/validations" # FIXME: document!
|
4
|
+
require "dry-validation" # FIXME: bug in reform-rails with Rails 6.1 errors object forces us to use dry-v until it's fixed.
|
5
|
+
require "trailblazer/operation"
|
6
|
+
|
7
|
+
module Trailblazer::Test
|
8
|
+
# Test components we need in other gems, too.
|
9
|
+
module Testing
|
10
|
+
class Memo < Struct.new(:id, :title, :content, :tag_list, :persisted?, :errors, keyword_init: true)
|
11
|
+
VALID_INPUT = {params: {memo: {title: "TODO", content: "Stock up beer"}}}.freeze
|
12
|
+
|
13
|
+
def save
|
14
|
+
self[:persisted?] = true
|
15
|
+
self[:id] = 1
|
16
|
+
end
|
17
|
+
|
18
|
+
module Operation
|
19
|
+
class Create < Trailblazer::Operation
|
20
|
+
class Form < Reform::Form
|
21
|
+
require "reform/form/dry"
|
22
|
+
include Reform::Form::Dry
|
23
|
+
|
24
|
+
property :title
|
25
|
+
property :content
|
26
|
+
property :tag_list
|
27
|
+
|
28
|
+
validation do
|
29
|
+
params do
|
30
|
+
required(:title).filled
|
31
|
+
required(:content).filled(min_size?: 8)
|
32
|
+
optional(:tag_list).maybe(type?: String)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
step :capture
|
38
|
+
step Model::Build(Memo, :new)
|
39
|
+
step Contract::Build(constant: Form)
|
40
|
+
step Contract::Validate(key: :memo)
|
41
|
+
step :parse_tag_list
|
42
|
+
step Contract::Persist()
|
43
|
+
|
44
|
+
module Capture
|
45
|
+
def capture(ctx, **)
|
46
|
+
ctx[:captured] = CU.inspect(ctx.to_h)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
include Capture
|
50
|
+
|
51
|
+
def parse_tag_list(ctx, **)
|
52
|
+
tag_list = ctx["contract.default"].tag_list or return true
|
53
|
+
|
54
|
+
tags = tag_list.split(",")
|
55
|
+
|
56
|
+
ctx["contract.default"].tag_list = tags
|
57
|
+
end
|
58
|
+
end # Create
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/trailblazer/test.rb
CHANGED
@@ -3,10 +3,19 @@ require "trailblazer/test/version"
|
|
3
3
|
module Trailblazer
|
4
4
|
module Test
|
5
5
|
# Your code goes here...
|
6
|
+
|
7
|
+
def self.module!(*args, **options, &block)
|
8
|
+
Assertion.module!(*args, **options, &block)
|
9
|
+
end
|
6
10
|
end
|
7
11
|
end
|
8
12
|
|
9
|
-
require "trailblazer/test/
|
10
|
-
require "trailblazer/test/
|
11
|
-
require "trailblazer/test/
|
12
|
-
require "trailblazer/test/
|
13
|
+
require "trailblazer/test/assertion/assert_exposes"
|
14
|
+
require "trailblazer/test/assertion/assert_pass"
|
15
|
+
require "trailblazer/test/assertion/assert_fail"
|
16
|
+
require "trailblazer/test/assertion"
|
17
|
+
require "trailblazer/test/suite"
|
18
|
+
require "trailblazer/test/suite/assert"
|
19
|
+
require "trailblazer/test/suite/ctx"
|
20
|
+
require "trailblazer/test/helper/mock_step"
|
21
|
+
# require "trailblazer/test/operation/policy_assertions"
|
data/trailblazer-test.gemspec
CHANGED
@@ -23,10 +23,15 @@ Gem::Specification.new do |spec|
|
|
23
23
|
|
24
24
|
spec.add_development_dependency "bundler"
|
25
25
|
spec.add_development_dependency "minitest", "~> 5.0"
|
26
|
+
spec.add_development_dependency "minitest-line"
|
26
27
|
spec.add_development_dependency "rake"
|
27
|
-
spec.add_development_dependency "rubocop"
|
28
|
-
spec.add_development_dependency "simplecov"
|
29
28
|
|
30
|
-
spec.
|
31
|
-
spec.
|
29
|
+
spec.add_development_dependency "trailblazer-operation"
|
30
|
+
spec.add_development_dependency "trailblazer-macro"
|
31
|
+
spec.add_development_dependency "trailblazer-macro-contract"
|
32
|
+
# spec.add_development_dependency "reform-rails"
|
33
|
+
spec.add_development_dependency "dry-validation"
|
34
|
+
spec.add_development_dependency "trailblazer-core-utils", ">= 0.0.5"
|
35
|
+
|
36
|
+
spec.add_dependency "trailblazer-activity-dsl-linear", ">= 1.2.6"
|
32
37
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trailblazer-test
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sutterer
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashie
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '5.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest-line
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rake
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,7 +81,7 @@ dependencies:
|
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
84
|
+
name: trailblazer-operation
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - ">="
|
@@ -81,7 +95,7 @@ dependencies:
|
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
98
|
+
name: trailblazer-macro
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - ">="
|
@@ -95,33 +109,61 @@ dependencies:
|
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
|
-
name: trailblazer-
|
112
|
+
name: trailblazer-macro-contract
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
115
|
- - ">="
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0
|
104
|
-
type: :
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: dry-validation
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: trailblazer-core-utils
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 0.0.5
|
146
|
+
type: :development
|
105
147
|
prerelease: false
|
106
148
|
version_requirements: !ruby/object:Gem::Requirement
|
107
149
|
requirements:
|
108
150
|
- - ">="
|
109
151
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.
|
152
|
+
version: 0.0.5
|
111
153
|
- !ruby/object:Gem::Dependency
|
112
154
|
name: trailblazer-activity-dsl-linear
|
113
155
|
requirement: !ruby/object:Gem::Requirement
|
114
156
|
requirements:
|
115
157
|
- - ">="
|
116
158
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
159
|
+
version: 1.2.6
|
118
160
|
type: :runtime
|
119
161
|
prerelease: false
|
120
162
|
version_requirements: !ruby/object:Gem::Requirement
|
121
163
|
requirements:
|
122
164
|
- - ">="
|
123
165
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
166
|
+
version: 1.2.6
|
125
167
|
description: Assertions, matchers, and helpers to test Trailblazer code.
|
126
168
|
email:
|
127
169
|
- apotonick@gmail.com
|
@@ -129,21 +171,24 @@ executables: []
|
|
129
171
|
extensions: []
|
130
172
|
extra_rdoc_files: []
|
131
173
|
files:
|
174
|
+
- ".github/workflows/ci.yml"
|
132
175
|
- ".gitignore"
|
133
|
-
- ".rubocop-https---raw-githubusercontent-com-trailblazer-meta-master-rubocop-yml"
|
134
|
-
- ".rubocop.yml"
|
135
|
-
- ".travis.yml"
|
136
176
|
- CHANGES.md
|
137
177
|
- Gemfile
|
138
178
|
- README.md
|
139
179
|
- Rakefile
|
140
180
|
- lib/trailblazer/test.rb
|
141
|
-
- lib/trailblazer/test/
|
142
|
-
- lib/trailblazer/test/
|
143
|
-
- lib/trailblazer/test/
|
144
|
-
- lib/trailblazer/test/
|
145
|
-
- lib/trailblazer/test/
|
146
|
-
- lib/trailblazer/test/
|
181
|
+
- lib/trailblazer/test/assertion.rb
|
182
|
+
- lib/trailblazer/test/assertion/assert_exposes.rb
|
183
|
+
- lib/trailblazer/test/assertion/assert_fail.rb
|
184
|
+
- lib/trailblazer/test/assertion/assert_pass.rb
|
185
|
+
- lib/trailblazer/test/context.rb
|
186
|
+
- lib/trailblazer/test/endpoint.rb
|
187
|
+
- lib/trailblazer/test/helper/mock_step.rb
|
188
|
+
- lib/trailblazer/test/suite.rb
|
189
|
+
- lib/trailblazer/test/suite/assert.rb
|
190
|
+
- lib/trailblazer/test/suite/ctx.rb
|
191
|
+
- lib/trailblazer/test/testing.rb
|
147
192
|
- lib/trailblazer/test/version.rb
|
148
193
|
- trailblazer-test.gemspec
|
149
194
|
homepage: http://trailblazer.to
|
@@ -164,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
164
209
|
- !ruby/object:Gem::Version
|
165
210
|
version: '0'
|
166
211
|
requirements: []
|
167
|
-
rubygems_version: 3.
|
212
|
+
rubygems_version: 3.2.3
|
168
213
|
signing_key:
|
169
214
|
specification_version: 4
|
170
215
|
summary: Assertions, matchers, and helpers to test Trailblazer code.
|
@@ -1,115 +0,0 @@
|
|
1
|
-
AllCops:
|
2
|
-
TargetRubyVersion: 2.5.0
|
3
|
-
DisplayCopNames: true
|
4
|
-
Layout/CaseIndentation:
|
5
|
-
IndentOneStep: true
|
6
|
-
Layout/FirstArrayElementLineBreak:
|
7
|
-
Enabled: true
|
8
|
-
Layout/FirstHashElementLineBreak:
|
9
|
-
Enabled: true
|
10
|
-
Layout/FirstMethodArgumentLineBreak:
|
11
|
-
Enabled: true
|
12
|
-
Layout/FirstMethodParameterLineBreak:
|
13
|
-
Enabled: true
|
14
|
-
Layout/MultilineAssignmentLayout:
|
15
|
-
Enabled: true
|
16
|
-
EnforcedStyle: same_line
|
17
|
-
Layout/SpaceInsideHashLiteralBraces:
|
18
|
-
EnforcedStyle: no_space
|
19
|
-
Metrics/LineLength:
|
20
|
-
Max: 130
|
21
|
-
Metrics/ParameterLists:
|
22
|
-
Max: 5
|
23
|
-
Naming/VariableNumber:
|
24
|
-
EnforcedStyle: snake_case
|
25
|
-
Style/AndOr:
|
26
|
-
EnforcedStyle: conditionals
|
27
|
-
Style/AutoResourceCleanup:
|
28
|
-
Enabled: true
|
29
|
-
Style/CollectionMethods:
|
30
|
-
Enabled: true
|
31
|
-
Style/Documentation:
|
32
|
-
Enabled: false
|
33
|
-
Style/EmptyLiteral:
|
34
|
-
Enabled: false
|
35
|
-
Style/EmptyMethod:
|
36
|
-
EnforcedStyle: expanded
|
37
|
-
Style/FormatStringToken:
|
38
|
-
EnforcedStyle: template
|
39
|
-
Style/ImplicitRuntimeError:
|
40
|
-
Enabled: true
|
41
|
-
Style/MethodCalledOnDoEndBlock:
|
42
|
-
Enabled: true
|
43
|
-
Style/MethodDefParentheses:
|
44
|
-
EnforcedStyle: require_parentheses
|
45
|
-
Style/MissingElse:
|
46
|
-
Enabled: true
|
47
|
-
EnforcedStyle: case
|
48
|
-
Style/NumericLiterals:
|
49
|
-
Enabled: false
|
50
|
-
Style/OptionHash:
|
51
|
-
Enabled: true
|
52
|
-
Style/PercentLiteralDelimiters:
|
53
|
-
PreferredDelimiters:
|
54
|
-
"%w": "[]"
|
55
|
-
"%W": "[]"
|
56
|
-
"%i": "[]"
|
57
|
-
"%I": "[]"
|
58
|
-
"%r": "()"
|
59
|
-
Style/ReturnNil:
|
60
|
-
Enabled: true
|
61
|
-
Style/SafeNavigation:
|
62
|
-
Enabled: false
|
63
|
-
Style/Send:
|
64
|
-
Enabled: true
|
65
|
-
Style/SignalException:
|
66
|
-
EnforcedStyle: semantic
|
67
|
-
Style/StringLiterals:
|
68
|
-
EnforcedStyle: double_quotes
|
69
|
-
Style/StringLiteralsInInterpolation:
|
70
|
-
EnforcedStyle: double_quotes
|
71
|
-
Style/StringMethods:
|
72
|
-
Enabled: true
|
73
|
-
Style/SymbolArray:
|
74
|
-
Enabled: true
|
75
|
-
# this allows in rspec to have expect { } with multiple lines
|
76
|
-
Style/BlockDelimiters:
|
77
|
-
EnforcedStyle: braces_for_chaining
|
78
|
-
Layout/EndOfLine:
|
79
|
-
Enabled: false
|
80
|
-
# don't need these checks in test folders
|
81
|
-
Metrics/ModuleLength:
|
82
|
-
Exclude:
|
83
|
-
- "spec/**/*"
|
84
|
-
- "test/**/*"
|
85
|
-
Metrics/BlockLength:
|
86
|
-
Exclude:
|
87
|
-
- "spec/**/*"
|
88
|
-
- "test/**/*"
|
89
|
-
- "*.gemspec" # definitely not in the gemspec
|
90
|
-
Metrics/MethodLength:
|
91
|
-
Max: 20
|
92
|
-
Lint/UnreachableCode:
|
93
|
-
Description: 'Unreachable code.'
|
94
|
-
Enabled: false
|
95
|
-
Lint/Void:
|
96
|
-
Enabled: false
|
97
|
-
Layout/AlignHash:
|
98
|
-
EnforcedLastArgumentHashStyle: ignore_implicit
|
99
|
-
Metrics/AbcSize:
|
100
|
-
Max: 25
|
101
|
-
Style/LambdaCall:
|
102
|
-
Enabled: false
|
103
|
-
Style/Semicolon:
|
104
|
-
Enabled: false
|
105
|
-
Naming/UncommunicativeMethodParamName:
|
106
|
-
Enabled: false
|
107
|
-
Style/ClassAndModuleChildren:
|
108
|
-
Enabled: false
|
109
|
-
Layout/LeadingCommentSpace:
|
110
|
-
Exclude:
|
111
|
-
- 'test/docs/**/*'
|
112
|
-
Layout/AlignHash:
|
113
|
-
EnforcedHashRocketStyle: table
|
114
|
-
Style/FrozenStringLiteralComment:
|
115
|
-
Enabled: false
|
data/.rubocop.yml
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
inherit_from:
|
2
|
-
- https://raw.githubusercontent.com/trailblazer/meta/master/rubocop.yml
|
3
|
-
|
4
|
-
Style/SignalException:
|
5
|
-
Exclude:
|
6
|
-
- lib/trailblazer/test/operation/assertions.rb
|
7
|
-
- lib/trailblazer/test/operation/helper.rb
|
8
|
-
- lib/trailblazer/test/deprecation/operation/helper.rb
|
9
|
-
|
10
|
-
Metrics/ParameterLists:
|
11
|
-
Exclude:
|
12
|
-
- lib/trailblazer/test/operation/assertions.rb
|
13
|
-
|
14
|
-
Metrics/LineLength:
|
15
|
-
Exclude:
|
16
|
-
- lib/trailblazer/test/operation/assertions.rb
|
17
|
-
|
data/.travis.yml
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
# module MiniTest::Assertions
|
2
|
-
module Trailblazer
|
3
|
-
module Test
|
4
|
-
# Evaluate value if it's a lambda, and let the caller know whether we need an
|
5
|
-
# assert_equal or an assert.
|
6
|
-
def self.expected(asserted, value, actual)
|
7
|
-
value.is_a?(Proc) ? [value.(actual: actual, asserted: asserted), false] : [value, true]
|
8
|
-
end
|
9
|
-
|
10
|
-
# Read the actual value from the asserted object (e.g. a model).
|
11
|
-
def self.actual(asserted, reader, name)
|
12
|
-
reader ? asserted.public_send(reader, name) : asserted.public_send(name)
|
13
|
-
end
|
14
|
-
|
15
|
-
module Assertions
|
16
|
-
module_function
|
17
|
-
|
18
|
-
# tuples = defaults.merge(overrides) # FIXME: merge with above!
|
19
|
-
|
20
|
-
# Test if all `tuples` values on `asserted` match the expected values.
|
21
|
-
# @param asserted Object Object that exposes attributes to test
|
22
|
-
# @param tuples Hash Key/value attribute pairs to test
|
23
|
-
# @param options Hash Default :reader is `asserted.{name}`,
|
24
|
-
# TODO: test err msgs!
|
25
|
-
def assert_exposes(asserted, tuples, reader: nil)
|
26
|
-
tuples.each do |k, v|
|
27
|
-
actual = Test.actual(asserted, reader, k)
|
28
|
-
expected, is_eq = Test.expected(asserted, v, actual)
|
29
|
-
|
30
|
-
is_eq ? assert_equal(expected, actual, "Property [#{k}] mismatch") : assert(expected, "Actual: #{actual.inspect}.")
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
# Trailblazer::Operation::Result.infect_an_assertion :assert_result_matches, :must_match, :do_not_flip
|
37
|
-
# Object.infect_an_assertion :assert_exposes, :must_expose, :do_not_flip
|