database_rewinder 1.0.0 → 1.1.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/lib/database_rewinder/active_record_monkey.rb +1 -1
- data/lib/database_rewinder/cleaner.rb +8 -2
- data/lib/database_rewinder/lease_connection_compat.rb +14 -0
- data/lib/database_rewinder/multiple_statements_executor.rb +13 -7
- data/lib/database_rewinder.rb +5 -4
- metadata +5 -26
- data/.github/workflows/main.yml +0 -165
- data/.gitignore +0 -21
- data/Gemfile +0 -35
- data/Rakefile +0 -15
- data/database_rewinder.gemspec +0 -27
- data/test/active_record_monkey_test.rb +0 -19
- data/test/cleaner_test.rb +0 -33
- data/test/config/database.yml +0 -52
- data/test/database_rewinder_test.rb +0 -324
- data/test/db/.keep +0 -0
- data/test/fake_app.rb +0 -72
- data/test/test_helper.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f8f897592605b10d934e9c74fd24476a6ef52e44e3292f0aa39caec97d2a65ba
|
4
|
+
data.tar.gz: 8c670decda9d1d418f8cf81c27ed3e47eb90fd17ac15e1f7d715f63623712e39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82d4794103447bebd78945eb398ec8ea37329827ac417a2b11a5bf39366cf4b71194b5c550f5d4dad36b54b3f491103660b7e261ec1ec9296fbf9f87b80c4a2b
|
7
|
+
data.tar.gz: 95e396cdc60bb54640890caf57f0c5c169544eb53171a8d060f23edde5837cec4cbd9f8c19892f01ec740a0f3d464188b14604b5043cf94371f771106a16a8d7
|
@@ -4,7 +4,7 @@ module DatabaseRewinder
|
|
4
4
|
module InsertRecorder
|
5
5
|
# This method actually no longer has to be a `prepended` hook because InsertRecorder is a module without a direct method now, but still doing this just for compatibility
|
6
6
|
def self.prepended(mod)
|
7
|
-
[:execute, :exec_query, :internal_exec_query].each do |method_name|
|
7
|
+
[:execute, :exec_insert, :exec_query, :internal_exec_query].each do |method_name|
|
8
8
|
if mod.instance_methods.include?(method_name) && (meth = mod.instance_method(method_name))
|
9
9
|
method_body = if meth.parameters.any? {|type, _name| [:key, :keyreq, :keyrest].include? type }
|
10
10
|
<<-RUBY
|
@@ -1,7 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative 'lease_connection_compat'
|
3
4
|
require_relative 'multiple_statements_executor'
|
4
5
|
|
6
|
+
using DatabaseRewinder::LeaseConnectionCompat
|
5
7
|
using DatabaseRewinder::MultipleStatementsExecutor
|
6
8
|
|
7
9
|
module DatabaseRewinder
|
@@ -17,6 +19,10 @@ module DatabaseRewinder
|
|
17
19
|
config['database']
|
18
20
|
end
|
19
21
|
|
22
|
+
def host
|
23
|
+
config['host']
|
24
|
+
end
|
25
|
+
|
20
26
|
def clean(multiple: true)
|
21
27
|
return if !pool || inserted_tables.empty?
|
22
28
|
|
@@ -25,14 +31,14 @@ module DatabaseRewinder
|
|
25
31
|
# In this case, we have to reconnect to the database to clean inserted
|
26
32
|
# tables.
|
27
33
|
with_automatic_reconnect(pool) do
|
28
|
-
delete_all (ar_conn = pool.
|
34
|
+
delete_all (ar_conn = pool.lease_connection), DatabaseRewinder.all_table_names(ar_conn) & inserted_tables, multiple: multiple
|
29
35
|
end
|
30
36
|
reset
|
31
37
|
end
|
32
38
|
|
33
39
|
def clean_all(multiple: true)
|
34
40
|
if pool
|
35
|
-
ar_conn = pool.
|
41
|
+
ar_conn = pool.lease_connection
|
36
42
|
delete_all ar_conn, DatabaseRewinder.all_table_names(ar_conn), multiple: multiple
|
37
43
|
else
|
38
44
|
require 'database_rewinder/dummy_model'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DatabaseRewinder
|
4
|
+
module LeaseConnectionCompat
|
5
|
+
# Make old AR compatible with AR >= 7.2 by defining `lease_connection`
|
6
|
+
unless ActiveRecord::ConnectionAdapters::ConnectionPool.instance_methods.include? :lease_connection
|
7
|
+
refine ActiveRecord::ConnectionAdapters::ConnectionPool do
|
8
|
+
def lease_connection
|
9
|
+
connection
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -12,18 +12,18 @@ module DatabaseRewinder
|
|
12
12
|
#TODO Use ADAPTER_NAME when we've dropped AR 4.1 support
|
13
13
|
case self.class.name
|
14
14
|
when 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter'
|
15
|
-
disable_referential_integrity { log(sql) {
|
15
|
+
disable_referential_integrity { log(sql) { raw_connection_or_connection.exec sql } }
|
16
16
|
when 'ActiveRecord::ConnectionAdapters::Mysql2Adapter'
|
17
|
-
if
|
17
|
+
if raw_connection_or_connection.query_options[:connect_flags] & Mysql2::Client::MULTI_STATEMENTS != 0
|
18
18
|
disable_referential_integrity do
|
19
|
-
_result = log(sql) {
|
20
|
-
while
|
19
|
+
_result = log(sql) { raw_connection_or_connection.query sql }
|
20
|
+
while raw_connection_or_connection.next_result
|
21
21
|
# just to make sure that all queries are finished
|
22
|
-
_result =
|
22
|
+
_result = raw_connection_or_connection.store_result
|
23
23
|
end
|
24
24
|
end
|
25
25
|
else
|
26
|
-
query_options =
|
26
|
+
query_options = raw_connection_or_connection.query_options.dup
|
27
27
|
query_options[:connect_flags] |= Mysql2::Client::MULTI_STATEMENTS
|
28
28
|
# opens another connection to the DB
|
29
29
|
client = Mysql2::Client.new query_options
|
@@ -40,11 +40,17 @@ module DatabaseRewinder
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
when 'ActiveRecord::ConnectionAdapters::SQLite3Adapter'
|
43
|
-
disable_referential_integrity { log(sql) {
|
43
|
+
disable_referential_integrity { log(sql) { raw_connection_or_connection.execute_batch sql } }
|
44
44
|
else
|
45
45
|
raise 'Multiple deletion is not supported with the current database adapter.'
|
46
46
|
end
|
47
47
|
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def raw_connection_or_connection
|
52
|
+
defined?(@raw_connection) ? @raw_connection : @connection
|
53
|
+
end
|
48
54
|
end
|
49
55
|
end
|
50
56
|
end
|
data/lib/database_rewinder.rb
CHANGED
@@ -39,13 +39,14 @@ module DatabaseRewinder
|
|
39
39
|
def record_inserted_table(connection, sql)
|
40
40
|
config = connection.instance_variable_get(:'@config')
|
41
41
|
database = config[:database]
|
42
|
+
host = config[:host]
|
42
43
|
#NOTE What's the best way to get the app dir besides Rails.root? I know Dir.pwd here might not be the right solution, but it should work in most cases...
|
43
44
|
root_dir = defined?(Rails) && Rails.respond_to?(:root) ? Rails.root : Dir.pwd
|
44
45
|
cleaner = cleaners.detect do |c|
|
45
46
|
if (config[:adapter] == 'sqlite3') && (config[:database] != ':memory:')
|
46
47
|
File.expand_path(c.db, root_dir) == File.expand_path(database, root_dir)
|
47
48
|
else
|
48
|
-
c.db == database
|
49
|
+
c.db == database && c.host == host
|
49
50
|
end
|
50
51
|
end or return
|
51
52
|
|
@@ -78,10 +79,10 @@ module DatabaseRewinder
|
|
78
79
|
cache_key = get_cache_key(connection.pool)
|
79
80
|
#NOTE connection.tables warns on AR 5 with some adapters
|
80
81
|
tables =
|
81
|
-
if
|
82
|
-
Rails.application.deprecators.silence { connection.tables }
|
83
|
-
else
|
82
|
+
if ActiveRecord::VERSION::MAJOR == 5 && ActiveRecord::VERSION::MINOR == 0
|
84
83
|
ActiveSupport::Deprecation.silence { connection.tables }
|
84
|
+
else
|
85
|
+
connection.tables
|
85
86
|
end
|
86
87
|
schema_migraion_table_name =
|
87
88
|
if ActiveRecord::SchemaMigration.respond_to?(:table_name)
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: database_rewinder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Akira Matsuda
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-01-20 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: bundler
|
@@ -73,32 +72,20 @@ executables: []
|
|
73
72
|
extensions: []
|
74
73
|
extra_rdoc_files: []
|
75
74
|
files:
|
76
|
-
- ".github/workflows/main.yml"
|
77
|
-
- ".gitignore"
|
78
|
-
- Gemfile
|
79
75
|
- MIT_LICENSE
|
80
76
|
- README.md
|
81
|
-
- Rakefile
|
82
|
-
- database_rewinder.gemspec
|
83
77
|
- lib/database_rewinder.rb
|
84
78
|
- lib/database_rewinder/active_record_monkey.rb
|
85
79
|
- lib/database_rewinder/cleaner.rb
|
86
80
|
- lib/database_rewinder/compatibility.rb
|
87
81
|
- lib/database_rewinder/dummy_model.rb
|
82
|
+
- lib/database_rewinder/lease_connection_compat.rb
|
88
83
|
- lib/database_rewinder/multiple_statements_executor.rb
|
89
84
|
- lib/database_rewinder/railtie.rb
|
90
|
-
- test/active_record_monkey_test.rb
|
91
|
-
- test/cleaner_test.rb
|
92
|
-
- test/config/database.yml
|
93
|
-
- test/database_rewinder_test.rb
|
94
|
-
- test/db/.keep
|
95
|
-
- test/fake_app.rb
|
96
|
-
- test/test_helper.rb
|
97
85
|
homepage: https://github.com/amatsuda/database_rewinder
|
98
86
|
licenses:
|
99
87
|
- MIT
|
100
88
|
metadata: {}
|
101
|
-
post_install_message:
|
102
89
|
rdoc_options: []
|
103
90
|
require_paths:
|
104
91
|
- lib
|
@@ -113,15 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
113
100
|
- !ruby/object:Gem::Version
|
114
101
|
version: '0'
|
115
102
|
requirements: []
|
116
|
-
rubygems_version: 3.
|
117
|
-
signing_key:
|
103
|
+
rubygems_version: 3.7.0.dev
|
118
104
|
specification_version: 4
|
119
105
|
summary: A minimalist's tiny and ultra-fast database cleaner
|
120
|
-
test_files:
|
121
|
-
- test/active_record_monkey_test.rb
|
122
|
-
- test/cleaner_test.rb
|
123
|
-
- test/config/database.yml
|
124
|
-
- test/database_rewinder_test.rb
|
125
|
-
- test/db/.keep
|
126
|
-
- test/fake_app.rb
|
127
|
-
- test/test_helper.rb
|
106
|
+
test_files: []
|
data/.github/workflows/main.yml
DELETED
@@ -1,165 +0,0 @@
|
|
1
|
-
name: build
|
2
|
-
|
3
|
-
on: [push, pull_request]
|
4
|
-
|
5
|
-
jobs:
|
6
|
-
build:
|
7
|
-
services:
|
8
|
-
postgres:
|
9
|
-
image: postgres:12
|
10
|
-
env:
|
11
|
-
POSTGRES_USER: postgres
|
12
|
-
POSTGRES_PASSWORD: postgres
|
13
|
-
ports:
|
14
|
-
- 5432:5432
|
15
|
-
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
|
16
|
-
mysql:
|
17
|
-
image: mysql:5.7
|
18
|
-
env:
|
19
|
-
MYSQL_ROOT_PASSWORD:
|
20
|
-
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
|
21
|
-
ports:
|
22
|
-
- 3306:3306
|
23
|
-
options: --health-cmd "mysqladmin ping" --health-interval 10s --health-timeout 5s --health-retries 10
|
24
|
-
|
25
|
-
strategy:
|
26
|
-
fail-fast: false
|
27
|
-
|
28
|
-
matrix:
|
29
|
-
db: [sqlite3, postgresql, mysql]
|
30
|
-
ruby_version: [ruby-head, '3.3', '3.2', '3.1']
|
31
|
-
rails_version: [edge, '7.1', '7.0', '6.1']
|
32
|
-
|
33
|
-
exclude:
|
34
|
-
- ruby_version: ruby-head
|
35
|
-
rails_version: '6.1'
|
36
|
-
|
37
|
-
include:
|
38
|
-
- ruby_version: '3.0'
|
39
|
-
rails_version: '7.1'
|
40
|
-
db: sqlite3
|
41
|
-
- ruby_version: '3.0'
|
42
|
-
rails_version: '7.1'
|
43
|
-
db: postgresql
|
44
|
-
- ruby_version: '3.0'
|
45
|
-
rails_version: '7.1'
|
46
|
-
db: mysql
|
47
|
-
|
48
|
-
- ruby_version: '2.7'
|
49
|
-
rails_version: '7.1'
|
50
|
-
db: sqlite3
|
51
|
-
- ruby_version: '2.7'
|
52
|
-
rails_version: '7.1'
|
53
|
-
db: postgresql
|
54
|
-
- ruby_version: '2.7'
|
55
|
-
rails_version: '7.1'
|
56
|
-
db: mysql
|
57
|
-
|
58
|
-
- ruby_version: '2.7'
|
59
|
-
rails_version: '7.0'
|
60
|
-
db: sqlite3
|
61
|
-
- ruby_version: '2.7'
|
62
|
-
rails_version: '7.0'
|
63
|
-
db: postgresql
|
64
|
-
- ruby_version: '2.7'
|
65
|
-
rails_version: '7.0'
|
66
|
-
db: mysql
|
67
|
-
|
68
|
-
- ruby_version: '3.0'
|
69
|
-
rails_version: '6.1'
|
70
|
-
db: sqlite3
|
71
|
-
- ruby_version: '3.0'
|
72
|
-
rails_version: '6.1'
|
73
|
-
db: postgresql
|
74
|
-
- ruby_version: '3.0'
|
75
|
-
rails_version: '6.1'
|
76
|
-
db: mysql
|
77
|
-
|
78
|
-
- ruby_version: '2.6'
|
79
|
-
rails_version: '6.1'
|
80
|
-
db: sqlite3
|
81
|
-
- ruby_version: '2.6'
|
82
|
-
rails_version: '6.1'
|
83
|
-
db: postgresql
|
84
|
-
- ruby_version: '2.6'
|
85
|
-
rails_version: '6.1'
|
86
|
-
db: mysql
|
87
|
-
|
88
|
-
- ruby_version: '2.7'
|
89
|
-
rails_version: '6.0'
|
90
|
-
db: sqlite3
|
91
|
-
- ruby_version: '2.7'
|
92
|
-
rails_version: '6.0'
|
93
|
-
db: postgresql
|
94
|
-
- ruby_version: '2.7'
|
95
|
-
rails_version: '6.0'
|
96
|
-
db: mysql
|
97
|
-
|
98
|
-
- ruby_version: '2.7'
|
99
|
-
rails_version: '5.2'
|
100
|
-
db: sqlite3
|
101
|
-
- ruby_version: '2.7'
|
102
|
-
rails_version: '5.2'
|
103
|
-
db: postgresql
|
104
|
-
- ruby_version: '2.7'
|
105
|
-
rails_version: '5.2'
|
106
|
-
db: mysql
|
107
|
-
- ruby_version: '2.4'
|
108
|
-
rails_version: '5.2'
|
109
|
-
db: sqlite3
|
110
|
-
- ruby_version: '2.4'
|
111
|
-
rails_version: '5.2'
|
112
|
-
db: postgresql
|
113
|
-
- ruby_version: '2.4'
|
114
|
-
rails_version: '5.2'
|
115
|
-
db: mysql
|
116
|
-
|
117
|
-
- ruby_version: '2.6'
|
118
|
-
rails_version: '5.1'
|
119
|
-
db: sqlite3
|
120
|
-
- ruby_version: '2.6'
|
121
|
-
rails_version: '5.1'
|
122
|
-
db: postgresql
|
123
|
-
- ruby_version: '2.6'
|
124
|
-
rails_version: '5.1'
|
125
|
-
db: mysql
|
126
|
-
|
127
|
-
- ruby_version: '2.5'
|
128
|
-
rails_version: '5.0'
|
129
|
-
db: sqlite3
|
130
|
-
- ruby_version: '2.5'
|
131
|
-
rails_version: '5.0'
|
132
|
-
db: postgresql
|
133
|
-
- ruby_version: '2.5'
|
134
|
-
rails_version: '5.0'
|
135
|
-
db: mysql
|
136
|
-
|
137
|
-
- ruby_version: '2.4'
|
138
|
-
rails_version: '4.2'
|
139
|
-
db: sqlite3
|
140
|
-
- ruby_version: '2.4'
|
141
|
-
rails_version: '4.2'
|
142
|
-
db: postgresql
|
143
|
-
- ruby_version: '2.4'
|
144
|
-
rails_version: '4.2'
|
145
|
-
db: mysql
|
146
|
-
|
147
|
-
runs-on: ubuntu-20.04
|
148
|
-
|
149
|
-
env:
|
150
|
-
RAILS_VERSION: ${{ matrix.rails_version }}
|
151
|
-
DB: ${{ matrix.db }}
|
152
|
-
|
153
|
-
steps:
|
154
|
-
- uses: actions/checkout@v4
|
155
|
-
|
156
|
-
- uses: ruby/setup-ruby@v1
|
157
|
-
with:
|
158
|
-
ruby-version: ${{ matrix.ruby_version }}
|
159
|
-
rubygems: ${{ matrix.ruby_version < '2.6' && 'default' || 'latest' }}
|
160
|
-
bundler: ${{ startsWith(matrix.rails_version, '4.') && '1' || 'latest' }}
|
161
|
-
bundler-cache: true
|
162
|
-
continue-on-error: ${{ (matrix.ruby_version == 'ruby-head') || (matrix.allow_failures == 'true') }}
|
163
|
-
|
164
|
-
- run: bundle exec rake
|
165
|
-
continue-on-error: ${{ (matrix.ruby_version == 'ruby-head') || (matrix.rails_version == 'edge') || (matrix.allow_failures == 'true') }}
|
data/.gitignore
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
*.gem
|
2
|
-
*.rbc
|
3
|
-
.bundle
|
4
|
-
.config
|
5
|
-
.yardoc
|
6
|
-
Gemfile.lock
|
7
|
-
gemfiles/*.lock
|
8
|
-
InstalledFiles
|
9
|
-
_yardoc
|
10
|
-
coverage
|
11
|
-
doc/
|
12
|
-
lib/bundler/man
|
13
|
-
pkg
|
14
|
-
rdoc
|
15
|
-
test/reports
|
16
|
-
test/tmp
|
17
|
-
test/version_tmp
|
18
|
-
tmp
|
19
|
-
log
|
20
|
-
test/*.sqlite3
|
21
|
-
test/db/*.sqlite3
|
data/Gemfile
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
source 'https://rubygems.org'
|
4
|
-
|
5
|
-
# Specify your gem's dependencies in database_rewinder.gemspec
|
6
|
-
gemspec
|
7
|
-
|
8
|
-
if ENV['RAILS_VERSION'] == 'edge'
|
9
|
-
gem 'rails', git: 'https://github.com/rails/rails.git'
|
10
|
-
elsif ENV['RAILS_VERSION']
|
11
|
-
gem 'rails', "~> #{ENV['RAILS_VERSION']}.0"
|
12
|
-
else
|
13
|
-
gem 'rails'
|
14
|
-
end
|
15
|
-
|
16
|
-
gem 'nokogiri', RUBY_VERSION < '2.1' ? '~> 1.6.0' : '>= 1.7'
|
17
|
-
gem 'loofah', RUBY_VERSION < '2.5' ? '< 2.21.0' : '>= 0'
|
18
|
-
gem 'selenium-webdriver'
|
19
|
-
|
20
|
-
rails_version = ENV['RAILS_VERSION'] || '∞'
|
21
|
-
|
22
|
-
case ENV['DB']
|
23
|
-
when 'postgresql'
|
24
|
-
gem 'pg', rails_version <= '5.2' ? '~> 0.21' : '>= 1'
|
25
|
-
when 'mysql'
|
26
|
-
if rails_version <= '4.1'
|
27
|
-
gem 'mysql2', '~> 0.3.13'
|
28
|
-
elsif rails_version <= '4.2'
|
29
|
-
gem 'mysql2', '~> 0.4.0'
|
30
|
-
else
|
31
|
-
gem 'mysql2'
|
32
|
-
end
|
33
|
-
else
|
34
|
-
gem 'sqlite3', rails_version <= '5.0' ? '< 1.4' : '>= 1.4'
|
35
|
-
end
|
data/Rakefile
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'bundler'
|
4
|
-
require 'bundler/setup'
|
5
|
-
require "bundler/gem_tasks"
|
6
|
-
require 'rake/testtask'
|
7
|
-
|
8
|
-
Rake::TestTask.new do |t|
|
9
|
-
t.libs << 'test'
|
10
|
-
t.pattern = 'test/**/*_test.rb'
|
11
|
-
t.warning = true
|
12
|
-
t.verbose = true
|
13
|
-
end
|
14
|
-
|
15
|
-
task default: :test
|
data/database_rewinder.gemspec
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
lib = File.expand_path('../lib', __FILE__)
|
5
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
6
|
-
|
7
|
-
Gem::Specification.new do |spec|
|
8
|
-
spec.name = "database_rewinder"
|
9
|
-
spec.version = '1.0.0'
|
10
|
-
spec.authors = ["Akira Matsuda"]
|
11
|
-
spec.email = ["ronnie@dio.jp"]
|
12
|
-
spec.description = "A minimalist's tiny and ultra-fast database cleaner for Active Record"
|
13
|
-
spec.summary = "A minimalist's tiny and ultra-fast database cleaner"
|
14
|
-
spec.homepage = 'https://github.com/amatsuda/database_rewinder'
|
15
|
-
spec.license = "MIT"
|
16
|
-
|
17
|
-
spec.files = `git ls-files`.split($/)
|
18
|
-
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
|
-
spec.require_paths = ["lib"]
|
21
|
-
|
22
|
-
spec.add_development_dependency 'bundler'
|
23
|
-
spec.add_development_dependency "rake"
|
24
|
-
spec.add_development_dependency 'test-unit-rails'
|
25
|
-
spec.add_development_dependency 'rails'
|
26
|
-
spec.required_ruby_version = '>= 2.0.0'
|
27
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class DatabaseRewinder::InsertRecorderTest < ActiveSupport::TestCase
|
6
|
-
setup do
|
7
|
-
DatabaseRewinder.init
|
8
|
-
Foo.create! name: 'foo1'
|
9
|
-
Bar.connection.execute "insert into bars (name) values ('bar1')"
|
10
|
-
DatabaseRewinder.cleaners
|
11
|
-
end
|
12
|
-
|
13
|
-
test '#execute' do
|
14
|
-
cleaner = DatabaseRewinder.instance_variable_get(:'@cleaners').detect {|c| c.db == (ENV['DB'] == 'sqlite3' ? 'db/database_rewinder_test.sqlite3' : 'database_rewinder_test')}
|
15
|
-
|
16
|
-
assert_equal %w(foos bars), cleaner.inserted_tables
|
17
|
-
assert_not_nil cleaner.pool
|
18
|
-
end
|
19
|
-
end
|
data/test/cleaner_test.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class DatabaseRewinder::CleanerTest < ActiveSupport::TestCase
|
6
|
-
sub_test_case '#strategy=' do
|
7
|
-
setup { @cleaner = DatabaseRewinder::Cleaner.new(only: ['foos'], except: 'bars') }
|
8
|
-
|
9
|
-
test 'without options' do
|
10
|
-
@cleaner.strategy = :truncation
|
11
|
-
|
12
|
-
# it should keep instance variables
|
13
|
-
assert_equal ['foos'], @cleaner.instance_variable_get(:@only)
|
14
|
-
assert_equal ['bars'], @cleaner.instance_variable_get(:@except)
|
15
|
-
end
|
16
|
-
|
17
|
-
test 'with options (an array or a string)' do
|
18
|
-
@cleaner.strategy = :truncation, { only: ['bars'], except: 'bazs' }
|
19
|
-
|
20
|
-
# it should overwrite instance variables
|
21
|
-
assert_equal ['bars'], @cleaner.instance_variable_get(:@only)
|
22
|
-
assert_equal ['bazs'], @cleaner.instance_variable_get(:@except)
|
23
|
-
end
|
24
|
-
|
25
|
-
test 'with options (an empty array or nil)' do
|
26
|
-
@cleaner.strategy = :truncation, { only: [], except: nil }
|
27
|
-
|
28
|
-
# it should overwrite instance variables even if they are empty/nil
|
29
|
-
assert_equal [], @cleaner.instance_variable_get(:@only)
|
30
|
-
assert_equal [], @cleaner.instance_variable_get(:@except)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
data/test/config/database.yml
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
<% case ENV['DB']
|
2
|
-
when 'sqlite3' %>
|
3
|
-
test:
|
4
|
-
adapter: sqlite3
|
5
|
-
database: db/database_rewinder_test.sqlite3
|
6
|
-
pool: 5
|
7
|
-
timeout: 5000
|
8
|
-
|
9
|
-
test2:
|
10
|
-
adapter: sqlite3
|
11
|
-
database: db/database_rewinder_test2.sqlite3
|
12
|
-
pool: 5
|
13
|
-
timeout: 5000
|
14
|
-
|
15
|
-
<% when 'mysql' %>
|
16
|
-
test:
|
17
|
-
adapter: mysql2
|
18
|
-
host: 127.0.0.1
|
19
|
-
username: root
|
20
|
-
password:
|
21
|
-
database: database_rewinder_test
|
22
|
-
|
23
|
-
test2:
|
24
|
-
adapter: mysql2
|
25
|
-
host: 127.0.0.1
|
26
|
-
username: root
|
27
|
-
password:
|
28
|
-
database: database_rewinder_test2
|
29
|
-
|
30
|
-
<% when 'postgresql' %>
|
31
|
-
superuser_connection:
|
32
|
-
adapter: postgresql
|
33
|
-
host: localhost
|
34
|
-
# this user has to be a superuser for the tests to pass
|
35
|
-
username: postgres
|
36
|
-
password: postgres
|
37
|
-
database: postgres
|
38
|
-
|
39
|
-
test:
|
40
|
-
adapter: postgresql
|
41
|
-
host: localhost
|
42
|
-
username: database_rewinder_user
|
43
|
-
password: postgres
|
44
|
-
database: database_rewinder_test
|
45
|
-
|
46
|
-
test2:
|
47
|
-
adapter: postgresql
|
48
|
-
host: localhost
|
49
|
-
username: database_rewinder_user
|
50
|
-
password: postgres
|
51
|
-
database: database_rewinder_test2
|
52
|
-
<% end %>
|
@@ -1,324 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class DatabaseRewinder::DatabaseRewinderTest < ActiveSupport::TestCase
|
6
|
-
if ActiveRecord::VERSION::MAJOR >= 5
|
7
|
-
self.use_transactional_tests = false
|
8
|
-
else
|
9
|
-
self.use_transactional_fixtures = false
|
10
|
-
end
|
11
|
-
|
12
|
-
setup do
|
13
|
-
DatabaseRewinder.init
|
14
|
-
end
|
15
|
-
|
16
|
-
sub_test_case '.[]' do
|
17
|
-
teardown do
|
18
|
-
DatabaseRewinder.database_configuration = nil
|
19
|
-
end
|
20
|
-
sub_test_case 'for connecting to an arbitrary database' do
|
21
|
-
def assert_cleaners_added(cleaner_names)
|
22
|
-
connection_names = DatabaseRewinder.instance_variable_get(:'@cleaners').map {|c| c.connection_name}
|
23
|
-
yield
|
24
|
-
assert_equal cleaner_names, DatabaseRewinder.instance_variable_get(:'@cleaners').map {|c| c.connection_name} - connection_names
|
25
|
-
end
|
26
|
-
|
27
|
-
test 'simply giving a connection name only' do
|
28
|
-
assert_cleaners_added ['aaa'] do
|
29
|
-
DatabaseRewinder.database_configuration = {'aaa' => {'adapter' => 'sqlite3', 'database' => ':memory:'}}
|
30
|
-
DatabaseRewinder['aaa']
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
test 'giving a connection name via Hash with :connection key' do
|
35
|
-
assert_cleaners_added ['bbb'] do
|
36
|
-
DatabaseRewinder.database_configuration = {'bbb' => {'adapter' => 'sqlite3', 'database' => ':memory:'}}
|
37
|
-
DatabaseRewinder[connection: 'bbb']
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
test 'the Cleaner compatible syntax' do
|
42
|
-
assert_cleaners_added ['ccc'] do
|
43
|
-
DatabaseRewinder.database_configuration = {'ccc' => {'adapter' => 'sqlite3', 'database' => ':memory:'}}
|
44
|
-
DatabaseRewinder[:aho, connection: 'ccc']
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
if ActiveRecord::VERSION::MAJOR >= 6
|
49
|
-
sub_test_case 'with traditional configurations' do
|
50
|
-
test 'simply giving a connection name only' do
|
51
|
-
assert_cleaners_added ['aaa'] do
|
52
|
-
DatabaseRewinder.database_configuration = ActiveRecord::DatabaseConfigurations.new({'aaa' => {'adapter' => 'sqlite3', 'database' => ':memory:'}})
|
53
|
-
DatabaseRewinder['aaa']
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
test 'giving a connection name via Hash with :connection key' do
|
58
|
-
assert_cleaners_added ['bbb'] do
|
59
|
-
DatabaseRewinder.database_configuration = ActiveRecord::DatabaseConfigurations.new({'bbb' => {'adapter' => 'sqlite3', 'database' => ':memory:'}})
|
60
|
-
DatabaseRewinder[connection: 'bbb']
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
test 'the Cleaner compatible syntax' do
|
65
|
-
assert_cleaners_added ['ccc'] do
|
66
|
-
DatabaseRewinder.database_configuration = ActiveRecord::DatabaseConfigurations.new({'ccc' => {'adapter' => 'sqlite3', 'database' => ':memory:'}})
|
67
|
-
DatabaseRewinder[:aho, connection: 'ccc']
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
sub_test_case 'with multiple database configurations' do
|
73
|
-
test 'simply giving a connection name only' do
|
74
|
-
assert_cleaners_added ['aaa'] do
|
75
|
-
DatabaseRewinder.database_configuration = ActiveRecord::DatabaseConfigurations.new({'test' => {'aaa' => {'adapter' => 'sqlite3', 'database' => ':memory:'}}})
|
76
|
-
DatabaseRewinder['aaa']
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
test 'giving a connection name via Hash with :connection key' do
|
81
|
-
assert_cleaners_added ['bbb'] do
|
82
|
-
DatabaseRewinder.database_configuration = ActiveRecord::DatabaseConfigurations.new({'test' => {'bbb' => {'adapter' => 'sqlite3', 'database' => ':memory:'}}})
|
83
|
-
DatabaseRewinder[connection: 'bbb']
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
test 'the Cleaner compatible syntax' do
|
88
|
-
assert_cleaners_added ['ccc'] do
|
89
|
-
DatabaseRewinder.database_configuration = ActiveRecord::DatabaseConfigurations.new({'test' => {'ccc' => {'adapter' => 'sqlite3', 'database' => ':memory:'}}})
|
90
|
-
DatabaseRewinder[:aho, connection: 'ccc']
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
test 'for connecting to multiple databases' do
|
98
|
-
DatabaseRewinder[:active_record, connection: 'test']
|
99
|
-
DatabaseRewinder[:active_record, connection: 'test2']
|
100
|
-
|
101
|
-
Foo.create! name: 'foo1'
|
102
|
-
Quu.create! name: 'quu1'
|
103
|
-
|
104
|
-
DatabaseRewinder.clean
|
105
|
-
|
106
|
-
# it should clean all configured databases
|
107
|
-
assert_equal 0, Foo.count
|
108
|
-
assert_equal 0, Quu.count
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
sub_test_case '.record_inserted_table' do
|
113
|
-
setup do
|
114
|
-
DatabaseRewinder.cleaners
|
115
|
-
end
|
116
|
-
|
117
|
-
def perform_insert(sql)
|
118
|
-
@cleaner = DatabaseRewinder.instance_variable_get(:'@cleaners').detect {|c| c.db == (ENV['DB'] == 'sqlite3' ? 'db/database_rewinder_test.sqlite3' : 'database_rewinder_test')}
|
119
|
-
|
120
|
-
connection = ::ActiveRecord::Base.connection
|
121
|
-
DatabaseRewinder.record_inserted_table(connection, sql)
|
122
|
-
end
|
123
|
-
teardown do
|
124
|
-
DatabaseRewinder.database_configuration = nil
|
125
|
-
end
|
126
|
-
|
127
|
-
sub_test_case 'via General Active Record insertions' do
|
128
|
-
setup do
|
129
|
-
DatabaseRewinder.cleaners
|
130
|
-
@cleaner = DatabaseRewinder.instance_variable_get(:'@cleaners').detect {|c| c.db == (ENV['DB'] == 'sqlite3' ? 'db/database_rewinder_test.sqlite3' : 'database_rewinder_test')}
|
131
|
-
end
|
132
|
-
|
133
|
-
test 'create' do
|
134
|
-
Bar.create name: 'bar1'
|
135
|
-
assert_equal ['bars'], @cleaner.inserted_tables
|
136
|
-
end
|
137
|
-
|
138
|
-
if ActiveRecord::VERSION::MAJOR >= 6
|
139
|
-
test 'insert_all' do
|
140
|
-
Bar.insert_all! [{name: 'bar1'}]
|
141
|
-
assert_equal ['bars'], @cleaner.inserted_tables
|
142
|
-
end
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
sub_test_case 'common database' do
|
147
|
-
test 'include database name' do
|
148
|
-
perform_insert 'INSERT INTO "database"."foos" ("name") VALUES (?)'
|
149
|
-
assert_equal ['foos'], @cleaner.inserted_tables
|
150
|
-
end
|
151
|
-
test 'only table name' do
|
152
|
-
perform_insert 'INSERT INTO "foos" ("name") VALUES (?)'
|
153
|
-
assert_equal ['foos'], @cleaner.inserted_tables
|
154
|
-
end
|
155
|
-
test 'without "INTO"' do
|
156
|
-
perform_insert 'INSERT "foos" ("name") VALUES (?)'
|
157
|
-
assert_equal ['foos'], @cleaner.inserted_tables
|
158
|
-
end
|
159
|
-
test 'with space before "INSERT"' do
|
160
|
-
perform_insert <<-SQL
|
161
|
-
INSERT INTO "foos" ("name") VALUES (?)
|
162
|
-
SQL
|
163
|
-
assert_equal ['foos'], @cleaner.inserted_tables
|
164
|
-
end
|
165
|
-
test 'without spaces between table name and columns list' do
|
166
|
-
perform_insert 'INSERT INTO foos(name) VALUES (?)'
|
167
|
-
assert_equal ['foos'], @cleaner.inserted_tables
|
168
|
-
end
|
169
|
-
|
170
|
-
test 'with multi statement query' do
|
171
|
-
perform_insert <<-SQL
|
172
|
-
INSERT INTO "foos" ("name") VALUES (?);
|
173
|
-
INSERT INTO "bars" ("name") VALUES (?)
|
174
|
-
SQL
|
175
|
-
assert_equal ['foos', 'bars'], @cleaner.inserted_tables
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
sub_test_case 'Database accepts more than one dots in an object notation (e.g. SQLServer)' do
|
180
|
-
test 'full joined' do
|
181
|
-
perform_insert 'INSERT INTO server.database.schema.foos ("name") VALUES (?)'
|
182
|
-
assert_equal ['foos'], @cleaner.inserted_tables
|
183
|
-
end
|
184
|
-
test 'missing one' do
|
185
|
-
perform_insert 'INSERT INTO database..foos ("name") VALUES (?)'
|
186
|
-
assert_equal ['foos'], @cleaner.inserted_tables
|
187
|
-
end
|
188
|
-
|
189
|
-
test 'missing two' do
|
190
|
-
perform_insert 'INSERT INTO server...foos ("name") VALUES (?)'
|
191
|
-
assert_equal ['foos'], @cleaner.inserted_tables
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
test 'when database accepts INSERT IGNORE INTO statement' do
|
196
|
-
perform_insert "INSERT IGNORE INTO `foos` (`name`) VALUES ('alice'), ('bob') ON DUPLICATE KEY UPDATE `foos`.`updated_at`=VALUES(`updated_at`)"
|
197
|
-
assert_equal ['foos'], @cleaner.inserted_tables
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
test '.clean' do
|
202
|
-
bar = Bar.create! name: 'bar1'
|
203
|
-
Foo.create! name: 'foo1', bar_id: bar.id
|
204
|
-
DatabaseRewinder.clean
|
205
|
-
|
206
|
-
assert_equal 0, Foo.count
|
207
|
-
assert_equal 0, Bar.count
|
208
|
-
end
|
209
|
-
|
210
|
-
if ActiveRecord::VERSION::MAJOR >= 4
|
211
|
-
sub_test_case 'migrations' do
|
212
|
-
if ActiveRecord::VERSION::STRING >= '7.1'
|
213
|
-
test '.clean_all should not touch AR::SchemaMigration' do
|
214
|
-
schema_migration = ActiveRecord::SchemaMigration.new(ActiveRecord::Base.connection)
|
215
|
-
schema_migration.create_table
|
216
|
-
|
217
|
-
begin
|
218
|
-
schema_migration.create_version '001'
|
219
|
-
DatabaseRewinder.clean_all
|
220
|
-
|
221
|
-
assert_equal 0, Foo.count
|
222
|
-
assert_equal 1, schema_migration.count
|
223
|
-
ensure
|
224
|
-
schema_migration.drop_table
|
225
|
-
end
|
226
|
-
end
|
227
|
-
else
|
228
|
-
test '.clean_all should not touch AR::SchemaMigration' do
|
229
|
-
ActiveRecord::SchemaMigration.create_table
|
230
|
-
|
231
|
-
begin
|
232
|
-
ActiveRecord::SchemaMigration.create! version: '001'
|
233
|
-
DatabaseRewinder.clean_all
|
234
|
-
|
235
|
-
assert_equal 0, Foo.count
|
236
|
-
assert_equal 1, ActiveRecord::SchemaMigration.count
|
237
|
-
ensure
|
238
|
-
ActiveRecord::SchemaMigration.drop_table
|
239
|
-
end
|
240
|
-
end
|
241
|
-
end
|
242
|
-
end
|
243
|
-
end
|
244
|
-
|
245
|
-
sub_test_case '.clean_with' do
|
246
|
-
def perform_clean(options)
|
247
|
-
@cleaner = DatabaseRewinder.cleaners.first
|
248
|
-
@only = @cleaner.instance_variable_get(:@only)
|
249
|
-
@except = @cleaner.instance_variable_get(:@except)
|
250
|
-
Foo.create! name: 'foo1'
|
251
|
-
Bar.create! name: 'bar1'
|
252
|
-
DatabaseRewinder.clean_with :truncation, **options
|
253
|
-
end
|
254
|
-
|
255
|
-
test 'with only option' do
|
256
|
-
perform_clean only: ['foos']
|
257
|
-
assert_equal 0, Foo.count
|
258
|
-
assert_equal 1, Bar.count
|
259
|
-
assert_equal @only, @cleaner.instance_variable_get(:@only)
|
260
|
-
end
|
261
|
-
|
262
|
-
test 'with except option' do
|
263
|
-
perform_clean except: ['bars']
|
264
|
-
assert_equal 0, Foo.count
|
265
|
-
assert_equal 1, Bar.count
|
266
|
-
assert_equal @except, @cleaner.instance_variable_get(:@except)
|
267
|
-
end
|
268
|
-
end
|
269
|
-
|
270
|
-
sub_test_case '.cleaning' do
|
271
|
-
test 'without exception' do
|
272
|
-
DatabaseRewinder.cleaning do
|
273
|
-
Foo.create! name: 'foo1'
|
274
|
-
end
|
275
|
-
|
276
|
-
assert_equal 0, Foo.count
|
277
|
-
end
|
278
|
-
|
279
|
-
test 'with exception' do
|
280
|
-
assert_raises do
|
281
|
-
DatabaseRewinder.cleaning do
|
282
|
-
Foo.create! name: 'foo1'; fail
|
283
|
-
end
|
284
|
-
end
|
285
|
-
assert_equal 0, Foo.count
|
286
|
-
end
|
287
|
-
end
|
288
|
-
|
289
|
-
sub_test_case '.strategy=' do
|
290
|
-
sub_test_case 'call first with options' do
|
291
|
-
setup do
|
292
|
-
DatabaseRewinder.strategy = :truncate, { only: ['foos'], except: ['bars'] }
|
293
|
-
end
|
294
|
-
|
295
|
-
test 'should set options' do
|
296
|
-
assert_equal ['foos'], DatabaseRewinder.instance_variable_get(:@only)
|
297
|
-
assert_equal ['bars'], DatabaseRewinder.instance_variable_get(:@except)
|
298
|
-
end
|
299
|
-
|
300
|
-
test 'should create cleaner with options' do
|
301
|
-
cleaner = DatabaseRewinder.instance_variable_get(:@cleaners).first
|
302
|
-
assert_equal ['foos'], cleaner.instance_variable_get(:@only)
|
303
|
-
assert_equal ['bars'], cleaner.instance_variable_get(:@except)
|
304
|
-
end
|
305
|
-
|
306
|
-
sub_test_case 'call again with different options' do
|
307
|
-
setup do
|
308
|
-
DatabaseRewinder.strategy = :truncate, { only: ['bazs'], except: [] }
|
309
|
-
end
|
310
|
-
|
311
|
-
test 'should overwrite options' do
|
312
|
-
assert_equal ['bazs'], DatabaseRewinder.instance_variable_get(:@only)
|
313
|
-
assert_equal [], DatabaseRewinder.instance_variable_get(:@except)
|
314
|
-
end
|
315
|
-
|
316
|
-
test 'should overwrite cleaner with new options' do
|
317
|
-
cleaner = DatabaseRewinder.instance_variable_get(:@cleaners).first
|
318
|
-
assert_equal ['bazs'], cleaner.instance_variable_get(:@only)
|
319
|
-
assert_equal [], cleaner.instance_variable_get(:@except)
|
320
|
-
end
|
321
|
-
end
|
322
|
-
end
|
323
|
-
end
|
324
|
-
end
|
data/test/db/.keep
DELETED
File without changes
|
data/test/fake_app.rb
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
ENV['DB'] ||= 'sqlite3'
|
4
|
-
require 'active_record/railtie'
|
5
|
-
|
6
|
-
module DatabaseRewinderTestApp
|
7
|
-
Application = Class.new(Rails::Application) do
|
8
|
-
# Rais.root
|
9
|
-
config.root = __dir__
|
10
|
-
|
11
|
-
config.eager_load = false
|
12
|
-
config.active_support.deprecation = :log
|
13
|
-
|
14
|
-
rake_tasks do
|
15
|
-
load 'active_record/railties/databases.rake'
|
16
|
-
end
|
17
|
-
end.initialize!
|
18
|
-
end
|
19
|
-
|
20
|
-
require 'active_record/base'
|
21
|
-
|
22
|
-
if ENV['DB'] == 'postgresql'
|
23
|
-
ActiveRecord::Base.establish_connection(:superuser_connection).connection.execute(<<-CREATE_ROLE_SQL)
|
24
|
-
DO
|
25
|
-
$do$
|
26
|
-
BEGIN
|
27
|
-
IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = 'database_rewinder_user') THEN
|
28
|
-
CREATE ROLE database_rewinder_user LOGIN PASSWORD 'postgres' createdb;
|
29
|
-
END IF;
|
30
|
-
END
|
31
|
-
$do$
|
32
|
-
CREATE_ROLE_SQL
|
33
|
-
ActiveRecord::Base.remove_connection
|
34
|
-
end
|
35
|
-
|
36
|
-
ActiveRecord::Tasks::DatabaseTasks.root ||= Rails.root
|
37
|
-
ActiveRecord::Tasks::DatabaseTasks.drop_current 'test'
|
38
|
-
ActiveRecord::Tasks::DatabaseTasks.drop_current 'test2'
|
39
|
-
ActiveRecord::Tasks::DatabaseTasks.create_current 'test'
|
40
|
-
ActiveRecord::Tasks::DatabaseTasks.create_current 'test2'
|
41
|
-
|
42
|
-
# models
|
43
|
-
class Foo < ActiveRecord::Base; end
|
44
|
-
class Bar < ActiveRecord::Base; end
|
45
|
-
class Baz < ActiveRecord::Base; end
|
46
|
-
class Quu < ActiveRecord::Base
|
47
|
-
establish_connection :test2
|
48
|
-
end
|
49
|
-
|
50
|
-
# migrations
|
51
|
-
class CreateAllTables < ActiveRecord::VERSION::MAJOR >= 5 ? ActiveRecord::Migration[5.0] : ActiveRecord::Migration
|
52
|
-
def self.up
|
53
|
-
ActiveRecord::Base.establish_connection :test
|
54
|
-
create_table(:bars) {|t| t.string :name; t.index :name, unique: true }
|
55
|
-
create_table(:foos) {|t| t.string :name; t.references :bar, foreign_key: true }
|
56
|
-
create_table(:bazs) {|t| t.string :name }
|
57
|
-
|
58
|
-
test2_connection = ActiveRecord::Base.establish_connection(:test2).connection
|
59
|
-
test2_connection.create_table(:quus) {|t| t.string :name }
|
60
|
-
ActiveRecord::Base.establish_connection :test
|
61
|
-
end
|
62
|
-
|
63
|
-
def self.down
|
64
|
-
drop_table(:foos) {|t| t.string :name }
|
65
|
-
drop_table(:bars) {|t| t.string :name }
|
66
|
-
drop_table(:bazs) {|t| t.string :name }
|
67
|
-
|
68
|
-
test2_connection = ActiveRecord::Base.establish_connection(:test2).connection
|
69
|
-
test2_connection.drop_table :quus
|
70
|
-
ActiveRecord::Base.establish_connection :test
|
71
|
-
end
|
72
|
-
end
|
data/test/test_helper.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
ENV['RAILS_ENV'] ||= 'test'
|
4
|
-
|
5
|
-
$LOAD_PATH.unshift(File.join(__dir__, '..', 'lib'))
|
6
|
-
$LOAD_PATH.unshift(__dir__)
|
7
|
-
|
8
|
-
require 'rails'
|
9
|
-
require 'active_record'
|
10
|
-
require 'database_rewinder'
|
11
|
-
require 'fake_app'
|
12
|
-
require 'test/unit/rails/test_help'
|
13
|
-
begin
|
14
|
-
require 'selenium/webdriver' # rails 6
|
15
|
-
rescue LoadError
|
16
|
-
end
|
17
|
-
|
18
|
-
migrated = ActiveRecord::Base.connection.respond_to?(:data_source_exists?) ? ActiveRecord::Base.connection.data_source_exists?('foos') : ActiveRecord::Base.connection.table_exists?('foos')
|
19
|
-
CreateAllTables.up unless migrated
|
20
|
-
|
21
|
-
module DeleteAllTables
|
22
|
-
def teardown
|
23
|
-
super
|
24
|
-
[Foo, Bar, Baz, Quu].each {|m| m.delete_all }
|
25
|
-
end
|
26
|
-
end
|
27
|
-
ActiveSupport::TestCase.send :prepend, DeleteAllTables
|