-
Notifications
You must be signed in to change notification settings - Fork 676
/
local_spec.rb
179 lines (143 loc) · 5.59 KB
/
local_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
172
173
174
175
176
177
178
179
# encoding: utf-8
require File.expand_path('../../../spec_helper.rb', __FILE__)
module Backup
describe Syncer::RSync::Local do
before do
Syncer::RSync::Local.any_instance.
stubs(:utility).with(:rsync).returns('rsync')
end
describe '#initialize' do
after { Syncer::RSync::Local.clear_defaults! }
it 'should use the values given' do
syncer = Syncer::RSync::Local.new do |rsync|
rsync.path = "~/my_backups"
rsync.mirror = true
rsync.additional_rsync_options = ['--opt-a', '--opt-b']
rsync.directories do |directory|
directory.add "/some/directory"
directory.add "~/home/directory"
end
end
expect( syncer.path ).to eq '~/my_backups'
expect( syncer.mirror ).to be(true)
expect( syncer.directories ).to eq ['/some/directory', '~/home/directory']
expect( syncer.additional_rsync_options ).to eq ['--opt-a', '--opt-b']
end
it 'should use default values if none are given' do
syncer = Syncer::RSync::Local.new
expect( syncer.path ).to eq '~/backups'
expect( syncer.mirror ).to be(false)
expect( syncer.directories ).to eq []
expect( syncer.additional_rsync_options ).to be_nil
end
context 'when pre-configured defaults have been set' do
before do
Syncer::RSync::Local.defaults do |rsync|
rsync.path = 'some_path'
rsync.mirror = 'some_mirror'
rsync.additional_rsync_options = 'rsync_options'
end
end
it 'should use pre-configured defaults' do
syncer = Syncer::RSync::Local.new
expect( syncer.path ).to eq 'some_path'
expect( syncer.mirror ).to eq 'some_mirror'
expect( syncer.directories ).to eq []
expect( syncer.additional_rsync_options ).to eq 'rsync_options'
end
it 'should override pre-configured defaults' do
syncer = Syncer::RSync::Local.new do |rsync|
rsync.path = 'new_path'
rsync.mirror = 'new_mirror'
rsync.additional_rsync_options = 'new_rsync_options'
end
expect( syncer.path ).to eq 'new_path'
expect( syncer.mirror ).to eq 'new_mirror'
expect( syncer.directories ).to eq []
expect( syncer.additional_rsync_options ).to eq 'new_rsync_options'
end
end # context 'when pre-configured defaults have been set'
end # describe '#initialize'
describe '#perform!' do
specify 'with mirror option and Array of additional_rsync_options' do
syncer = Syncer::RSync::Local.new do |rsync|
rsync.path = "~/my_backups"
rsync.mirror = true
rsync.additional_rsync_options = ['--opt-a', '--opt-b']
rsync.directories do |directory|
directory.add "/some/directory/"
directory.add "~/home/directory"
end
end
FileUtils.expects(:mkdir_p).with(File.expand_path('~/my_backups/'))
syncer.expects(:run).with(
"rsync --archive --delete --opt-a --opt-b " +
"'/some/directory' '#{ File.expand_path('~/home/directory') }' " +
"'#{ File.expand_path('~/my_backups') }'"
)
syncer.perform!
end
specify 'without mirror option and String of additional_rsync_options' do
syncer = Syncer::RSync::Local.new do |rsync|
rsync.path = "~/my_backups"
rsync.additional_rsync_options = '--opt-a --opt-b'
rsync.directories do |directory|
directory.add "/some/directory/"
directory.add "~/home/directory"
end
end
FileUtils.expects(:mkdir_p).with(File.expand_path('~/my_backups/'))
syncer.expects(:run).with(
"rsync --archive --opt-a --opt-b " +
"'/some/directory' '#{ File.expand_path('~/home/directory') }' " +
"'#{ File.expand_path('~/my_backups') }'"
)
syncer.perform!
end
describe 'logging messages' do
it 'logs started/finished messages' do
syncer = Syncer::RSync::Local.new
Logger.expects(:info).with('Syncer::RSync::Local Started...')
Logger.expects(:info).with('Syncer::RSync::Local Finished!')
syncer.perform!
end
it 'logs messages using optional syncer_id' do
syncer = Syncer::RSync::Local.new('My Syncer')
Logger.expects(:info).with('Syncer::RSync::Local (My Syncer) Started...')
Logger.expects(:info).with('Syncer::RSync::Local (My Syncer) Finished!')
syncer.perform!
end
end
end # describe '#perform!'
describe 'deprecations' do
describe '#additional_options' do
before do
Logger.expects(:warn).with {|err|
expect( err ).to be_an_instance_of Errors::ConfigurationError
expect( err.message ).to match(
/Use #additional_rsync_options instead/
)
}
end
context 'when set directly' do
it 'warns and transfers option value' do
syncer = Syncer::RSync::Local.new do |s|
s.additional_options = ['some', 'options']
end
expect( syncer.additional_rsync_options ).to eq ['some', 'options']
end
end
context 'when set using defaults' do
after { Syncer::RSync::Local.clear_defaults! }
it 'warns and transfers option value' do
Syncer::RSync::Local.defaults do |s|
s.additional_options = ['some', 'defaults']
end
syncer = Syncer::RSync::Local.new
expect( syncer.additional_rsync_options ).to eq ['some', 'defaults']
end
end
end # describe '#additional_options'
end # describe 'deprecations'
end
end