forked from rails-sqlserver/activerecord-sqlserver-adapter
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrake_test_sqlserver.rb
159 lines (118 loc) · 4.42 KB
/
rake_test_sqlserver.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
require 'cases/helper_sqlserver'
class SQLServerRakeTest < ActiveRecord::TestCase
self.use_transactional_fixtures = false
let(:db_tasks) { ActiveRecord::Tasks::DatabaseTasks }
let(:new_database) { 'activerecord_unittest_tasks' }
let(:default_configuration) { ARTest.connection_config['arunit'] }
let(:configuration) { default_configuration.merge('database' => new_database) }
before do
connection.disconnect!
end
after do
ActiveRecord::Base.establish_connection(default_configuration)
connection.drop_database(new_database) rescue nil
end
end
class SQLServerRakeCreateTest < SQLServerRakeTest
it 'establishes connection to database after create ' do
db_tasks.create configuration
connection.current_database.must_equal(new_database)
end
it 'creates database with default collation' do
db_tasks.create configuration
connection.collation.must_equal 'SQL_Latin1_General_CP1_CI_AS'
end
it 'creates database with given collation' do
db_tasks.create configuration.merge('collation' => 'Latin1_General_CI_AS')
connection.collation.must_equal 'Latin1_General_CI_AS'
end
it 'prints error message when database exists' do
db_tasks.create configuration
message = capture(:stderr) { db_tasks.create configuration }
message.must_match %r{activerecord_unittest_tasks already exists}
end
end
class SQLServerRakeDropTest < SQLServerRakeTest
it 'drops database and uses master' do
db_tasks.create configuration
db_tasks.drop configuration
connection.current_database.must_equal 'master'
end
it 'prints error message when database does not exist' do
message = capture(:stderr) { db_tasks.drop configuration.merge('database' => 'doesnotexist') }
message.must_match %r{'doesnotexist' does not exist}
end
end
class SQLServerRakePurgeTest < SQLServerRakeTest
before do
db_tasks.create(configuration)
connection.create_table :users, force: true do |t|
t.string :name, :email
t.timestamps null: false
end
end
it 'clears active connections, drops database, and recreates with established connection' do
connection.current_database.must_equal(new_database)
connection.tables.must_include 'users'
db_tasks.purge(configuration)
connection.current_database.must_equal(new_database)
connection.tables.wont_include 'users'
end
end
class SQLServerRakeCharsetTest < SQLServerRakeTest
before { db_tasks.create(configuration) }
it 'retrieves charset' do
db_tasks.charset(configuration).must_equal 'iso_1'
end
end
class SQLServerRakeCollationTest < SQLServerRakeTest
before { db_tasks.create(configuration) }
it 'retrieves collation' do
db_tasks.collation(configuration).must_equal 'SQL_Latin1_General_CP1_CI_AS'
end
end
class SQLServerRakeStructureDumpLoadTest < SQLServerRakeTest
let(:filename) { File.join ARTest::SQLServer.migrations_root, 'structure.sql' }
let(:filedata) { File.read(filename) }
before do
db_tasks.create(configuration)
connection.create_table :users, force: true do |t|
t.string :name, :email
t.text :background1
t.text_basic :background2
t.timestamps null: false
end
connection.execute <<-CUSTOMERSVIEW
CREATE VIEW users_view AS
SELECT name FROM users
CUSTOMERSVIEW
connection.execute <<-PROCEDUREDEF
CREATE PROCEDURE users_procedure AS
SELECT 1
PROCEDUREDEF
end
after do
FileUtils.rm_rf(filename)
end
it 'dumps structure and accounts for defncopy oddities' do
db_tasks.structure_dump configuration, filename
filedata.wont_match %r{\AUSE.*\z}
filedata.must_match %r{email\s+nvarchar\(4000\)}
filedata.must_match %r{background1\s+nvarchar\(max\)}
filedata.must_match %r{background2\s+text\s+}
end
it 'can load dumped structure' do
db_tasks.structure_dump configuration, filename
filedata.must_match %r{CREATE TABLE dbo\.users}
filedata.must_match %r{CREATE PROCEDURE users_procedure}
filedata.must_match %r{CREATE VIEW users_view}
db_tasks.purge(configuration)
connection.tables.wont_include 'users'
connection.send(:routines).wont_include 'users_procedure'
connection.send(:views).wont_include 'users_view'
db_tasks.load_schema_for configuration, :sql, filename
connection.tables.must_include 'users'
connection.send(:routines).must_include 'users_procedure'
connection.send(:views).must_include 'users_view'
end
end