rspec-active_record 0.3.2 → 0.4.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/.rubocop.yml +8 -3
- data/CHANGELOG.md +5 -0
- data/Gemfile +6 -0
- data/README.md +2 -0
- data/lib/rspec/active_record/change_record.rb +3 -3
- data/lib/rspec/active_record/create_record.rb +16 -10
- data/lib/rspec/active_record/stub_models.rb +1 -0
- data/lib/rspec/active_record/version.rb +1 -1
- data/lib/rspec/active_record.rb +1 -1
- data/rspec-active_record.gemspec +1 -6
- metadata +3 -72
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7554766e4cdb7debbfac3df8d43b4b2f211fa47fa848e518e3d0e2c5aec0df42
|
|
4
|
+
data.tar.gz: 81925b6f2cd75bfde8d747ae62d4b1365af0ec580063c520418f3fc61a556e0b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4f927093f62c81b0403d035f6a49bd89620d5a4c9ecedb00f0a408adbee02f00a39b1f01df83875e4c26c5f22da50ac8930606df92a0af490fca9006864ed524
|
|
7
|
+
data.tar.gz: 19962a9c8758128a346982c5927fbfb6bcd2f42e1f1b3d9ff058aaf58e659b40dc1b57962b185304730013ae12884b10bab9dc0d2258096c3cbd94f531486c14
|
data/.rubocop.yml
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
AllCops:
|
|
2
2
|
TargetRubyVersion: 2.6
|
|
3
|
+
NewCops: enable
|
|
4
|
+
|
|
5
|
+
Layout/LineLength:
|
|
6
|
+
Max: 120
|
|
3
7
|
|
|
4
8
|
Metrics/BlockLength:
|
|
5
9
|
Exclude:
|
|
@@ -9,6 +13,10 @@ Metrics/BlockLength:
|
|
|
9
13
|
Metrics/MethodLength:
|
|
10
14
|
Enabled: false
|
|
11
15
|
|
|
16
|
+
Naming/PredicatePrefix:
|
|
17
|
+
AllowedMethods:
|
|
18
|
+
- does_not_match?
|
|
19
|
+
|
|
12
20
|
Style/StringLiterals:
|
|
13
21
|
Enabled: true
|
|
14
22
|
EnforcedStyle: double_quotes
|
|
@@ -16,6 +24,3 @@ Style/StringLiterals:
|
|
|
16
24
|
Style/StringLiteralsInInterpolation:
|
|
17
25
|
Enabled: true
|
|
18
26
|
EnforcedStyle: double_quotes
|
|
19
|
-
|
|
20
|
-
Layout/LineLength:
|
|
21
|
-
Max: 120
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
## [Unreleased]
|
|
2
2
|
|
|
3
|
+
## [0.4.0] - 2026-10-02
|
|
4
|
+
|
|
5
|
+
- Allow `create_record.matching` to take multiple attribute hashes
|
|
6
|
+
- Fix query cache causing issues between differently structured tables
|
|
7
|
+
|
|
3
8
|
## [0.3.2] - 2025-03-12
|
|
4
9
|
|
|
5
10
|
- Fix negative `change_record` to fail if at least 1 attribute changed from initial
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -43,6 +43,8 @@ You can also make sure that attributes match, if it fails you'll get RSpec diff
|
|
|
43
43
|
|
|
44
44
|
```ruby
|
|
45
45
|
expect { User.create!(name: "RSpec User") }.to create_record(User).matching(name: "RSpec User")
|
|
46
|
+
expect { User.create!([{name: "RSpec User"}, {name: "Test User"}]) }
|
|
47
|
+
.to create_record(User).matching({name: "RSpec User"}, {name: "Test User"})
|
|
46
48
|
```
|
|
47
49
|
|
|
48
50
|
You can also achieve similar results using a scope, but not that in this case you won't see a diff:
|
|
@@ -20,13 +20,13 @@ module RSpec
|
|
|
20
20
|
|
|
21
21
|
def matches?(block)
|
|
22
22
|
@from_diff = diff_unless_match(@record, @from)
|
|
23
|
-
@to_pre_match = !
|
|
23
|
+
@to_pre_match = !not_match_attributes?(@record, @to)
|
|
24
24
|
|
|
25
25
|
block.call
|
|
26
26
|
@updated_record = @record.class.base_class.find(@record.id)
|
|
27
27
|
|
|
28
28
|
@to_diff = diff_unless_match(@updated_record, @to)
|
|
29
|
-
@from_post_match = !
|
|
29
|
+
@from_post_match = !not_match_attributes?(@updated_record, @from)
|
|
30
30
|
|
|
31
31
|
(@from || @to) && !@from_diff && !@to_pre_match && !@to_diff && !@from_post_match
|
|
32
32
|
end
|
|
@@ -92,7 +92,7 @@ module RSpec
|
|
|
92
92
|
RSpec::Matchers::BuiltIn::HaveAttributes.new(attributes).matches?(record)
|
|
93
93
|
end
|
|
94
94
|
|
|
95
|
-
def
|
|
95
|
+
def not_match_attributes?(record, attributes)
|
|
96
96
|
return true unless attributes
|
|
97
97
|
|
|
98
98
|
RSpec::Matchers::BuiltIn::HaveAttributes.new(attributes).does_not_match?(record)
|
|
@@ -8,11 +8,12 @@ module RSpec
|
|
|
8
8
|
|
|
9
9
|
def initialize(scope)
|
|
10
10
|
@scope = scope
|
|
11
|
+
@attributes = []
|
|
11
12
|
super()
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
# Make sure that created record matches attributes
|
|
15
|
-
def matching(attributes)
|
|
16
|
+
def matching(*attributes)
|
|
16
17
|
@attributes = attributes
|
|
17
18
|
self
|
|
18
19
|
end
|
|
@@ -44,22 +45,26 @@ module RSpec
|
|
|
44
45
|
|
|
45
46
|
@new_records = @scope.where.not(@scope.primary_key => existing_ids).to_a
|
|
46
47
|
|
|
47
|
-
match_times? && match_attributes? && @new_records.present?
|
|
48
|
+
match_times? && @attributes.all? { |attrs| match_attributes?(attrs) } && @new_records.present?
|
|
48
49
|
end
|
|
49
50
|
|
|
50
51
|
def description
|
|
52
|
+
match_messages = @attributes.map do |attrs|
|
|
53
|
+
" matching #{format_hash(attrs)}"
|
|
54
|
+
end
|
|
55
|
+
|
|
51
56
|
message = "create #{scope_name}"
|
|
52
57
|
message += " #{@times} time#{"s" if @times != 1}" if @times
|
|
53
|
-
message += "
|
|
58
|
+
message += match_messages.join(",")
|
|
54
59
|
improve_hash_formatting message
|
|
55
60
|
end
|
|
56
61
|
|
|
57
62
|
def failure_message
|
|
58
63
|
failure = "expected to #{description} but"
|
|
59
|
-
if
|
|
60
|
-
"#{failure} created #{@new_records.size}"
|
|
61
|
-
else
|
|
64
|
+
if match_times?
|
|
62
65
|
add_diff "#{failure} did not"
|
|
66
|
+
else
|
|
67
|
+
"#{failure} created #{@new_records.size}"
|
|
63
68
|
end
|
|
64
69
|
end
|
|
65
70
|
|
|
@@ -70,7 +75,9 @@ module RSpec
|
|
|
70
75
|
private
|
|
71
76
|
|
|
72
77
|
def add_diff(message)
|
|
73
|
-
|
|
78
|
+
@attributes.each do |attrs|
|
|
79
|
+
message += "\n\n#{DiffForMultipleRecords.new(attrs, @new_records).call}" unless match_attributes?(attrs)
|
|
80
|
+
end
|
|
74
81
|
message
|
|
75
82
|
end
|
|
76
83
|
|
|
@@ -78,9 +85,8 @@ module RSpec
|
|
|
78
85
|
@times.nil? || @times == @new_records.size
|
|
79
86
|
end
|
|
80
87
|
|
|
81
|
-
def match_attributes?
|
|
82
|
-
@
|
|
83
|
-
@new_records.any? { |record| RSpec::Matchers::BuiltIn::HaveAttributes.new(@attributes).matches?(record) }
|
|
88
|
+
def match_attributes?(attrs)
|
|
89
|
+
@new_records.any? { |record| RSpec::Matchers::BuiltIn::HaveAttributes.new(attrs).matches?(record) }
|
|
84
90
|
end
|
|
85
91
|
|
|
86
92
|
def scope_name
|
|
@@ -40,6 +40,7 @@ module RSpec
|
|
|
40
40
|
# Creates temporary table. Only works correctly if DDL transactions are enabled.
|
|
41
41
|
# Takes same arguments as `create_table` in ActiveRecord migration.
|
|
42
42
|
def create_temporary_table(*args, **options, &block)
|
|
43
|
+
::ActiveRecord::Base.connection.clear_cache!
|
|
43
44
|
::ActiveRecord::Base.connection.create_table(*args, **options, &block)
|
|
44
45
|
end
|
|
45
46
|
end
|
data/lib/rspec/active_record.rb
CHANGED
|
@@ -45,7 +45,7 @@ module RSpec
|
|
|
45
45
|
|
|
46
46
|
# Allows matching that code inside a block destroyed specific record.
|
|
47
47
|
# @param record [ActiveRecord::Base] Model that should be destroyed
|
|
48
|
-
# @return [
|
|
48
|
+
# @return [DestroyRecord]
|
|
49
49
|
# @example Block destroyed record
|
|
50
50
|
# expect { user.destroy! }.to destroy_record(user)
|
|
51
51
|
def destroy_record(record)
|
data/rspec-active_record.gemspec
CHANGED
|
@@ -14,6 +14,7 @@ Gem::Specification.new do |spec|
|
|
|
14
14
|
spec.license = "MIT"
|
|
15
15
|
spec.required_ruby_version = ">= 2.6.0"
|
|
16
16
|
|
|
17
|
+
spec.metadata["rubygems_mfa_required"] = "true"
|
|
17
18
|
spec.metadata["homepage_uri"] = spec.homepage
|
|
18
19
|
spec.metadata["source_code_uri"] = spec.homepage
|
|
19
20
|
spec.metadata["changelog_uri"] = "#{spec.homepage}/CHANGELOG.md"
|
|
@@ -33,12 +34,6 @@ Gem::Specification.new do |spec|
|
|
|
33
34
|
spec.add_dependency "rspec-expectations"
|
|
34
35
|
spec.add_dependency "rspec-mocks"
|
|
35
36
|
|
|
36
|
-
spec.add_development_dependency "database_cleaner-active_record"
|
|
37
|
-
spec.add_development_dependency "rake"
|
|
38
|
-
spec.add_development_dependency "rspec"
|
|
39
|
-
spec.add_development_dependency "rubocop"
|
|
40
|
-
spec.add_development_dependency "sqlite3"
|
|
41
|
-
|
|
42
37
|
# For more information and examples about making a new gem, check out our
|
|
43
38
|
# guide at: https://bundler.io/guides/creating_gem.html
|
|
44
39
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rspec-active_record
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andrius Chamentauskas
|
|
@@ -51,76 +51,6 @@ dependencies:
|
|
|
51
51
|
- - ">="
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
53
|
version: '0'
|
|
54
|
-
- !ruby/object:Gem::Dependency
|
|
55
|
-
name: database_cleaner-active_record
|
|
56
|
-
requirement: !ruby/object:Gem::Requirement
|
|
57
|
-
requirements:
|
|
58
|
-
- - ">="
|
|
59
|
-
- !ruby/object:Gem::Version
|
|
60
|
-
version: '0'
|
|
61
|
-
type: :development
|
|
62
|
-
prerelease: false
|
|
63
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
-
requirements:
|
|
65
|
-
- - ">="
|
|
66
|
-
- !ruby/object:Gem::Version
|
|
67
|
-
version: '0'
|
|
68
|
-
- !ruby/object:Gem::Dependency
|
|
69
|
-
name: rake
|
|
70
|
-
requirement: !ruby/object:Gem::Requirement
|
|
71
|
-
requirements:
|
|
72
|
-
- - ">="
|
|
73
|
-
- !ruby/object:Gem::Version
|
|
74
|
-
version: '0'
|
|
75
|
-
type: :development
|
|
76
|
-
prerelease: false
|
|
77
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
-
requirements:
|
|
79
|
-
- - ">="
|
|
80
|
-
- !ruby/object:Gem::Version
|
|
81
|
-
version: '0'
|
|
82
|
-
- !ruby/object:Gem::Dependency
|
|
83
|
-
name: rspec
|
|
84
|
-
requirement: !ruby/object:Gem::Requirement
|
|
85
|
-
requirements:
|
|
86
|
-
- - ">="
|
|
87
|
-
- !ruby/object:Gem::Version
|
|
88
|
-
version: '0'
|
|
89
|
-
type: :development
|
|
90
|
-
prerelease: false
|
|
91
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
-
requirements:
|
|
93
|
-
- - ">="
|
|
94
|
-
- !ruby/object:Gem::Version
|
|
95
|
-
version: '0'
|
|
96
|
-
- !ruby/object:Gem::Dependency
|
|
97
|
-
name: rubocop
|
|
98
|
-
requirement: !ruby/object:Gem::Requirement
|
|
99
|
-
requirements:
|
|
100
|
-
- - ">="
|
|
101
|
-
- !ruby/object:Gem::Version
|
|
102
|
-
version: '0'
|
|
103
|
-
type: :development
|
|
104
|
-
prerelease: false
|
|
105
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
-
requirements:
|
|
107
|
-
- - ">="
|
|
108
|
-
- !ruby/object:Gem::Version
|
|
109
|
-
version: '0'
|
|
110
|
-
- !ruby/object:Gem::Dependency
|
|
111
|
-
name: sqlite3
|
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
|
113
|
-
requirements:
|
|
114
|
-
- - ">="
|
|
115
|
-
- !ruby/object:Gem::Version
|
|
116
|
-
version: '0'
|
|
117
|
-
type: :development
|
|
118
|
-
prerelease: false
|
|
119
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
120
|
-
requirements:
|
|
121
|
-
- - ">="
|
|
122
|
-
- !ruby/object:Gem::Version
|
|
123
|
-
version: '0'
|
|
124
54
|
description: RSpec matchers to check when ActiveRecord objects are created/updated/destroyed
|
|
125
55
|
email:
|
|
126
56
|
- andrius.chamentauskas@gmail.com
|
|
@@ -150,6 +80,7 @@ homepage: https://github.com/andriusch/rspec-active_record
|
|
|
150
80
|
licenses:
|
|
151
81
|
- MIT
|
|
152
82
|
metadata:
|
|
83
|
+
rubygems_mfa_required: 'true'
|
|
153
84
|
homepage_uri: https://github.com/andriusch/rspec-active_record
|
|
154
85
|
source_code_uri: https://github.com/andriusch/rspec-active_record
|
|
155
86
|
changelog_uri: https://github.com/andriusch/rspec-active_record/CHANGELOG.md
|
|
@@ -167,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
167
98
|
- !ruby/object:Gem::Version
|
|
168
99
|
version: '0'
|
|
169
100
|
requirements: []
|
|
170
|
-
rubygems_version: 4.0.
|
|
101
|
+
rubygems_version: 4.0.19
|
|
171
102
|
specification_version: 4
|
|
172
103
|
summary: RSpec matchers for ActiveRecord
|
|
173
104
|
test_files: []
|