-
Notifications
You must be signed in to change notification settings - Fork 75
/
syncers_spec.rb
171 lines (147 loc) · 6.51 KB
/
syncers_spec.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
160
161
162
163
164
165
166
167
168
169
170
171
require 'spec_helper'
include RR
describe Syncers do
before(:each) do
@old_syncers = Syncers.syncers
end
after(:each) do
Syncers.instance_variable_set :@syncers, @old_syncers
end
it "syncers should return empty hash if nil" do
Syncers.instance_variable_set :@syncers, nil
Syncers.syncers.should == {}
end
it "syncers should return the registered syncers" do
Syncers.instance_variable_set :@syncers, :dummy_data
Syncers.syncers.should == :dummy_data
end
it "configured_syncer should return the correct syncer as per :syncer option, if both :syncer and :replicator is configured" do
options = {
:syncer => :two_way,
:replicator => :key2
}
Syncers.configured_syncer(options).should == Syncers::TwoWaySyncer
end
it "configured_syncer should return the correct syncer as per :replicator option if no :syncer option is provided" do
options = {:replicator => :two_way}
Syncers.configured_syncer(options).should == Syncers::TwoWaySyncer
end
it "register should register the provided commiter" do
Syncers.instance_variable_set :@syncers, nil
Syncers.register :a_key => :a
Syncers.register :b_key => :b
Syncers.syncers[:a_key].should == :a
Syncers.syncers[:b_key].should == :b
end
end
describe Syncers::OneWaySyncer do
before(:each) do
Initializer.configuration = standard_config
end
it "should register itself" do
Syncers::syncers[:one_way].should == Syncers::OneWaySyncer
end
it "initialize should store sync_helper" do
sync = TableSync.new(Session.new, 'scanner_records')
helper = SyncHelper.new(sync)
syncer = Syncers::OneWaySyncer.new(helper)
syncer.sync_helper.should == helper
end
it "initialize should calculate course source, target and source_record_index" do
sync = TableSync.new(Session.new, 'scanner_records')
helper = SyncHelper.new(sync)
# verify correct behaviour if syncing to the left
helper.stub(:sync_options).and_return({:direction => :left})
syncer = Syncers::OneWaySyncer.new(helper)
syncer.source.should == :right
syncer.target.should == :left
syncer.source_record_index.should == 1
# verify correct behaviour if syncing to the right
helper.stub(:sync_options).and_return({:direction => :right})
syncer = Syncers::OneWaySyncer.new(helper)
syncer.source.should == :left
syncer.target.should == :right
syncer.source_record_index.should == 0
end
it "default_option should return the correct default options" do
Syncers::OneWaySyncer.default_options.should == {
:direction => :right,
:delete => false, :update => true, :insert => true
}
end
it "sync_difference should only delete if :delete option is given" do
sync = TableSync.new(Session.new, 'scanner_records')
helper = SyncHelper.new(sync)
helper.stub(:sync_options).and_return({:direction => :left})
syncer = Syncers::OneWaySyncer.new(helper)
helper.should_not_receive(:delete_record)
helper.should_not_receive(:update_record)
helper.should_not_receive(:insert_record)
syncer.sync_difference(:left, :dummy_record)
end
it "sync_difference should delete in the right database" do
sync = TableSync.new(Session.new, 'scanner_records')
helper = SyncHelper.new(sync)
helper.stub(:sync_options).and_return({:direction => :left, :delete => true})
syncer = Syncers::OneWaySyncer.new(helper)
helper.should_receive(:delete_record).with(:left, 'scanner_records', :dummy_record)
helper.should_not_receive(:update_record)
helper.should_not_receive(:insert_record)
syncer.sync_difference(:left, :dummy_record)
helper = SyncHelper.new(sync)
helper.stub(:sync_options).and_return({:direction => :right, :delete => true})
syncer = Syncers::OneWaySyncer.new(helper)
helper.should_receive(:delete_record).with(:right, 'scanner_records', :dummy_record)
syncer.sync_difference(:right, :dummy_record)
end
it "sync_difference should not insert if :insert option is not true" do
sync = TableSync.new(Session.new, 'scanner_records')
helper = SyncHelper.new(sync)
helper.stub(:sync_options).and_return({:direction => :left, :insert => false})
syncer = Syncers::OneWaySyncer.new(helper)
helper.should_not_receive(:delete_record)
helper.should_not_receive(:update_record)
helper.should_not_receive(:insert_record)
syncer.sync_difference(:right, :dummy_record)
end
it "sync_difference should insert in the right database" do
sync = TableSync.new(Session.new, 'scanner_records')
helper = SyncHelper.new(sync)
helper.stub(:sync_options).and_return({:direction => :left, :insert => true})
syncer = Syncers::OneWaySyncer.new(helper)
helper.should_not_receive(:delete_record)
helper.should_not_receive(:update_record)
helper.should_receive(:insert_record).with(:left, 'scanner_records', :dummy_record)
syncer.sync_difference(:right, :dummy_record)
helper = SyncHelper.new(sync)
helper.stub(:sync_options).and_return({:direction => :right, :insert => true})
syncer = Syncers::OneWaySyncer.new(helper)
helper.should_receive(:insert_record).with(:right, 'scanner_records', :dummy_record)
syncer.sync_difference(:left, :dummy_record)
end
it "sync_difference should not update if :update option is not true" do
sync = TableSync.new(Session.new, 'scanner_records')
helper = SyncHelper.new(sync)
helper.stub(:sync_options).and_return({:direction => :left, :update => false})
syncer = Syncers::OneWaySyncer.new(helper)
helper.should_not_receive(:delete_record)
helper.should_not_receive(:update_record)
helper.should_not_receive(:insert_record)
syncer.sync_difference(:conflict, :dummy_records)
end
it "sync_difference should update the right values in the right database" do
sync = TableSync.new(Session.new, 'scanner_records')
helper = SyncHelper.new(sync)
helper.stub(:sync_options).and_return({:direction => :left, :update => true})
syncer = Syncers::OneWaySyncer.new(helper)
helper.should_not_receive(:delete_record)
helper.should_receive(:update_record).with(:left, 'scanner_records', :right_record)
helper.should_not_receive(:insert_record)
syncer.sync_difference(:conflict, [:left_record, :right_record])
helper = SyncHelper.new(sync)
helper.stub(:sync_options).and_return({:direction => :right, :update => true})
syncer = Syncers::OneWaySyncer.new(helper)
helper.should_receive(:update_record).with(:right, 'scanner_records', :left_record)
syncer.sync_difference(:conflict, [:left_record, :right_record])
end
end