forked from brynary/arel
-
Notifications
You must be signed in to change notification settings - Fork 390
/
test_update_manager.rb
115 lines (99 loc) · 2.97 KB
/
test_update_manager.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
require 'helper'
module Arel
describe 'update manager' do
describe 'new' do
it 'takes an engine' do
Arel::UpdateManager.new Table.engine
end
end
it 'handles limit properly' do
table = Table.new(:users)
um = Arel::UpdateManager.new Table.engine
um.take 10
um.table table
um.set [[table[:name], nil]]
assert_match(/LIMIT 10/, um.to_sql)
end
describe 'set' do
it "updates with null" do
table = Table.new(:users)
um = Arel::UpdateManager.new Table.engine
um.table table
um.set [[table[:name], nil]]
um.to_sql.must_be_like %{ UPDATE "users" SET "name" = NULL }
end
it 'takes a string' do
table = Table.new(:users)
um = Arel::UpdateManager.new Table.engine
um.table table
um.set Nodes::SqlLiteral.new "foo = bar"
um.to_sql.must_be_like %{ UPDATE "users" SET foo = bar }
end
it 'takes a list of lists' do
table = Table.new(:users)
um = Arel::UpdateManager.new Table.engine
um.table table
um.set [[table[:id], 1], [table[:name], 'hello']]
um.to_sql.must_be_like %{
UPDATE "users" SET "id" = 1, "name" = 'hello'
}
end
it 'chains' do
table = Table.new(:users)
um = Arel::UpdateManager.new Table.engine
um.set([[table[:id], 1], [table[:name], 'hello']]).must_equal um
end
end
describe 'table' do
it 'generates an update statement' do
um = Arel::UpdateManager.new Table.engine
um.table Table.new(:users)
um.to_sql.must_be_like %{ UPDATE "users" }
end
it 'chains' do
um = Arel::UpdateManager.new Table.engine
um.table(Table.new(:users)).must_equal um
end
it 'generates an update statement with joins' do
um = Arel::UpdateManager.new Table.engine
table = Table.new(:users)
join_source = Arel::Nodes::JoinSource.new(
table,
[table.create_join(Table.new(:posts))]
)
um.table join_source
um.to_sql.must_be_like %{ UPDATE "users" INNER JOIN "posts" }
end
end
describe 'where' do
it 'generates a where clause' do
table = Table.new :users
um = Arel::UpdateManager.new Table.engine
um.table table
um.where table[:id].eq(1)
um.to_sql.must_be_like %{
UPDATE "users" WHERE "users"."id" = 1
}
end
it 'chains' do
table = Table.new :users
um = Arel::UpdateManager.new Table.engine
um.table table
um.where(table[:id].eq(1)).must_equal um
end
end
describe 'key' do
before do
@table = Table.new :users
@um = Arel::UpdateManager.new Table.engine
@um.key = @table[:foo]
end
it 'can be set' do
@um.ast.key.must_equal @table[:foo]
end
it 'can be accessed' do
@um.key.must_equal @table[:foo]
end
end
end
end