unreliable 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/spec/examples.txt ADDED
@@ -0,0 +1,14 @@
1
+ example_id | status | run_time |
2
+ ---------------------------------- | ------ | --------------- |
3
+ ./spec/env_spec.rb[1:1] | passed | 0.00296 seconds |
4
+ ./spec/env_spec.rb[1:2] | passed | 0.00045 seconds |
5
+ ./spec/model_select_spec.rb[1:1] | passed | 0.00056 seconds |
6
+ ./spec/model_select_spec.rb[1:2] | passed | 0.00084 seconds |
7
+ ./spec/model_select_spec.rb[1:3] | passed | 0.00077 seconds |
8
+ ./spec/model_select_spec.rb[1:4] | passed | 0.00077 seconds |
9
+ ./spec/model_subquery_spec.rb[1:1] | passed | 0.00145 seconds |
10
+ ./spec/model_update_spec.rb[1:1] | passed | 0.00013 seconds |
11
+ ./spec/railtie_spec.rb[1:1] | passed | 0.00073 seconds |
12
+ ./spec/railtie_spec.rb[1:2] | passed | 0.00019 seconds |
13
+ ./spec/version_spec.rb[1:1] | passed | 0.00128 seconds |
14
+ ./spec/version_spec.rb[1:2] | passed | 0.00015 seconds |
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Thing do
4
+ it "randomly selects from all" do
5
+ expect(Thing.all.to_sql).to end_with("ORDER BY RANDOM()")
6
+ end
7
+
8
+ it "randomly selects from some" do
9
+ expect(Thing.where(word: "foo").to_sql).to end_with("ORDER BY RANDOM()")
10
+ end
11
+
12
+ it "adds randomness to existing order" do
13
+ expect(Thing.order(:word).to_sql).to end_with('ORDER BY "things"."word" ASC, RANDOM()')
14
+ end
15
+
16
+ it "respects a disable block" do
17
+ Unreliable::Config.disable do
18
+ expect(Thing.where(word: "foo").to_sql).to_not end_with("ORDER BY RANDOM()")
19
+ expect(Thing.where(word: "foo").to_sql).to end_with(%q("things"."word" = 'foo'))
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Thing do
4
+ it "randomly selects in main query and subquery" do
5
+ # rubocop:disable Layout/SpaceInsideParens,Layout/DotPosition
6
+ expect( Thing.where(word: Thing.where(word: "foo")).to_sql ).
7
+ to end_with( %q[WHERE "things"."word" = 'foo' ORDER BY RANDOM()) ORDER BY RANDOM()] )
8
+ # rubocop:enable Layout/SpaceInsideParens,Layout/DotPosition
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Thing do
4
+ it "updates in random order tktk" do
5
+ # TODO
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Unreliable::Railtie do
4
+ it "has an initializer" do
5
+ expect(Unreliable::Railtie.initializers.count).to eq(1)
6
+ end
7
+
8
+ it "has an initializer with the correct name" do
9
+ expect(Unreliable::Railtie.initializers.first.name).to eq("unreliable.build_order_patch")
10
+ end
11
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler"
4
+
5
+ Bundler.require :default, :development
6
+
7
+ Combustion.initialize! :active_record
8
+
9
+ RSpec.configure do |config|
10
+ config.expect_with :rspec do |expectations|
11
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
12
+ end
13
+
14
+ config.mock_with :rspec do |mocks|
15
+ mocks.verify_partial_doubles = true
16
+ end
17
+
18
+ config.shared_context_metadata_behavior = :apply_to_host_groups
19
+ config.example_status_persistence_file_path = "spec/examples.txt"
20
+ config.warnings = true
21
+ config.default_formatter = "doc" if config.files_to_run.count == 1
22
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "unreliable/version"
4
+
5
+ RSpec.describe Unreliable, "version" do
6
+ it "is defined" do
7
+ expect(Unreliable::VERSION).to be
8
+ end
9
+
10
+ it "is correct" do
11
+ expect(Unreliable::VERSION).to start_with "0.1."
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,232 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: unreliable
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - James McCarthy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-03-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '5.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '5.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: railties
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '5.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '5.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: appraisal
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.4'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.4'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: combustion
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.3'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.3'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '13.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '13.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.25'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.25'
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.21'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.21'
139
+ - !ruby/object:Gem::Dependency
140
+ name: sqlite3
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '1.4'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '1.4'
153
+ - !ruby/object:Gem::Dependency
154
+ name: standard
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '1.7'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '1.7'
167
+ description: |
168
+ Unreliable helps uncover bugs in Rails apps that rely on ambiguous database ordering.
169
+ With it installed, a test suite is less likely to accidentally succeed.
170
+ email: jamie@mccarthy.vg
171
+ executables: []
172
+ extensions: []
173
+ extra_rdoc_files: []
174
+ files:
175
+ - Appraisals
176
+ - CHANGELOG.md
177
+ - CODE_OF_CONDUCT.md
178
+ - Gemfile
179
+ - LICENSE
180
+ - README.md
181
+ - Rakefile
182
+ - gemfiles/activerecord_5.0.gemfile
183
+ - gemfiles/activerecord_5.0.gemfile.lock
184
+ - gemfiles/activerecord_5.1.gemfile
185
+ - gemfiles/activerecord_5.1.gemfile.lock
186
+ - gemfiles/activerecord_5.2.gemfile
187
+ - gemfiles/activerecord_5.2.gemfile.lock
188
+ - gemfiles/activerecord_6.0.gemfile
189
+ - gemfiles/activerecord_6.0.gemfile.lock
190
+ - gemfiles/activerecord_6.1.gemfile
191
+ - gemfiles/activerecord_6.1.gemfile.lock
192
+ - gemfiles/activerecord_7.0.gemfile
193
+ - gemfiles/activerecord_7.0.gemfile.lock
194
+ - lib/unreliable.rb
195
+ - lib/unreliable/build_order.rb
196
+ - lib/unreliable/config.rb
197
+ - lib/unreliable/railtie.rb
198
+ - lib/unreliable/version.rb
199
+ - spec/env_spec.rb
200
+ - spec/examples.txt
201
+ - spec/model_select_spec.rb
202
+ - spec/model_subquery_spec.rb
203
+ - spec/model_update_spec.rb
204
+ - spec/railtie_spec.rb
205
+ - spec/spec_helper.rb
206
+ - spec/version_spec.rb
207
+ homepage: https://github.com/jamiemccarthy/unreliable
208
+ licenses:
209
+ - MIT
210
+ metadata:
211
+ changelog_uri: https://github.com/jamiemccarthy/unreliable/blob/main/CHANGELOG.md
212
+ rubygems_mfa_required: 'true'
213
+ post_install_message:
214
+ rdoc_options: []
215
+ require_paths:
216
+ - lib
217
+ required_ruby_version: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - ">="
220
+ - !ruby/object:Gem::Version
221
+ version: '2.6'
222
+ required_rubygems_version: !ruby/object:Gem::Requirement
223
+ requirements:
224
+ - - ">="
225
+ - !ruby/object:Gem::Version
226
+ version: '0'
227
+ requirements: []
228
+ rubygems_version: 3.1.6
229
+ signing_key:
230
+ specification_version: 4
231
+ summary: Randomize relation final order for tests
232
+ test_files: []