-
Notifications
You must be signed in to change notification settings - Fork 563
/
Copy pathutils_test_sqlserver.rb
129 lines (106 loc) · 5.33 KB
/
utils_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
require 'cases/helper_sqlserver'
class UtilsTestSQLServer < ActiveRecord::TestCase
it '.quote_string' do
SQLServer::Utils.quote_string("I'll store this in C:\\Users").must_equal "I''ll store this in C:\\Users"
end
it '.unquote_string' do
SQLServer::Utils.unquote_string("I''ll store this in C:\\Users").must_equal "I'll store this in C:\\Users"
end
it '.quoted_raw' do
SQLServer::Utils.quoted_raw("some.Name").must_equal "[some.Name]"
end
describe '.extract_identifiers constructor and thus SQLServer::Utils::Name value object' do
let(:valid_names) { valid_names_unquoted + valid_names_quoted }
let(:valid_names_unquoted) {[
'server.database.schema.object',
'server.database..object',
'server..schema.object',
'server...object',
'database.schema.object',
'database..object',
'schema.object',
'object'
]}
let(:valid_names_quoted) {[
'[server].[database].[schema].[object]',
'[server].[database]..[object]',
'[server]..[schema].[object]',
'[server]...[object]',
'[database].[schema].[object]',
'[database]..[object]',
'[schema].[object]',
'[object]'
]}
let(:server_names) { valid_names.partition { |name| name =~ /server/ } }
let(:database_names) { valid_names.partition { |name| name =~ /database/ } }
let(:schema_names) { valid_names.partition { |name| name =~ /schema/ } }
it 'extracts and returns #object identifier unquoted by default or quoted as needed' do
valid_names.each do |n|
name = extract_identifiers(n)
name.object.must_equal 'object', "With #{n.inspect} for #object"
name.object_quoted.must_equal '[object]', "With #{n.inspect} for #object_quoted"
end
end
[:schema, :database, :server].each do |part|
it "extracts and returns #{part} identifier unquoted by default or quoted as needed" do
present, blank = send(:"#{part}_names")
present.each do |n|
name = extract_identifiers(n)
name.send(:"#{part}").must_equal "#{part}", "With #{n.inspect} for ##{part} method"
name.send(:"#{part}_quoted").must_equal "[#{part}]", "With #{n.inspect} for ##{part}_quoted method"
end
blank.each do |n|
name = extract_identifiers(n)
name.send(:"#{part}").must_be_nil "With #{n.inspect} for ##{part} method"
name.send(:"#{part}_quoted").must_be_nil "With #{n.inspect} for ##{part}_quoted method"
end
end
end
it 'does not blow up on nil or blank string name' do
extract_identifiers(nil).object.must_be_nil
extract_identifiers(' ').object.must_be_nil
end
it 'has a #quoted that returns a fully quoted name with all identifiers as orginially passed in' do
extract_identifiers('object').quoted.must_equal '[object]'
extract_identifiers('server.database..object').quoted.must_equal '[server].[database]..[object]'
extract_identifiers('[server]...[object]').quoted.must_equal '[server]...[object]'
end
it 'can take a symbol argument' do
extract_identifiers(:object).object.must_equal 'object'
end
it 'allows identifiers with periods to work' do
extract_identifiers('[obj.name]').quoted.must_equal '[obj.name]'
extract_identifiers('[obj.name].[foo]').quoted.must_equal '[obj.name].[foo]'
end
it 'should indicate if a name is fully qualitified' do
extract_identifiers('object').fully_qualified?.must_equal false
extract_identifiers('schema.object').fully_qualified?.must_equal false
extract_identifiers('database.schema.object').fully_qualified?.must_equal false
extract_identifiers('database.object').fully_qualified?.must_equal false
extract_identifiers('server...object').fully_qualified?.must_equal false
extract_identifiers('server.database..object').fully_qualified?.must_equal false
extract_identifiers('server.database.schema.object').fully_qualified?.must_equal true
extract_identifiers('server.database.schema.').fully_qualified?.must_equal true
extract_identifiers('[obj.name]').fully_qualified?.must_equal false
extract_identifiers('[schema].[obj.name]').fully_qualified?.must_equal false
extract_identifiers('[database].[schema].[obj.name]').fully_qualified?.must_equal false
extract_identifiers('[database].[obj.name]').fully_qualified?.must_equal false
extract_identifiers('[server.name]...[obj.name]').fully_qualified?.must_equal false
extract_identifiers('[server.name].[database]..[obj.name]').fully_qualified?.must_equal false
extract_identifiers('[server.name].[database].[schema].[obj.name]').fully_qualified?.must_equal true
extract_identifiers('[server.name].[database].[schema].').fully_qualified?.must_equal true
end
it 'can return fully qualified quoted table name' do
name = extract_identifiers('[my.server].db.schema.')
name.fully_qualified_database_quoted.must_equal '[my.server].[db]'
name = extract_identifiers('[server.name].[database].[schema].[object]')
name.fully_qualified_database_quoted.must_equal '[server.name].[database]'
name = extract_identifiers('server.database.schema.object')
name.fully_qualified_database_quoted.must_equal '[server].[database]'
end
end
private
def extract_identifiers(name)
SQLServer::Utils.extract_identifiers(name)
end
end