ardb 0.27.3 → 0.29.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 +7 -7
- data/Gemfile +4 -5
- data/README.md +252 -3
- data/ardb.gemspec +8 -8
- data/bin/ardb +1 -1
- data/lib/ardb.rb +155 -72
- data/lib/ardb/adapter/base.rb +67 -47
- data/lib/ardb/adapter/mysql.rb +3 -19
- data/lib/ardb/adapter/postgresql.rb +33 -37
- data/lib/ardb/adapter/sqlite.rb +7 -16
- data/lib/ardb/adapter_spy.rb +58 -92
- data/lib/ardb/cli.rb +18 -226
- data/lib/ardb/{clirb.rb → cli/clirb.rb} +16 -18
- data/lib/ardb/cli/commands.rb +365 -0
- data/lib/ardb/db_tests.rb +2 -4
- data/lib/ardb/default_order_by.rb +3 -13
- data/lib/ardb/migration.rb +18 -20
- data/lib/ardb/record_spy.rb +7 -26
- data/lib/ardb/relation_spy.rb +0 -6
- data/lib/ardb/require_autoloaded_active_record_files.rb +103 -58
- data/lib/ardb/test_helpers.rb +2 -5
- data/lib/ardb/use_db_default.rb +4 -15
- data/lib/ardb/version.rb +1 -1
- data/script/determine_autoloaded_active_record_files.rb +11 -8
- data/test/helper.rb +9 -6
- data/test/support/factory.rb +17 -2
- data/test/support/fake_schema.rb +5 -0
- data/test/support/postgresql/migrations/.keep +0 -0
- data/test/support/postgresql/schema.rb +2 -0
- data/test/support/postgresql/setup_test_db.rb +51 -0
- data/test/support/relative_require_test_db_file.rb +2 -0
- data/test/support/require_test_db_file.rb +1 -0
- data/test/system/.keep +0 -0
- data/test/unit/adapter/base_tests.rb +163 -75
- data/test/unit/adapter/mysql_tests.rb +4 -20
- data/test/unit/adapter/postgresql_tests.rb +20 -28
- data/test/unit/adapter/sqlite_tests.rb +9 -12
- data/test/unit/adapter_spy_tests.rb +48 -71
- data/test/unit/ardb_tests.rb +338 -38
- data/test/unit/cli_tests.rb +334 -225
- data/test/unit/db_tests_tests.rb +3 -6
- data/test/unit/default_order_by_tests.rb +4 -8
- data/test/unit/migration_tests.rb +20 -17
- data/test/unit/record_spy_tests.rb +18 -23
- data/test/unit/relation_spy_tests.rb +17 -46
- data/test/unit/test_helpers_tests.rb +5 -20
- data/test/unit/use_db_default_tests.rb +9 -13
- metadata +111 -100
- data/lib/ardb/has_slug.rb +0 -107
- data/lib/ardb/migration_helpers.rb +0 -77
- data/lib/ardb/root_path.rb +0 -15
- data/test/unit/config_tests.rb +0 -58
- data/test/unit/has_slug_tests.rb +0 -341
- data/test/unit/migration_helpers_tests.rb +0 -59
@@ -1,29 +1,15 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "assert"
|
2
|
+
require "ardb/adapter/mysql"
|
3
3
|
|
4
4
|
class Ardb::Adapter::Mysql
|
5
|
-
|
6
5
|
class UnitTests < Assert::Context
|
7
6
|
desc "Ardb::Adapter::Mysql"
|
8
7
|
setup do
|
9
|
-
@
|
8
|
+
@config = Factory.ardb_config
|
9
|
+
@adapter = Ardb::Adapter::Mysql.new(@config)
|
10
10
|
end
|
11
11
|
subject{ @adapter }
|
12
12
|
|
13
|
-
should "know its foreign key add sql" do
|
14
|
-
exp_add_sql = "ALTER TABLE :from_table"\
|
15
|
-
" ADD CONSTRAINT :name"\
|
16
|
-
" FOREIGN KEY (:from_column)"\
|
17
|
-
" REFERENCES :to_table (:to_column)"
|
18
|
-
assert_equal exp_add_sql, subject.foreign_key_add_sql
|
19
|
-
end
|
20
|
-
|
21
|
-
should "know its foreign key drop sql" do
|
22
|
-
exp_drop_sql = "ALTER TABLE :from_table"\
|
23
|
-
" DROP FOREIGN KEY :name"
|
24
|
-
assert_equal exp_drop_sql, subject.foreign_key_drop_sql
|
25
|
-
end
|
26
|
-
|
27
13
|
# not currently implemented, see: https://github.com/redding/ardb/issues/13
|
28
14
|
should "not implement the create and drop db methods" do
|
29
15
|
assert_raises(NotImplementedError){ subject.create_db }
|
@@ -34,7 +20,5 @@ class Ardb::Adapter::Mysql
|
|
34
20
|
should "not implement the drop tables method" do
|
35
21
|
assert_raises(NotImplementedError){ subject.drop_tables }
|
36
22
|
end
|
37
|
-
|
38
23
|
end
|
39
|
-
|
40
24
|
end
|
@@ -1,50 +1,42 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "assert"
|
2
|
+
require "ardb/adapter/postgresql"
|
3
3
|
|
4
|
-
require
|
4
|
+
require "scmd"
|
5
5
|
|
6
6
|
class Ardb::Adapter::Postgresql
|
7
|
-
|
8
7
|
class UnitTests < Assert::Context
|
9
8
|
desc "Ardb::Adapter::Postgresql"
|
10
9
|
setup do
|
11
|
-
@
|
10
|
+
@config = Factory.ardb_config
|
11
|
+
@adapter = Ardb::Adapter::Postgresql.new(@config)
|
12
12
|
end
|
13
13
|
subject{ @adapter }
|
14
14
|
|
15
|
-
should have_imeths :
|
15
|
+
should have_imeths :public_connect_hash
|
16
16
|
|
17
|
-
should "know its public
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
should "know its public connect hash" do
|
18
|
+
exp = subject.connect_hash.merge({
|
19
|
+
"database" => "postgres",
|
20
|
+
"schema_search_path" => "public"
|
21
21
|
})
|
22
|
-
assert_equal
|
23
|
-
end
|
24
|
-
|
25
|
-
should "know its foreign key add sql" do
|
26
|
-
exp_add_sql = "ALTER TABLE :from_table"\
|
27
|
-
" ADD CONSTRAINT :name"\
|
28
|
-
" FOREIGN KEY (:from_column)"\
|
29
|
-
" REFERENCES :to_table (:to_column)"
|
30
|
-
assert_equal exp_add_sql, subject.foreign_key_add_sql
|
22
|
+
assert_equal exp, subject.public_connect_hash
|
31
23
|
end
|
32
24
|
|
33
|
-
should "
|
34
|
-
|
35
|
-
|
36
|
-
|
25
|
+
should "complain if given a database name with non-word characters" do
|
26
|
+
@config.database = "#{Factory.string}-#{Factory.string}"
|
27
|
+
assert_raises(Ardb::ConfigurationError){
|
28
|
+
Ardb::Adapter::Postgresql.new(@config)
|
29
|
+
}
|
37
30
|
end
|
38
|
-
|
39
31
|
end
|
40
32
|
|
41
33
|
class SQLSchemaTests < UnitTests
|
42
34
|
setup do
|
43
35
|
@env = {
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
36
|
+
"PGHOST" => @adapter.connect_hash["host"],
|
37
|
+
"PGPORT" => @adapter.connect_hash["port"],
|
38
|
+
"PGUSER" => @adapter.connect_hash["username"],
|
39
|
+
"PGPASSWORD" => @adapter.connect_hash["password"]
|
48
40
|
}
|
49
41
|
end
|
50
42
|
|
@@ -1,12 +1,12 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "assert"
|
2
|
+
require "ardb/adapter/sqlite"
|
3
3
|
|
4
4
|
class Ardb::Adapter::Sqlite
|
5
|
-
|
6
5
|
class UnitTests < Assert::Context
|
7
6
|
desc "Ardb::Adapter::Sqlite"
|
8
7
|
setup do
|
9
|
-
@
|
8
|
+
@config = Factory.ardb_config
|
9
|
+
@adapter = Ardb::Adapter::Sqlite.new(@config)
|
10
10
|
end
|
11
11
|
subject{ @adapter }
|
12
12
|
|
@@ -20,20 +20,17 @@ class Ardb::Adapter::Sqlite
|
|
20
20
|
end
|
21
21
|
|
22
22
|
should "know its db file path" do
|
23
|
-
|
24
|
-
assert_equal
|
25
|
-
end
|
23
|
+
exp = File.expand_path(@config.database, @config.root_path)
|
24
|
+
assert_equal exp, subject.db_file_path
|
26
25
|
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
@config.database = File.join(TMP_PATH, "abs_sqlite_db_test")
|
27
|
+
adapter = Ardb::Adapter::Sqlite.new(@config)
|
28
|
+
assert_equal @config.database, adapter.db_file_path
|
30
29
|
end
|
31
30
|
|
32
31
|
# not currently implemented, see: https://github.com/redding/ardb/issues/29
|
33
32
|
should "not implement the drop tables method" do
|
34
33
|
assert_raises(NotImplementedError){ subject.drop_tables }
|
35
34
|
end
|
36
|
-
|
37
35
|
end
|
38
|
-
|
39
36
|
end
|
@@ -1,106 +1,83 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
|
4
|
-
require 'much-plugin'
|
5
|
-
|
6
|
-
module Ardb::AdapterSpy
|
1
|
+
require "assert"
|
2
|
+
require "ardb/adapter_spy"
|
7
3
|
|
4
|
+
class Ardb::AdapterSpy
|
8
5
|
class UnitTests < Assert::Context
|
9
6
|
desc "Ardb::AdapterSpy"
|
10
7
|
setup do
|
11
|
-
@
|
8
|
+
@adapter_spy_class = Ardb::AdapterSpy
|
12
9
|
end
|
13
|
-
subject{ @
|
10
|
+
subject{ @adapter_spy_class }
|
11
|
+
|
12
|
+
should "be a kind of ardb adapter" do
|
13
|
+
assert subject < Ardb::Adapter::Base
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class InitTests < UnitTests
|
18
|
+
desc "when init"
|
19
|
+
setup do
|
20
|
+
@config = Factory.ardb_config
|
21
|
+
@adapter_spy = @adapter_spy_class.new(@config)
|
22
|
+
end
|
23
|
+
subject{ @adapter_spy }
|
14
24
|
|
15
25
|
should have_accessors :drop_tables_called_count
|
16
26
|
should have_accessors :dump_schema_called_count, :load_schema_called_count
|
17
27
|
should have_accessors :drop_db_called_count, :create_db_called_count
|
18
28
|
should have_accessors :connect_db_called_count, :migrate_db_called_count
|
19
|
-
should have_imeths :
|
20
|
-
should have_imeths :
|
21
|
-
should have_imeths :
|
22
|
-
should have_imeths :
|
23
|
-
should have_imeths :
|
24
|
-
should have_imeths :
|
25
|
-
should have_imeths :migrate_db_called?, :migrate_db
|
26
|
-
|
27
|
-
should "use much-plugin" do
|
28
|
-
assert_includes MuchPlugin, Ardb::AdapterSpy
|
29
|
-
end
|
30
|
-
|
31
|
-
should "included the adapter spy instance methods" do
|
32
|
-
assert_includes Ardb::AdapterSpy::InstanceMethods, subject.class
|
33
|
-
end
|
29
|
+
should have_imeths :create_db_called?, :drop_db_called?, :drop_tables_called?
|
30
|
+
should have_imeths :connect_db_called?, :migrate_db_called?
|
31
|
+
should have_imeths :dump_schema_called?, :load_schema_called?
|
32
|
+
should have_imeths :create_db, :drop_db, :drop_tables
|
33
|
+
should have_imeths :connect_db, :migrate_db
|
34
|
+
should have_imeths :dump_schema, :load_schema
|
34
35
|
|
35
36
|
should "default all call counts to zero" do
|
36
|
-
assert_equal 0, subject.drop_tables_called_count
|
37
|
-
assert_equal 0, subject.dump_schema_called_count
|
38
|
-
assert_equal 0, subject.load_schema_called_count
|
39
|
-
assert_equal 0, subject.drop_db_called_count
|
40
37
|
assert_equal 0, subject.create_db_called_count
|
38
|
+
assert_equal 0, subject.drop_db_called_count
|
39
|
+
assert_equal 0, subject.drop_tables_called_count
|
41
40
|
assert_equal 0, subject.connect_db_called_count
|
42
41
|
assert_equal 0, subject.migrate_db_called_count
|
42
|
+
assert_equal 0, subject.load_schema_called_count
|
43
|
+
assert_equal 0, subject.dump_schema_called_count
|
43
44
|
end
|
44
45
|
|
45
46
|
should "know if and how many times a method is called" do
|
46
|
-
assert_equal false, subject.
|
47
|
-
subject.
|
48
|
-
assert_equal 1, subject.
|
49
|
-
assert_equal true, subject.
|
50
|
-
|
51
|
-
assert_equal false, subject.dump_schema_called?
|
52
|
-
subject.dump_schema
|
53
|
-
assert_equal 1, subject.dump_schema_called_count
|
54
|
-
assert_equal true, subject.dump_schema_called?
|
55
|
-
|
56
|
-
assert_equal false, subject.load_schema_called?
|
57
|
-
subject.load_schema
|
58
|
-
assert_equal 1, subject.load_schema_called_count
|
59
|
-
assert_equal true, subject.load_schema_called?
|
47
|
+
assert_equal false, subject.create_db_called?
|
48
|
+
subject.create_db
|
49
|
+
assert_equal 1, subject.create_db_called_count
|
50
|
+
assert_equal true, subject.create_db_called?
|
60
51
|
|
61
52
|
assert_equal false, subject.drop_db_called?
|
62
53
|
subject.drop_db
|
63
54
|
assert_equal 1, subject.drop_db_called_count
|
64
55
|
assert_equal true, subject.drop_db_called?
|
65
56
|
|
66
|
-
assert_equal false, subject.
|
67
|
-
subject.
|
68
|
-
assert_equal 1, subject.
|
69
|
-
assert_equal true, subject.
|
70
|
-
|
71
|
-
assert_equal false, subject.migrate_db_called?
|
72
|
-
subject.migrate_db
|
73
|
-
assert_equal 1, subject.migrate_db_called_count
|
74
|
-
assert_equal true, subject.migrate_db_called?
|
57
|
+
assert_equal false, subject.drop_tables_called?
|
58
|
+
subject.drop_tables
|
59
|
+
assert_equal 1, subject.drop_tables_called_count
|
60
|
+
assert_equal true, subject.drop_tables_called?
|
75
61
|
|
76
62
|
assert_equal false, subject.connect_db_called?
|
77
63
|
subject.connect_db
|
78
64
|
assert_equal 1, subject.connect_db_called_count
|
79
65
|
assert_equal true, subject.connect_db_called?
|
80
|
-
end
|
81
66
|
|
82
|
-
|
67
|
+
assert_equal false, subject.migrate_db_called?
|
68
|
+
subject.migrate_db
|
69
|
+
assert_equal 1, subject.migrate_db_called_count
|
70
|
+
assert_equal true, subject.migrate_db_called?
|
83
71
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
attr_accessor :name
|
89
|
-
end
|
90
|
-
@adapter = @adapter_spy_class.new
|
91
|
-
end
|
92
|
-
subject{ @adapter }
|
72
|
+
assert_equal false, subject.dump_schema_called?
|
73
|
+
subject.dump_schema
|
74
|
+
assert_equal 1, subject.dump_schema_called_count
|
75
|
+
assert_equal true, subject.dump_schema_called?
|
93
76
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
77
|
+
assert_equal false, subject.load_schema_called?
|
78
|
+
subject.load_schema
|
79
|
+
assert_equal 1, subject.load_schema_called_count
|
80
|
+
assert_equal true, subject.load_schema_called?
|
98
81
|
end
|
99
|
-
|
100
|
-
end
|
101
|
-
|
102
|
-
class MyAdapter
|
103
|
-
include Ardb::AdapterSpy
|
104
82
|
end
|
105
|
-
|
106
83
|
end
|
data/test/unit/ardb_tests.rb
CHANGED
@@ -1,67 +1,149 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "assert"
|
2
|
+
require "ardb"
|
3
3
|
|
4
|
-
|
4
|
+
require "logger"
|
5
|
+
require "ardb/adapter_spy"
|
6
|
+
require "ardb/adapter/mysql"
|
7
|
+
require "ardb/adapter/postgresql"
|
8
|
+
require "ardb/adapter/sqlite"
|
5
9
|
|
10
|
+
module Ardb
|
6
11
|
class UnitTests < Assert::Context
|
7
12
|
desc "Ardb"
|
8
13
|
setup do
|
9
|
-
@orig_ar_logger = ActiveRecord::Base.logger
|
10
|
-
Adapter.reset
|
11
|
-
|
12
14
|
@module = Ardb
|
13
15
|
end
|
14
16
|
teardown do
|
15
|
-
|
16
|
-
ActiveRecord::Base.logger = @orig_ar_logger
|
17
|
+
@module.reset_adapter
|
17
18
|
end
|
18
19
|
subject{ @module }
|
19
20
|
|
20
|
-
should have_imeths :config, :configure, :adapter, :
|
21
|
-
should have_imeths :escape_like_pattern
|
21
|
+
should have_imeths :config, :configure, :adapter, :reset_adapter
|
22
|
+
should have_imeths :init, :escape_like_pattern
|
22
23
|
|
23
|
-
should "
|
24
|
-
|
24
|
+
should "default the db file env var" do
|
25
|
+
assert_equal "config/db", ENV["ARDB_DB_FILE"]
|
25
26
|
end
|
26
27
|
|
27
|
-
should "
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
Ardb.config.db.adapter = orig_adapter
|
28
|
+
should "know its config" do
|
29
|
+
assert_instance_of Config, subject.config
|
30
|
+
result = subject.config
|
31
|
+
assert_same result, subject.config
|
32
32
|
end
|
33
33
|
|
34
|
-
should "
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
34
|
+
should "yield its config using `configure`" do
|
35
|
+
yielded = nil
|
36
|
+
subject.configure{ |c| yielded = c }
|
37
|
+
assert_same subject.config, yielded
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class InitMethodSetupTests < UnitTests
|
42
|
+
setup do
|
43
|
+
@orig_env_pwd = ENV["PWD"]
|
44
|
+
@orig_env_ardb_db_file = ENV["ARDB_DB_FILE"]
|
45
|
+
@orig_ar_logger = ActiveRecord::Base.logger
|
46
|
+
|
47
|
+
# stub in a temporary config, this allows us to modify it and not worry
|
48
|
+
# about affecting Ardb"s global config which could cause issues on other
|
49
|
+
# tests
|
50
|
+
@ardb_config = Config.new
|
51
|
+
Assert.stub(Ardb, :config){ @ardb_config }
|
52
|
+
|
53
|
+
@ardb_adapter = nil
|
54
|
+
Assert.stub(Ardb::Adapter, :new) do |*args|
|
55
|
+
@ardb_adapter ||= Ardb::AdapterSpy.new(*args)
|
39
56
|
end
|
40
57
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
58
|
+
ENV["ARDB_DB_FILE"] = "test/support/require_test_db_file"
|
59
|
+
@ardb_config.adapter = Adapter::VALID_ADAPTERS.sample
|
60
|
+
@ardb_config.database = Factory.string
|
61
|
+
end
|
62
|
+
teardown do
|
63
|
+
ActiveRecord::Base.logger = @orig_ar_logger
|
64
|
+
ENV["ARDB_DB_FILE"] = @orig_env_ardb_db_file
|
65
|
+
ENV["PWD"] = @orig_env_pwd
|
45
66
|
end
|
67
|
+
end
|
46
68
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
69
|
+
class InitMethodTests < InitMethodSetupTests
|
70
|
+
desc "`init` method"
|
71
|
+
|
72
|
+
should "require the autoloaded active record files" do
|
73
|
+
subject.init
|
74
|
+
assert_false require("ardb/require_autoloaded_active_record_files")
|
75
|
+
end
|
76
|
+
|
77
|
+
should "require the db file" do
|
78
|
+
subject.init
|
79
|
+
assert_false require(ENV["ARDB_DB_FILE"])
|
80
|
+
end
|
81
|
+
|
82
|
+
should "require the db file relative to the working directory if needed" do
|
83
|
+
ENV["PWD"] = "test/support"
|
84
|
+
ENV["ARDB_DB_FILE"] = "relative_require_test_db_file"
|
85
|
+
subject.init
|
86
|
+
assert_false require(File.expand_path(ENV["ARDB_DB_FILE"], ENV["PWD"]))
|
87
|
+
end
|
88
|
+
|
89
|
+
should "raise an invalid db file error when it can't require it" do
|
90
|
+
ENV["ARDB_DB_FILE"] = Factory.file_path
|
91
|
+
error = assert_raises(InvalidDBFileError){ subject.init }
|
92
|
+
exp = "can't require `#{ENV["ARDB_DB_FILE"]}`, check that the " \
|
93
|
+
"ARDB_DB_FILE env var is set to the file path of your db file"
|
94
|
+
assert_equal exp, error.message
|
95
|
+
end
|
96
|
+
|
97
|
+
should "validate its config" do
|
98
|
+
validate_called = false
|
99
|
+
Assert.stub(@ardb_config, :validate!){ validate_called = true }
|
100
|
+
|
101
|
+
subject.init
|
102
|
+
assert_true validate_called
|
55
103
|
end
|
56
104
|
|
105
|
+
should "build an adapter using its config" do
|
106
|
+
subject.init
|
107
|
+
|
108
|
+
assert_not_nil @ardb_adapter
|
109
|
+
assert_equal subject.config, @ardb_adapter.config
|
110
|
+
assert_same @ardb_adapter, subject.adapter
|
111
|
+
end
|
112
|
+
|
113
|
+
should "set ActiveRecord::Base attributes" do
|
114
|
+
subject.init
|
115
|
+
|
116
|
+
assert_equal subject.config.logger, ActiveRecord::Base.logger
|
117
|
+
assert_equal subject.config.default_timezone, ActiveRecord::Base.default_timezone
|
118
|
+
end
|
119
|
+
|
120
|
+
should "optionally establish an AR connection" do
|
121
|
+
assert_nil @ardb_adapter
|
122
|
+
subject.init
|
123
|
+
assert_equal 1, @ardb_adapter.connect_db_called_count
|
124
|
+
|
125
|
+
subject.init(true)
|
126
|
+
assert_equal 2, @ardb_adapter.connect_db_called_count
|
127
|
+
|
128
|
+
subject.init(false)
|
129
|
+
assert_equal 2, @ardb_adapter.connect_db_called_count
|
130
|
+
end
|
131
|
+
|
132
|
+
should "raise a not initialized error using its adapter before init" do
|
133
|
+
subject.reset_adapter
|
134
|
+
assert_raises(NotInitializedError){ subject.adapter }
|
135
|
+
assert_raises(NotInitializedError){ subject.escape_like_pattern(Factory.string) }
|
136
|
+
|
137
|
+
subject.init
|
138
|
+
assert_nothing_raised{ subject.adapter }
|
139
|
+
assert_nothing_raised{ subject.escape_like_pattern(Factory.string) }
|
140
|
+
end
|
57
141
|
end
|
58
142
|
|
59
|
-
class InitTests <
|
143
|
+
class InitTests < InitMethodSetupTests
|
60
144
|
desc "when init"
|
61
145
|
setup do
|
62
|
-
|
63
|
-
# an actual DB
|
64
|
-
@module.init(false)
|
146
|
+
@module.init
|
65
147
|
end
|
66
148
|
|
67
149
|
should "demeter its adapter" do
|
@@ -69,7 +151,225 @@ module Ardb
|
|
69
151
|
exp = subject.adapter.escape_like_pattern(pattern)
|
70
152
|
assert_equal exp, subject.escape_like_pattern(pattern)
|
71
153
|
end
|
154
|
+
end
|
155
|
+
|
156
|
+
class ConfigTests < UnitTests
|
157
|
+
desc "Config"
|
158
|
+
setup do
|
159
|
+
@config_class = Ardb::Config
|
160
|
+
end
|
161
|
+
subject{ @config_class }
|
162
|
+
|
163
|
+
should "know its activerecord attrs" do
|
164
|
+
exp = [
|
165
|
+
:adapter,
|
166
|
+
:database,
|
167
|
+
:encoding,
|
168
|
+
:host,
|
169
|
+
:port,
|
170
|
+
:username,
|
171
|
+
:password,
|
172
|
+
:pool,
|
173
|
+
:checkout_timeout,
|
174
|
+
:min_messages
|
175
|
+
]
|
176
|
+
assert_equal exp, subject::ACTIVERECORD_ATTRS
|
177
|
+
end
|
178
|
+
|
179
|
+
should "know its default migrations path" do
|
180
|
+
assert_equal "db/migrations", subject::DEFAULT_MIGRATIONS_PATH
|
181
|
+
end
|
182
|
+
|
183
|
+
should "know its default schema path" do
|
184
|
+
assert_equal "db/schema", subject::DEFAULT_SCHEMA_PATH
|
185
|
+
end
|
186
|
+
|
187
|
+
should "know its schema formats" do
|
188
|
+
assert_equal :ruby, subject::RUBY_SCHEMA_FORMAT
|
189
|
+
assert_equal :sql, subject::SQL_SCHEMA_FORMAT
|
190
|
+
exp = [subject::RUBY_SCHEMA_FORMAT, subject::SQL_SCHEMA_FORMAT]
|
191
|
+
assert_equal exp, subject::VALID_SCHEMA_FORMATS
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
class ConfigInitTests < ConfigTests
|
196
|
+
desc "when init"
|
197
|
+
setup do
|
198
|
+
@config = @config_class.new
|
199
|
+
end
|
200
|
+
subject{ @config }
|
201
|
+
|
202
|
+
should have_accessors *Ardb::Config::ACTIVERECORD_ATTRS
|
203
|
+
should have_accessors :default_timezone, :logger, :root_path
|
204
|
+
should have_readers :schema_format
|
205
|
+
should have_writers :migrations_path, :schema_path
|
206
|
+
should have_imeths :activerecord_connect_hash, :validate!
|
207
|
+
|
208
|
+
should "default its attributs" do
|
209
|
+
assert_equal :utc, subject.default_timezone
|
210
|
+
assert_instance_of Logger, subject.logger
|
211
|
+
assert_equal ENV["PWD"], subject.root_path
|
212
|
+
exp = File.expand_path(@config_class::DEFAULT_MIGRATIONS_PATH, subject.root_path)
|
213
|
+
assert_equal exp, subject.migrations_path
|
214
|
+
exp = File.expand_path(@config_class::DEFAULT_SCHEMA_PATH, subject.root_path)
|
215
|
+
assert_equal exp, subject.schema_path
|
216
|
+
assert_equal @config_class::RUBY_SCHEMA_FORMAT, subject.schema_format
|
217
|
+
end
|
218
|
+
|
219
|
+
should "allow reading/writing its paths" do
|
220
|
+
new_root_path = Factory.path
|
221
|
+
new_migrations_path = Factory.path
|
222
|
+
new_schema_path = Factory.path
|
223
|
+
|
224
|
+
subject.root_path = new_root_path
|
225
|
+
subject.migrations_path = new_migrations_path
|
226
|
+
subject.schema_path = new_schema_path
|
227
|
+
assert_equal new_root_path, subject.root_path
|
228
|
+
exp = File.expand_path(new_migrations_path, new_root_path)
|
229
|
+
assert_equal exp, subject.migrations_path
|
230
|
+
exp = File.expand_path(new_schema_path, new_root_path)
|
231
|
+
assert_equal exp, subject.schema_path
|
232
|
+
end
|
233
|
+
|
234
|
+
should "allow setting absolute paths" do
|
235
|
+
new_migrations_path = "/#{Factory.path}"
|
236
|
+
new_schema_path = "/#{Factory.path}"
|
237
|
+
|
238
|
+
subject.root_path = [Factory.path, nil].sample
|
239
|
+
subject.migrations_path = new_migrations_path
|
240
|
+
subject.schema_path = new_schema_path
|
241
|
+
assert_equal new_migrations_path, subject.migrations_path
|
242
|
+
assert_equal new_schema_path, subject.schema_path
|
243
|
+
end
|
244
|
+
|
245
|
+
should "allow reading/writing the schema format" do
|
246
|
+
new_schema_format = Factory.string
|
247
|
+
|
248
|
+
subject.schema_format = new_schema_format
|
249
|
+
assert_equal new_schema_format.to_sym, subject.schema_format
|
250
|
+
end
|
251
|
+
|
252
|
+
should "know its activerecord connection hash" do
|
253
|
+
attrs_and_values = @config_class::ACTIVERECORD_ATTRS.map do |attr_name|
|
254
|
+
value = [Factory.string, nil].sample
|
255
|
+
subject.send("#{attr_name}=", value)
|
256
|
+
[attr_name.to_s, value] if !value.nil?
|
257
|
+
end.compact
|
258
|
+
assert_equal Hash[attrs_and_values], subject.activerecord_connect_hash
|
259
|
+
end
|
260
|
+
|
261
|
+
should "raise errors with invalid attribute values using `validate!`" do
|
262
|
+
subject.adapter = Factory.string
|
263
|
+
subject.database = Factory.string
|
264
|
+
assert_nothing_raised{ subject.validate! }
|
265
|
+
|
266
|
+
subject.adapter = nil
|
267
|
+
assert_raises(ConfigurationError){ subject.validate! }
|
268
|
+
|
269
|
+
subject.adapter = Factory.string
|
270
|
+
subject.database = nil
|
271
|
+
assert_raises(ConfigurationError){ subject.validate! }
|
272
|
+
|
273
|
+
subject.database = Factory.string
|
274
|
+
subject.schema_format = Factory.string
|
275
|
+
assert_raises(ConfigurationError){ subject.validate! }
|
276
|
+
|
277
|
+
subject.schema_format = @config_class::VALID_SCHEMA_FORMATS.sample
|
278
|
+
assert_nothing_raised{ subject.validate! }
|
279
|
+
end
|
72
280
|
|
281
|
+
should "know if its equal to another config" do
|
282
|
+
attrs = @config_class::ACTIVERECORD_ATTRS + [
|
283
|
+
:default_timezone,
|
284
|
+
:logger,
|
285
|
+
:root_path,
|
286
|
+
:schema_format,
|
287
|
+
:migrations_path,
|
288
|
+
:schema_path
|
289
|
+
]
|
290
|
+
attrs.each do |attr_name|
|
291
|
+
subject.send("#{attr_name}=", Factory.string)
|
292
|
+
end
|
293
|
+
|
294
|
+
other_config = @config_class.new
|
295
|
+
attrs.each do |attr_name|
|
296
|
+
other_config.send("#{attr_name}=", subject.send(attr_name))
|
297
|
+
end
|
298
|
+
assert_equal other_config, subject
|
299
|
+
|
300
|
+
attr_name = attrs.sample
|
301
|
+
other_config.send("#{attr_name}=", Factory.string)
|
302
|
+
assert_not_equal other_config, subject
|
303
|
+
end
|
73
304
|
end
|
74
305
|
|
306
|
+
class AdapterTests < UnitTests
|
307
|
+
desc "Adapter"
|
308
|
+
setup do
|
309
|
+
@config = Factory.ardb_config
|
310
|
+
|
311
|
+
@adapter_module = Ardb::Adapter
|
312
|
+
end
|
313
|
+
subject{ @adapter_module }
|
314
|
+
|
315
|
+
should have_imeths :new
|
316
|
+
should have_imeths :sqlite, :sqlite3
|
317
|
+
should have_imeths :postgresql, :postgres
|
318
|
+
should have_imeths :mysql, :mysql2
|
319
|
+
|
320
|
+
should "know its valid adapters" do
|
321
|
+
exp = [
|
322
|
+
"sqlite",
|
323
|
+
"sqlite3",
|
324
|
+
"postgresql",
|
325
|
+
"postgres",
|
326
|
+
"mysql",
|
327
|
+
"mysql2"
|
328
|
+
]
|
329
|
+
assert_equal exp, subject::VALID_ADAPTERS
|
330
|
+
end
|
331
|
+
|
332
|
+
should "build an adapter specific class using the passed config" do
|
333
|
+
adapter_key, exp_adapter_class = [
|
334
|
+
["sqlite", Ardb::Adapter::Sqlite],
|
335
|
+
["postgresql", Ardb::Adapter::Postgresql],
|
336
|
+
["mysql", Ardb::Adapter::Mysql]
|
337
|
+
].sample
|
338
|
+
@config.adapter = adapter_key
|
339
|
+
|
340
|
+
adapter = subject.new(@config)
|
341
|
+
assert_instance_of exp_adapter_class, adapter
|
342
|
+
assert_equal @config, adapter.config
|
343
|
+
end
|
344
|
+
|
345
|
+
should "know how to build a sqlite adapter" do
|
346
|
+
adapter = subject.sqlite(@config)
|
347
|
+
assert_instance_of Ardb::Adapter::Sqlite, adapter
|
348
|
+
assert_equal @config, adapter.config
|
349
|
+
|
350
|
+
adapter = subject.sqlite3(@config)
|
351
|
+
assert_instance_of Ardb::Adapter::Sqlite, adapter
|
352
|
+
assert_equal @config, adapter.config
|
353
|
+
end
|
354
|
+
|
355
|
+
should "know how to build a postgresql adapter" do
|
356
|
+
adapter = subject.postgresql(@config)
|
357
|
+
assert_instance_of Ardb::Adapter::Postgresql, adapter
|
358
|
+
assert_equal @config, adapter.config
|
359
|
+
|
360
|
+
adapter = subject.postgres(@config)
|
361
|
+
assert_instance_of Ardb::Adapter::Postgresql, adapter
|
362
|
+
assert_equal @config, adapter.config
|
363
|
+
end
|
364
|
+
|
365
|
+
should "know how to build a mysql adapter" do
|
366
|
+
adapter = subject.mysql(@config)
|
367
|
+
assert_instance_of Ardb::Adapter::Mysql, adapter
|
368
|
+
assert_equal @config, adapter.config
|
369
|
+
|
370
|
+
adapter = subject.mysql2(@config)
|
371
|
+
assert_instance_of Ardb::Adapter::Mysql, adapter
|
372
|
+
assert_equal @config, adapter.config
|
373
|
+
end
|
374
|
+
end
|
75
375
|
end
|