ardb 0.29.1 → 0.29.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.l.yml +8 -0
- data/.rubocop.yml +3 -0
- data/.t.yml +6 -0
- data/Gemfile +4 -2
- data/ardb.gemspec +9 -6
- data/bin/ardb +2 -0
- data/lib/ardb.rb +75 -61
- data/lib/ardb/adapter/base.rb +40 -19
- data/lib/ardb/adapter/mysql.rb +2 -0
- data/lib/ardb/adapter/postgresql.rb +36 -25
- data/lib/ardb/adapter/sqlite.rb +7 -7
- data/lib/ardb/adapter_spy.rb +16 -14
- data/lib/ardb/cli.rb +23 -18
- data/lib/ardb/cli/clirb.rb +5 -0
- data/lib/ardb/cli/commands.rb +184 -95
- data/lib/ardb/db_tests.rb +2 -0
- data/lib/ardb/default_order_by.rb +13 -11
- data/lib/ardb/migration.rb +7 -4
- data/lib/ardb/record_spy.rb +42 -38
- data/lib/ardb/relation_spy.rb +27 -25
- data/lib/ardb/require_autoloaded_active_record_files.rb +3 -1
- data/lib/ardb/test_helpers.rb +11 -9
- data/lib/ardb/use_db_default.rb +9 -7
- data/lib/ardb/version.rb +3 -1
- data/script/determine_autoloaded_active_record_files.rb +22 -20
- data/test/helper.rb +2 -0
- data/test/support/factory.rb +2 -1
- data/test/support/fake_schema.rb +3 -1
- data/test/support/postgresql/schema.rb +3 -1
- data/test/support/postgresql/setup_test_db.rb +3 -1
- data/test/support/relative_require_test_db_file.rb +1 -0
- data/test/support/require_test_db_file.rb +1 -0
- data/test/unit/adapter/base_tests.rb +9 -5
- data/test/unit/adapter/mysql_tests.rb +2 -0
- data/test/unit/adapter/postgresql_tests.rb +14 -14
- data/test/unit/adapter/sqlite_tests.rb +2 -0
- data/test/unit/adapter_spy_tests.rb +4 -1
- data/test/unit/ardb_tests.rb +28 -13
- data/test/unit/cli_tests.rb +47 -34
- data/test/unit/db_tests_tests.rb +4 -1
- data/test/unit/default_order_by_tests.rb +18 -13
- data/test/unit/migration_tests.rb +8 -5
- data/test/unit/record_spy_tests.rb +21 -14
- data/test/unit/relation_spy_tests.rb +28 -22
- data/test/unit/test_helpers_tests.rb +4 -1
- data/test/unit/use_db_default_tests.rb +16 -7
- metadata +27 -11
data/test/unit/cli_tests.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "assert"
|
2
4
|
require "ardb/cli"
|
3
5
|
|
@@ -27,16 +29,19 @@ class Ardb::CLI
|
|
27
29
|
should "know its commands" do
|
28
30
|
assert_equal 9, COMMANDS.size
|
29
31
|
|
30
|
-
assert_instance_of InvalidCommand,
|
31
|
-
assert_instance_of ConnectCommand,
|
32
|
-
assert_instance_of CreateCommand,
|
33
|
-
assert_instance_of DropCommand,
|
34
|
-
assert_instance_of
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
assert_instance_of
|
39
|
-
assert_instance_of
|
32
|
+
assert_instance_of InvalidCommand, COMMANDS[Factory.string]
|
33
|
+
assert_instance_of ConnectCommand, COMMANDS["connect"]
|
34
|
+
assert_instance_of CreateCommand, COMMANDS["create"]
|
35
|
+
assert_instance_of DropCommand, COMMANDS["drop"]
|
36
|
+
assert_instance_of(
|
37
|
+
GenerateMigrationCommand,
|
38
|
+
COMMANDS["generate-migration"],
|
39
|
+
)
|
40
|
+
assert_instance_of MigrateCommand, COMMANDS["migrate"]
|
41
|
+
assert_instance_of MigrateUpCommand, COMMANDS["migrate-up"]
|
42
|
+
assert_instance_of MigrateDownCommand, COMMANDS["migrate-down"]
|
43
|
+
assert_instance_of MigrateForwardCommand, COMMANDS["migrate-forward"]
|
44
|
+
assert_instance_of MigrateBackwardCommand, COMMANDS["migrate-backward"]
|
40
45
|
end
|
41
46
|
end
|
42
47
|
|
@@ -58,9 +63,9 @@ class Ardb::CLI
|
|
58
63
|
setup do
|
59
64
|
@command_name = Factory.string
|
60
65
|
@command_class = Class.new{ include ValidCommand }
|
61
|
-
Assert.stub(@command_class, :command_name)
|
66
|
+
Assert.stub(@command_class, :command_name){ @command_name }
|
62
67
|
|
63
|
-
@command_spy
|
68
|
+
@command_spy = CommandSpy.new(@command_name)
|
64
69
|
Assert.stub(@command_class, :new){ @command_spy }
|
65
70
|
COMMANDS.add(@command_class)
|
66
71
|
|
@@ -143,7 +148,7 @@ class Ardb::CLI
|
|
143
148
|
class RunWithHelpTests < RunSetupTests
|
144
149
|
desc "and run with the help switch"
|
145
150
|
setup do
|
146
|
-
@cli.run([
|
151
|
+
@cli.run(["--help"])
|
147
152
|
end
|
148
153
|
|
149
154
|
should "output the invalid command's help" do
|
@@ -159,7 +164,7 @@ class Ardb::CLI
|
|
159
164
|
class RunWithVersionTests < RunSetupTests
|
160
165
|
desc "and run with the version switch"
|
161
166
|
setup do
|
162
|
-
@cli.run([
|
167
|
+
@cli.run(["--version"])
|
163
168
|
end
|
164
169
|
|
165
170
|
should "output its version" do
|
@@ -213,8 +218,8 @@ class Ardb::CLI
|
|
213
218
|
end
|
214
219
|
|
215
220
|
should "parse its argv on run" do
|
216
|
-
assert_raises(CLIRB::HelpExit){ subject.new.run([
|
217
|
-
assert_raises(CLIRB::VersionExit){ subject.new.run([
|
221
|
+
assert_raises(CLIRB::HelpExit){ subject.new.run(["--help"]) }
|
222
|
+
assert_raises(CLIRB::VersionExit){ subject.new.run(["--version"]) }
|
218
223
|
end
|
219
224
|
|
220
225
|
should "raise a help exit if its name is empty" do
|
@@ -273,7 +278,7 @@ class Ardb::CLI
|
|
273
278
|
|
274
279
|
should "take custom CLIRB build procs" do
|
275
280
|
cmd = @command_class.new do
|
276
|
-
option "test", "testing", :
|
281
|
+
option "test", "testing", abbrev: "t"
|
277
282
|
end
|
278
283
|
cmd.run(["-t"], @stdout, @stderr)
|
279
284
|
assert_true cmd.clirb.opts["test"]
|
@@ -290,8 +295,8 @@ class Ardb::CLI
|
|
290
295
|
end
|
291
296
|
|
292
297
|
should "know its command help" do
|
293
|
-
Assert.stub(subject, :command_name)
|
294
|
-
Assert.stub(subject, :command_summary)
|
298
|
+
Assert.stub(subject, :command_name){ "some-command" }
|
299
|
+
Assert.stub(subject, :command_summary){ "some-summary" }
|
295
300
|
|
296
301
|
exp = "Usage: ardb #{subject.command_name} [options]\n\n" \
|
297
302
|
"Options: #{subject.clirb}\n" \
|
@@ -326,7 +331,9 @@ class Ardb::CLI
|
|
326
331
|
assert_equal [false], @ardb_init_called_with
|
327
332
|
assert_true @adapter_spy.connect_db_called?
|
328
333
|
|
329
|
-
exp =
|
334
|
+
exp =
|
335
|
+
"connected to #{Ardb.config.adapter} "\
|
336
|
+
"db #{Ardb.config.database.inspect}\n"
|
330
337
|
assert_equal exp, @stdout.read
|
331
338
|
end
|
332
339
|
|
@@ -372,7 +379,8 @@ class Ardb::CLI
|
|
372
379
|
assert_equal [false], @ardb_init_called_with
|
373
380
|
assert_true @adapter_spy.create_db_called?
|
374
381
|
|
375
|
-
exp =
|
382
|
+
exp =
|
383
|
+
"created #{Ardb.config.adapter} db #{Ardb.config.database.inspect}\n"
|
376
384
|
assert_equal exp, @stdout.read
|
377
385
|
end
|
378
386
|
|
@@ -414,7 +422,8 @@ class Ardb::CLI
|
|
414
422
|
assert_equal [true], @ardb_init_called_with
|
415
423
|
assert_true @adapter_spy.drop_db_called?
|
416
424
|
|
417
|
-
exp =
|
425
|
+
exp =
|
426
|
+
"dropped #{Ardb.config.adapter} db #{Ardb.config.database.inspect}\n"
|
418
427
|
assert_equal exp, @stdout.read
|
419
428
|
end
|
420
429
|
|
@@ -470,19 +479,20 @@ class Ardb::CLI
|
|
470
479
|
assert_equal exp, @stdout.read
|
471
480
|
end
|
472
481
|
|
473
|
-
should "re-raise a specific argument error on
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
cmd = @command_class.new
|
478
|
-
cmd.run([])
|
479
|
-
rescue ArgumentError => err
|
482
|
+
should "re-raise a specific argument error on "\
|
483
|
+
"migration \"no identifer\" errors" do
|
484
|
+
Assert.stub(@migration_class, :new) do
|
485
|
+
raise Ardb::Migration::NoIdentifierError
|
480
486
|
end
|
481
487
|
|
482
|
-
|
488
|
+
ex =
|
489
|
+
assert_that{
|
490
|
+
cmd = @command_class.new
|
491
|
+
cmd.run([])
|
492
|
+
}.raises(ArgumentError)
|
483
493
|
exp = "MIGRATION-NAME must be provided"
|
484
|
-
assert_equal exp,
|
485
|
-
assert_not_empty
|
494
|
+
assert_equal exp, ex.message
|
495
|
+
assert_not_empty ex.backtrace
|
486
496
|
end
|
487
497
|
|
488
498
|
should "output any errors and raise an exit error when run" do
|
@@ -490,7 +500,9 @@ class Ardb::CLI
|
|
490
500
|
err.set_backtrace(Factory.integer(3).times.map{ Factory.path })
|
491
501
|
Assert.stub(@migration_class, :new){ raise err }
|
492
502
|
|
493
|
-
assert_raises(CommandExitError)
|
503
|
+
assert_raises(CommandExitError) do
|
504
|
+
subject.run([@identifier], @stdout, @stderr)
|
505
|
+
end
|
494
506
|
err_output = @stderr.read
|
495
507
|
|
496
508
|
assert_includes err.to_s, err_output
|
@@ -532,7 +544,8 @@ class Ardb::CLI
|
|
532
544
|
assert_true @adapter_spy.dump_schema_called?
|
533
545
|
end
|
534
546
|
|
535
|
-
should "only init ardb and migrate when run with no schema dump
|
547
|
+
should "only init ardb and migrate when run with no schema dump "\
|
548
|
+
"env var set" do
|
536
549
|
ENV["ARDB_MIGRATE_NO_SCHEMA"] = "yes"
|
537
550
|
subject.run([], @stdout, @stderr)
|
538
551
|
|
data/test/unit/db_tests_tests.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "assert"
|
2
4
|
require "ardb/db_tests"
|
3
5
|
|
@@ -19,7 +21,8 @@ class Ardb::DbTests
|
|
19
21
|
assert subject < Assert::Context
|
20
22
|
end
|
21
23
|
|
22
|
-
should "add an around callback that runs tests in a transaction that
|
24
|
+
should "add an around callback that runs tests in a transaction that "\
|
25
|
+
"rolls back" do
|
23
26
|
assert_equal 1, subject.arounds.size
|
24
27
|
callback = subject.arounds.first
|
25
28
|
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "assert"
|
2
4
|
require "ardb/default_order_by"
|
3
5
|
|
4
|
-
require "much-
|
6
|
+
require "much-mixin"
|
5
7
|
require "ardb/record_spy"
|
6
8
|
|
7
9
|
module Ardb::DefaultOrderBy
|
@@ -9,7 +11,7 @@ module Ardb::DefaultOrderBy
|
|
9
11
|
desc "Ardb::DefaultOrderBy"
|
10
12
|
setup do
|
11
13
|
order_by_attribute = @order_by_attribute = Factory.string.to_sym
|
12
|
-
@scope_proc = proc{ self.class.where(:
|
14
|
+
@scope_proc = proc{ self.class.where(grouping: grouping) }
|
13
15
|
@record_class = Ardb::RecordSpy.new do
|
14
16
|
include Ardb::DefaultOrderBy
|
15
17
|
attr_accessor order_by_attribute, :grouping
|
@@ -20,8 +22,8 @@ module Ardb::DefaultOrderBy
|
|
20
22
|
should have_imeths :default_order_by
|
21
23
|
should have_imeths :ardb_default_order_by_config
|
22
24
|
|
23
|
-
should "use much-
|
24
|
-
assert_includes
|
25
|
+
should "use much-mixin" do
|
26
|
+
assert_includes MuchMixin, Ardb::DefaultOrderBy
|
25
27
|
end
|
26
28
|
|
27
29
|
should "know its default attribute, preprocessor and separator" do
|
@@ -44,8 +46,8 @@ module Ardb::DefaultOrderBy
|
|
44
46
|
|
45
47
|
should "allow customizing the config using `default_order_by`" do
|
46
48
|
subject.default_order_by({
|
47
|
-
:
|
48
|
-
:
|
49
|
+
attribute: @order_by_attribute,
|
50
|
+
scope: @scope_proc,
|
49
51
|
})
|
50
52
|
|
51
53
|
config = subject.ardb_default_order_by_config
|
@@ -59,7 +61,7 @@ module Ardb::DefaultOrderBy
|
|
59
61
|
callback = subject.callbacks.find{ |v| v.type == :before_validation }
|
60
62
|
assert_not_nil callback
|
61
63
|
assert_equal [:ardb_default_order_by], callback.args
|
62
|
-
assert_equal({ :
|
64
|
+
assert_equal({ on: :create }, callback.options)
|
63
65
|
end
|
64
66
|
end
|
65
67
|
|
@@ -67,11 +69,12 @@ module Ardb::DefaultOrderBy
|
|
67
69
|
desc "when init"
|
68
70
|
setup do
|
69
71
|
@record_class.default_order_by({
|
70
|
-
:
|
71
|
-
:
|
72
|
+
attribute: @order_by_attribute,
|
73
|
+
scope: @scope_proc,
|
72
74
|
})
|
73
75
|
@current_max = Factory.integer
|
74
|
-
@record_class.relation_spy.maximum_values[@order_by_attribute] =
|
76
|
+
@record_class.relation_spy.maximum_values[@order_by_attribute] =
|
77
|
+
@current_max
|
75
78
|
|
76
79
|
@record = @record_class.new
|
77
80
|
@record.grouping = Factory.string
|
@@ -84,7 +87,8 @@ module Ardb::DefaultOrderBy
|
|
84
87
|
assert_equal @current_max + 1, subject.send(@order_by_attribute)
|
85
88
|
end
|
86
89
|
|
87
|
-
should "reset its order-by to a start value when there isn't a
|
90
|
+
should "reset its order-by to a start value when there isn't a "\
|
91
|
+
"current max" do
|
88
92
|
@record_class.relation_spy.maximum_values.delete(@order_by_attribute)
|
89
93
|
|
90
94
|
subject.instance_eval{ reset_order_by }
|
@@ -98,7 +102,7 @@ module Ardb::DefaultOrderBy
|
|
98
102
|
assert_equal 1, @record_class.relation_spy.applied.size
|
99
103
|
applied_expression = @record_class.relation_spy.applied.last
|
100
104
|
assert_equal :where, applied_expression.type
|
101
|
-
assert_equal [{ :
|
105
|
+
assert_equal [{ grouping: subject.grouping }], applied_expression.args
|
102
106
|
end
|
103
107
|
|
104
108
|
should "reset its order-by using `ardb_default_order_by`" do
|
@@ -107,7 +111,8 @@ module Ardb::DefaultOrderBy
|
|
107
111
|
assert_equal @current_max + 1, subject.send(@order_by_attribute)
|
108
112
|
end
|
109
113
|
|
110
|
-
should "not reset its order-by if its already set using
|
114
|
+
should "not reset its order-by if its already set using "\
|
115
|
+
"`ardb_default_order_by`" do
|
111
116
|
current_order_by = Factory.integer
|
112
117
|
subject.send("#{@order_by_attribute}=", current_order_by)
|
113
118
|
subject.instance_eval{ ardb_default_order_by }
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "assert"
|
2
4
|
require "ardb/migration"
|
3
5
|
|
@@ -36,7 +38,7 @@ class Ardb::Migration
|
|
36
38
|
end
|
37
39
|
subject{ @migration }
|
38
40
|
|
39
|
-
should have_readers
|
41
|
+
should have_readers :migrations_path, :identifier
|
40
42
|
should have_readers :class_name, :file_name, :file_path, :source
|
41
43
|
should have_imeths :save!
|
42
44
|
|
@@ -55,10 +57,11 @@ class Ardb::Migration
|
|
55
57
|
|
56
58
|
exp_version = ActiveRecord::Migration.current_version
|
57
59
|
exp =
|
58
|
-
"class #{subject.class_name}
|
59
|
-
|
60
|
-
|
61
|
-
|
60
|
+
"class #{subject.class_name} "\
|
61
|
+
"< ActiveRecord::Migration[#{exp_version}]\n" \
|
62
|
+
" def change\n" \
|
63
|
+
" end\n" \
|
64
|
+
"end\n"
|
62
65
|
assert_equal exp, subject.source
|
63
66
|
end
|
64
67
|
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "assert"
|
2
4
|
require "ardb/record_spy"
|
3
5
|
|
4
|
-
require "much-
|
6
|
+
require "much-mixin"
|
5
7
|
|
6
8
|
module Ardb::RecordSpy
|
7
9
|
class UnitTests < Assert::Context
|
@@ -40,8 +42,8 @@ module Ardb::RecordSpy
|
|
40
42
|
should have_imeths :group, :having, :order, :reverse_order, :readonly
|
41
43
|
should have_imeths :limit, :offset, :merge, :except, :only
|
42
44
|
|
43
|
-
should "use much-
|
44
|
-
assert_includes
|
45
|
+
should "use much-mixin" do
|
46
|
+
assert_includes MuchMixin, Ardb::RecordSpy
|
45
47
|
end
|
46
48
|
|
47
49
|
should "allow reading and writing the record's table name" do
|
@@ -54,7 +56,7 @@ module Ardb::RecordSpy
|
|
54
56
|
end
|
55
57
|
|
56
58
|
should "add an association config with #belongs_to" do
|
57
|
-
subject.belongs_to :area, :
|
59
|
+
subject.belongs_to :area, foreign_key: :area_id
|
58
60
|
association = subject.associations.last
|
59
61
|
assert_equal :belongs_to, association.type
|
60
62
|
assert_equal :area, association.name
|
@@ -62,7 +64,7 @@ module Ardb::RecordSpy
|
|
62
64
|
end
|
63
65
|
|
64
66
|
should "add an association config with #has_many" do
|
65
|
-
subject.has_many :comments, :
|
67
|
+
subject.has_many :comments, as: :parent
|
66
68
|
association = subject.associations.last
|
67
69
|
assert_equal :has_many, association.type
|
68
70
|
assert_equal :comments, association.name
|
@@ -70,7 +72,7 @@ module Ardb::RecordSpy
|
|
70
72
|
end
|
71
73
|
|
72
74
|
should "add an association config with #has_one" do
|
73
|
-
subject.has_one :linking, :
|
75
|
+
subject.has_one :linking, class_name: "Linking"
|
74
76
|
association = subject.associations.last
|
75
77
|
assert_equal :has_one, association.type
|
76
78
|
assert_equal :linking, association.name
|
@@ -82,7 +84,7 @@ module Ardb::RecordSpy
|
|
82
84
|
end
|
83
85
|
|
84
86
|
should "add a validation config for \"*_of\" validations" do
|
85
|
-
subject.validates_presence_of :name, :email, :
|
87
|
+
subject.validates_presence_of :name, :email, on: :create
|
86
88
|
validation = subject.validations.last
|
87
89
|
assert_equal :presence, validation.type
|
88
90
|
assert_equal :create, validation.options[:on]
|
@@ -109,7 +111,7 @@ module Ardb::RecordSpy
|
|
109
111
|
end
|
110
112
|
|
111
113
|
should "add a validation config with #validates_each" do
|
112
|
-
block = proc{
|
114
|
+
block = proc{}
|
113
115
|
subject.validates_each(:name, :email, &block)
|
114
116
|
validation = subject.validations.last
|
115
117
|
assert_equal :each, validation.type
|
@@ -124,7 +126,7 @@ module Ardb::RecordSpy
|
|
124
126
|
assert_equal :custom, validation.type
|
125
127
|
assert_equal :some_method, validation.method_name
|
126
128
|
|
127
|
-
block = proc{
|
129
|
+
block = proc{}
|
128
130
|
subject.validate(&block)
|
129
131
|
validation = subject.validations.last
|
130
132
|
assert_equal :custom, validation.type
|
@@ -143,7 +145,7 @@ module Ardb::RecordSpy
|
|
143
145
|
end
|
144
146
|
|
145
147
|
should "add a callback config with a block" do
|
146
|
-
subject.before_validation(:
|
148
|
+
subject.before_validation(on: :create) do
|
147
149
|
self.name = "test"
|
148
150
|
end
|
149
151
|
callback = subject.callbacks.last
|
@@ -176,7 +178,12 @@ module Ardb::RecordSpy
|
|
176
178
|
assert_respond_to "around_#{name}", subject
|
177
179
|
assert_respond_to "after_#{name}", subject
|
178
180
|
|
179
|
-
callback_name =
|
181
|
+
callback_name =
|
182
|
+
[
|
183
|
+
"before_#{name}",
|
184
|
+
"around_#{name}",
|
185
|
+
"after_#{name}",
|
186
|
+
].sample
|
180
187
|
method_name = Factory.string
|
181
188
|
subject.send(callback_name, method_name)
|
182
189
|
callback = subject.callbacks.last
|
@@ -184,7 +191,7 @@ module Ardb::RecordSpy
|
|
184
191
|
assert_equal [method_name], callback.args
|
185
192
|
|
186
193
|
name = Factory.string
|
187
|
-
subject.define_model_callbacks(name, :
|
194
|
+
subject.define_model_callbacks(name, only: [:before])
|
188
195
|
|
189
196
|
assert_respond_to "before_#{name}", subject
|
190
197
|
assert_not_respond_to "around_#{name}", subject
|
@@ -332,8 +339,8 @@ module Ardb::RecordSpy
|
|
332
339
|
assert_equal "other thing", subject.ho_thing
|
333
340
|
|
334
341
|
assert_empty subject.hm_things
|
335
|
-
subject.hm_things = [1,2,3]
|
336
|
-
assert_equal [1,2,3], subject.hm_things
|
342
|
+
subject.hm_things = [1, 2, 3]
|
343
|
+
assert_equal [1, 2, 3], subject.hm_things
|
337
344
|
end
|
338
345
|
|
339
346
|
should "default its manually run callbacks" do
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "assert"
|
2
4
|
require "ardb/relation_spy"
|
3
5
|
|
@@ -49,7 +51,8 @@ class Ardb::RelationSpy
|
|
49
51
|
assert_equal other_relation, subject
|
50
52
|
end
|
51
53
|
|
52
|
-
should "build a fake sql string for its applied expressions using
|
54
|
+
should "build a fake sql string for its applied expressions using "\
|
55
|
+
"`to_sql`" do
|
53
56
|
subject.select "column"
|
54
57
|
subject.from "table"
|
55
58
|
subject.joins "my_table.my_column ON my_table.my_column = table.column"
|
@@ -81,7 +84,7 @@ class Ardb::RelationSpy
|
|
81
84
|
should "add a select applied expression with the passed args" do
|
82
85
|
assert_instance_of AppliedExpression, @applied
|
83
86
|
assert_equal :select, @applied.type
|
84
|
-
assert_equal [
|
87
|
+
assert_equal [:column_a, :column_b], @applied.args
|
85
88
|
end
|
86
89
|
end
|
87
90
|
|
@@ -95,7 +98,7 @@ class Ardb::RelationSpy
|
|
95
98
|
should "add a from applied expression with the passed args" do
|
96
99
|
assert_instance_of AppliedExpression, @applied
|
97
100
|
assert_equal :from, @applied.type
|
98
|
-
assert_equal [
|
101
|
+
assert_equal ["some SQL"], @applied.args
|
99
102
|
end
|
100
103
|
end
|
101
104
|
|
@@ -109,7 +112,7 @@ class Ardb::RelationSpy
|
|
109
112
|
should "add an includes applied expression with the passed args" do
|
110
113
|
assert_instance_of AppliedExpression, @applied
|
111
114
|
assert_equal :includes, @applied.type
|
112
|
-
assert_equal [
|
115
|
+
assert_equal [:table_a, :table_b], @applied.args
|
113
116
|
end
|
114
117
|
end
|
115
118
|
|
@@ -123,21 +126,21 @@ class Ardb::RelationSpy
|
|
123
126
|
should "add a joins applied expression with the passed args" do
|
124
127
|
assert_instance_of AppliedExpression, @applied
|
125
128
|
assert_equal :joins, @applied.type
|
126
|
-
assert_equal [
|
129
|
+
assert_equal [:table_a, :table_b], @applied.args
|
127
130
|
end
|
128
131
|
end
|
129
132
|
|
130
133
|
class WhereTests < UnitTests
|
131
134
|
desc "where"
|
132
135
|
setup do
|
133
|
-
@relation_spy.where :
|
136
|
+
@relation_spy.where column_a: "some value"
|
134
137
|
@applied = subject.applied.first
|
135
138
|
end
|
136
139
|
|
137
140
|
should "add a where applied expression with the passed args" do
|
138
141
|
assert_instance_of AppliedExpression, @applied
|
139
142
|
assert_equal :where, @applied.type
|
140
|
-
assert_equal [
|
143
|
+
assert_equal [{ column_a: "some value" }], @applied.args
|
141
144
|
end
|
142
145
|
end
|
143
146
|
|
@@ -151,7 +154,7 @@ class Ardb::RelationSpy
|
|
151
154
|
should "add an order applied expression with the passed args" do
|
152
155
|
assert_instance_of AppliedExpression, @applied
|
153
156
|
assert_equal :order, @applied.type
|
154
|
-
assert_equal [
|
157
|
+
assert_equal [:column_a, :column_b], @applied.args
|
155
158
|
end
|
156
159
|
end
|
157
160
|
|
@@ -178,7 +181,7 @@ class Ardb::RelationSpy
|
|
178
181
|
should "add a group applied expression with the passed args" do
|
179
182
|
assert_instance_of AppliedExpression, @applied
|
180
183
|
assert_equal :group, @applied.type
|
181
|
-
assert_equal [
|
184
|
+
assert_equal [:column_a, :column_b], @applied.args
|
182
185
|
end
|
183
186
|
end
|
184
187
|
|
@@ -192,7 +195,7 @@ class Ardb::RelationSpy
|
|
192
195
|
should "add a having applied expression with the passed args" do
|
193
196
|
assert_instance_of AppliedExpression, @applied
|
194
197
|
assert_equal :having, @applied.type
|
195
|
-
assert_equal [
|
198
|
+
assert_equal ["COUNT(column_a) > 0"], @applied.args
|
196
199
|
end
|
197
200
|
end
|
198
201
|
|
@@ -206,7 +209,7 @@ class Ardb::RelationSpy
|
|
206
209
|
should "add a readonly applied expression with the passed args" do
|
207
210
|
assert_instance_of AppliedExpression, @applied
|
208
211
|
assert_equal :readonly, @applied.type
|
209
|
-
assert_equal [
|
212
|
+
assert_equal [true], @applied.args
|
210
213
|
end
|
211
214
|
end
|
212
215
|
|
@@ -220,7 +223,7 @@ class Ardb::RelationSpy
|
|
220
223
|
should "add a limit applied expression with the passed args" do
|
221
224
|
assert_instance_of AppliedExpression, @applied
|
222
225
|
assert_equal :limit, @applied.type
|
223
|
-
assert_equal [
|
226
|
+
assert_equal [100], @applied.args
|
224
227
|
end
|
225
228
|
|
226
229
|
should "set it's limit value" do
|
@@ -238,7 +241,7 @@ class Ardb::RelationSpy
|
|
238
241
|
should "add an offset applied expression with the passed args" do
|
239
242
|
assert_instance_of AppliedExpression, @applied
|
240
243
|
assert_equal :offset, @applied.type
|
241
|
-
assert_equal [
|
244
|
+
assert_equal [100], @applied.args
|
242
245
|
end
|
243
246
|
|
244
247
|
should "set it's offset value" do
|
@@ -249,7 +252,8 @@ class Ardb::RelationSpy
|
|
249
252
|
class MergeWithARelationSpyTests < UnitTests
|
250
253
|
desc "merge with a relation spy"
|
251
254
|
setup do
|
252
|
-
@other_relation_spy =
|
255
|
+
@other_relation_spy =
|
256
|
+
Ardb::RelationSpy.new.select("column").joins("table")
|
253
257
|
@relation_spy.merge @other_relation_spy
|
254
258
|
end
|
255
259
|
|
@@ -271,7 +275,7 @@ class Ardb::RelationSpy
|
|
271
275
|
should "add a merge applied expression with the passed args" do
|
272
276
|
assert_instance_of AppliedExpression, @applied
|
273
277
|
assert_equal :merge, @applied.type
|
274
|
-
assert_equal [
|
278
|
+
assert_equal [@fake_relation], @applied.args
|
275
279
|
end
|
276
280
|
end
|
277
281
|
|
@@ -290,7 +294,7 @@ class Ardb::RelationSpy
|
|
290
294
|
class WithExpressionsTests < UnitTests
|
291
295
|
setup do
|
292
296
|
@relation_spy.select("column").includes("table").joins("table")
|
293
|
-
@relation_spy.where(:
|
297
|
+
@relation_spy.where(column: "value").order("column")
|
294
298
|
@relation_spy.group("column").having("count(*) > 1")
|
295
299
|
@relation_spy.limit(1).offset(1)
|
296
300
|
end
|
@@ -307,10 +311,10 @@ class Ardb::RelationSpy
|
|
307
311
|
should "remove any applied expressions in the passed types" do
|
308
312
|
relation_spy = subject.except(:includes, :where, :group, :offset)
|
309
313
|
applied_types = relation_spy.applied.map(&:type)
|
310
|
-
[
|
314
|
+
[:select, :joins, :order, :having, :limit].each do |type|
|
311
315
|
assert_includes type, applied_types
|
312
316
|
end
|
313
|
-
[
|
317
|
+
[:includes, :where, :group, :offset].each do |type|
|
314
318
|
assert_not_includes type, applied_types
|
315
319
|
end
|
316
320
|
end
|
@@ -341,22 +345,24 @@ class Ardb::RelationSpy
|
|
341
345
|
should "remove any applied expressions not in the passed types" do
|
342
346
|
relation_spy = subject.only(:includes, :where, :group, :offset)
|
343
347
|
applied_types = relation_spy.applied.map(&:type)
|
344
|
-
[
|
348
|
+
[:includes, :where, :group, :offset].each do |type|
|
345
349
|
assert_includes type, applied_types
|
346
350
|
end
|
347
|
-
[
|
351
|
+
[:select, :joins, :order, :having, :limit].each do |type|
|
348
352
|
assert_not_includes type, applied_types
|
349
353
|
end
|
350
354
|
end
|
351
355
|
|
352
|
-
should "unset the limit value if limit is not included in the passed
|
356
|
+
should "unset the limit value if limit is not included in the passed "\
|
357
|
+
"types" do
|
353
358
|
relation_spy = subject.only(:limit)
|
354
359
|
assert_not_nil relation_spy.limit_value
|
355
360
|
relation_spy = subject.only(:select)
|
356
361
|
assert_nil relation_spy.limit_value
|
357
362
|
end
|
358
363
|
|
359
|
-
should "unset the offset value if offset is not included in the passed
|
364
|
+
should "unset the offset value if offset is not included in the passed "\
|
365
|
+
"types" do
|
360
366
|
relation_spy = subject.only(:offset)
|
361
367
|
assert_not_nil relation_spy.offset_value
|
362
368
|
relation_spy = subject.only(:select)
|