backup-agoddard 3.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. data/.gitignore +8 -0
  2. data/.travis.yml +10 -0
  3. data/Gemfile +28 -0
  4. data/Guardfile +23 -0
  5. data/LICENSE.md +24 -0
  6. data/README.md +478 -0
  7. data/backup.gemspec +32 -0
  8. data/bin/backup +11 -0
  9. data/lib/backup.rb +133 -0
  10. data/lib/backup/archive.rb +117 -0
  11. data/lib/backup/binder.rb +22 -0
  12. data/lib/backup/cleaner.rb +121 -0
  13. data/lib/backup/cli/helpers.rb +93 -0
  14. data/lib/backup/cli/utility.rb +255 -0
  15. data/lib/backup/compressor/base.rb +35 -0
  16. data/lib/backup/compressor/bzip2.rb +50 -0
  17. data/lib/backup/compressor/custom.rb +53 -0
  18. data/lib/backup/compressor/gzip.rb +50 -0
  19. data/lib/backup/compressor/lzma.rb +52 -0
  20. data/lib/backup/compressor/pbzip2.rb +59 -0
  21. data/lib/backup/config.rb +174 -0
  22. data/lib/backup/configuration.rb +33 -0
  23. data/lib/backup/configuration/helpers.rb +130 -0
  24. data/lib/backup/configuration/store.rb +24 -0
  25. data/lib/backup/database/base.rb +53 -0
  26. data/lib/backup/database/mongodb.rb +230 -0
  27. data/lib/backup/database/mysql.rb +160 -0
  28. data/lib/backup/database/postgresql.rb +144 -0
  29. data/lib/backup/database/redis.rb +136 -0
  30. data/lib/backup/database/riak.rb +67 -0
  31. data/lib/backup/dependency.rb +108 -0
  32. data/lib/backup/encryptor/base.rb +29 -0
  33. data/lib/backup/encryptor/gpg.rb +760 -0
  34. data/lib/backup/encryptor/open_ssl.rb +72 -0
  35. data/lib/backup/errors.rb +124 -0
  36. data/lib/backup/hooks.rb +68 -0
  37. data/lib/backup/logger.rb +152 -0
  38. data/lib/backup/model.rb +409 -0
  39. data/lib/backup/notifier/base.rb +81 -0
  40. data/lib/backup/notifier/campfire.rb +155 -0
  41. data/lib/backup/notifier/hipchat.rb +93 -0
  42. data/lib/backup/notifier/mail.rb +206 -0
  43. data/lib/backup/notifier/prowl.rb +65 -0
  44. data/lib/backup/notifier/pushover.rb +88 -0
  45. data/lib/backup/notifier/twitter.rb +70 -0
  46. data/lib/backup/package.rb +47 -0
  47. data/lib/backup/packager.rb +100 -0
  48. data/lib/backup/pipeline.rb +110 -0
  49. data/lib/backup/splitter.rb +75 -0
  50. data/lib/backup/storage/base.rb +99 -0
  51. data/lib/backup/storage/cloudfiles.rb +87 -0
  52. data/lib/backup/storage/cycler.rb +117 -0
  53. data/lib/backup/storage/dropbox.rb +178 -0
  54. data/lib/backup/storage/ftp.rb +119 -0
  55. data/lib/backup/storage/local.rb +82 -0
  56. data/lib/backup/storage/ninefold.rb +116 -0
  57. data/lib/backup/storage/rsync.rb +149 -0
  58. data/lib/backup/storage/s3.rb +94 -0
  59. data/lib/backup/storage/scp.rb +99 -0
  60. data/lib/backup/storage/sftp.rb +108 -0
  61. data/lib/backup/syncer/base.rb +46 -0
  62. data/lib/backup/syncer/cloud/base.rb +247 -0
  63. data/lib/backup/syncer/cloud/cloud_files.rb +78 -0
  64. data/lib/backup/syncer/cloud/s3.rb +68 -0
  65. data/lib/backup/syncer/rsync/base.rb +49 -0
  66. data/lib/backup/syncer/rsync/local.rb +55 -0
  67. data/lib/backup/syncer/rsync/pull.rb +36 -0
  68. data/lib/backup/syncer/rsync/push.rb +116 -0
  69. data/lib/backup/template.rb +46 -0
  70. data/lib/backup/version.rb +43 -0
  71. data/spec-live/.gitignore +6 -0
  72. data/spec-live/README +7 -0
  73. data/spec-live/backups/config.rb +83 -0
  74. data/spec-live/backups/config.yml.template +46 -0
  75. data/spec-live/backups/models.rb +184 -0
  76. data/spec-live/compressor/custom_spec.rb +30 -0
  77. data/spec-live/compressor/gzip_spec.rb +30 -0
  78. data/spec-live/encryptor/gpg_keys.rb +239 -0
  79. data/spec-live/encryptor/gpg_spec.rb +287 -0
  80. data/spec-live/notifier/mail_spec.rb +121 -0
  81. data/spec-live/spec_helper.rb +151 -0
  82. data/spec-live/storage/dropbox_spec.rb +151 -0
  83. data/spec-live/storage/local_spec.rb +83 -0
  84. data/spec-live/storage/scp_spec.rb +193 -0
  85. data/spec-live/syncer/cloud/s3_spec.rb +124 -0
  86. data/spec/archive_spec.rb +335 -0
  87. data/spec/cleaner_spec.rb +312 -0
  88. data/spec/cli/helpers_spec.rb +301 -0
  89. data/spec/cli/utility_spec.rb +411 -0
  90. data/spec/compressor/base_spec.rb +52 -0
  91. data/spec/compressor/bzip2_spec.rb +217 -0
  92. data/spec/compressor/custom_spec.rb +106 -0
  93. data/spec/compressor/gzip_spec.rb +217 -0
  94. data/spec/compressor/lzma_spec.rb +123 -0
  95. data/spec/compressor/pbzip2_spec.rb +165 -0
  96. data/spec/config_spec.rb +321 -0
  97. data/spec/configuration/helpers_spec.rb +247 -0
  98. data/spec/configuration/store_spec.rb +39 -0
  99. data/spec/configuration_spec.rb +62 -0
  100. data/spec/database/base_spec.rb +63 -0
  101. data/spec/database/mongodb_spec.rb +510 -0
  102. data/spec/database/mysql_spec.rb +411 -0
  103. data/spec/database/postgresql_spec.rb +353 -0
  104. data/spec/database/redis_spec.rb +334 -0
  105. data/spec/database/riak_spec.rb +176 -0
  106. data/spec/dependency_spec.rb +51 -0
  107. data/spec/encryptor/base_spec.rb +40 -0
  108. data/spec/encryptor/gpg_spec.rb +909 -0
  109. data/spec/encryptor/open_ssl_spec.rb +148 -0
  110. data/spec/errors_spec.rb +306 -0
  111. data/spec/hooks_spec.rb +35 -0
  112. data/spec/logger_spec.rb +367 -0
  113. data/spec/model_spec.rb +694 -0
  114. data/spec/notifier/base_spec.rb +104 -0
  115. data/spec/notifier/campfire_spec.rb +217 -0
  116. data/spec/notifier/hipchat_spec.rb +211 -0
  117. data/spec/notifier/mail_spec.rb +316 -0
  118. data/spec/notifier/prowl_spec.rb +138 -0
  119. data/spec/notifier/pushover_spec.rb +123 -0
  120. data/spec/notifier/twitter_spec.rb +153 -0
  121. data/spec/package_spec.rb +61 -0
  122. data/spec/packager_spec.rb +213 -0
  123. data/spec/pipeline_spec.rb +259 -0
  124. data/spec/spec_helper.rb +60 -0
  125. data/spec/splitter_spec.rb +120 -0
  126. data/spec/storage/base_spec.rb +166 -0
  127. data/spec/storage/cloudfiles_spec.rb +254 -0
  128. data/spec/storage/cycler_spec.rb +247 -0
  129. data/spec/storage/dropbox_spec.rb +480 -0
  130. data/spec/storage/ftp_spec.rb +271 -0
  131. data/spec/storage/local_spec.rb +259 -0
  132. data/spec/storage/ninefold_spec.rb +343 -0
  133. data/spec/storage/rsync_spec.rb +362 -0
  134. data/spec/storage/s3_spec.rb +245 -0
  135. data/spec/storage/scp_spec.rb +233 -0
  136. data/spec/storage/sftp_spec.rb +244 -0
  137. data/spec/syncer/base_spec.rb +109 -0
  138. data/spec/syncer/cloud/base_spec.rb +515 -0
  139. data/spec/syncer/cloud/cloud_files_spec.rb +181 -0
  140. data/spec/syncer/cloud/s3_spec.rb +174 -0
  141. data/spec/syncer/rsync/base_spec.rb +98 -0
  142. data/spec/syncer/rsync/local_spec.rb +149 -0
  143. data/spec/syncer/rsync/pull_spec.rb +98 -0
  144. data/spec/syncer/rsync/push_spec.rb +333 -0
  145. data/spec/version_spec.rb +21 -0
  146. data/templates/cli/utility/archive +25 -0
  147. data/templates/cli/utility/compressor/bzip2 +4 -0
  148. data/templates/cli/utility/compressor/custom +11 -0
  149. data/templates/cli/utility/compressor/gzip +4 -0
  150. data/templates/cli/utility/compressor/lzma +10 -0
  151. data/templates/cli/utility/compressor/pbzip2 +10 -0
  152. data/templates/cli/utility/config +32 -0
  153. data/templates/cli/utility/database/mongodb +18 -0
  154. data/templates/cli/utility/database/mysql +21 -0
  155. data/templates/cli/utility/database/postgresql +17 -0
  156. data/templates/cli/utility/database/redis +16 -0
  157. data/templates/cli/utility/database/riak +11 -0
  158. data/templates/cli/utility/encryptor/gpg +27 -0
  159. data/templates/cli/utility/encryptor/openssl +9 -0
  160. data/templates/cli/utility/model.erb +23 -0
  161. data/templates/cli/utility/notifier/campfire +12 -0
  162. data/templates/cli/utility/notifier/hipchat +15 -0
  163. data/templates/cli/utility/notifier/mail +22 -0
  164. data/templates/cli/utility/notifier/prowl +11 -0
  165. data/templates/cli/utility/notifier/pushover +11 -0
  166. data/templates/cli/utility/notifier/twitter +13 -0
  167. data/templates/cli/utility/splitter +7 -0
  168. data/templates/cli/utility/storage/cloud_files +22 -0
  169. data/templates/cli/utility/storage/dropbox +20 -0
  170. data/templates/cli/utility/storage/ftp +12 -0
  171. data/templates/cli/utility/storage/local +7 -0
  172. data/templates/cli/utility/storage/ninefold +9 -0
  173. data/templates/cli/utility/storage/rsync +11 -0
  174. data/templates/cli/utility/storage/s3 +19 -0
  175. data/templates/cli/utility/storage/scp +11 -0
  176. data/templates/cli/utility/storage/sftp +11 -0
  177. data/templates/cli/utility/syncer/cloud_files +46 -0
  178. data/templates/cli/utility/syncer/rsync_local +12 -0
  179. data/templates/cli/utility/syncer/rsync_pull +17 -0
  180. data/templates/cli/utility/syncer/rsync_push +17 -0
  181. data/templates/cli/utility/syncer/s3 +43 -0
  182. data/templates/general/links +11 -0
  183. data/templates/general/version.erb +2 -0
  184. data/templates/notifier/mail/failure.erb +9 -0
  185. data/templates/notifier/mail/success.erb +7 -0
  186. data/templates/notifier/mail/warning.erb +9 -0
  187. data/templates/storage/dropbox/authorization_url.erb +6 -0
  188. data/templates/storage/dropbox/authorized.erb +4 -0
  189. data/templates/storage/dropbox/cache_file_written.erb +10 -0
  190. metadata +277 -0
@@ -0,0 +1,316 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path('../../spec_helper.rb', __FILE__)
4
+
5
+ describe Backup::Notifier::Mail do
6
+ let(:model) { Backup::Model.new(:test_trigger, 'test label') }
7
+ let(:notifier) do
8
+ Backup::Notifier::Mail.new(model) do |mail|
9
+ mail.delivery_method = :smtp
10
+ mail.from = 'my.sender.email@gmail.com'
11
+ mail.to = 'my.receiver.email@gmail.com'
12
+ mail.address = 'smtp.gmail.com'
13
+ mail.port = 587
14
+ mail.domain = 'your.host.name'
15
+ mail.user_name = 'user'
16
+ mail.password = 'secret'
17
+ mail.authentication = 'plain'
18
+ mail.enable_starttls_auto = true
19
+
20
+ mail.sendmail = '/path/to/sendmail'
21
+ mail.sendmail_args = '-i -t -X/tmp/traffic.log'
22
+ mail.exim = '/path/to/exim'
23
+ mail.exim_args = '-i -t -X/tmp/traffic.log'
24
+
25
+ mail.mail_folder = '/path/to/backup/mails'
26
+ end
27
+ end
28
+
29
+ it 'should be a subclass of Notifier::Base' do
30
+ Backup::Notifier::Mail.
31
+ superclass.should == Backup::Notifier::Base
32
+ end
33
+
34
+ describe '#initialize' do
35
+ after { Backup::Notifier::Mail.clear_defaults! }
36
+
37
+ it 'should load pre-configured defaults through Base' do
38
+ Backup::Notifier::Mail.any_instance.expects(:load_defaults!)
39
+ notifier
40
+ end
41
+
42
+ it 'should pass the model reference to Base' do
43
+ notifier.instance_variable_get(:@model).should == model
44
+ end
45
+
46
+ context 'when no pre-configured defaults have been set' do
47
+ it 'should use the values given' do
48
+ notifier.delivery_method.should == :smtp
49
+ notifier.from.should == 'my.sender.email@gmail.com'
50
+ notifier.to.should == 'my.receiver.email@gmail.com'
51
+ notifier.address.should == 'smtp.gmail.com'
52
+ notifier.port.should == 587
53
+ notifier.domain.should == 'your.host.name'
54
+ notifier.user_name.should == 'user'
55
+ notifier.password.should == 'secret'
56
+ notifier.authentication.should == 'plain'
57
+ notifier.enable_starttls_auto.should == true
58
+
59
+ notifier.sendmail.should == '/path/to/sendmail'
60
+ notifier.sendmail_args.should == '-i -t -X/tmp/traffic.log'
61
+ notifier.exim.should == '/path/to/exim'
62
+ notifier.exim_args.should == '-i -t -X/tmp/traffic.log'
63
+
64
+ notifier.mail_folder.should == '/path/to/backup/mails'
65
+
66
+ notifier.on_success.should == true
67
+ notifier.on_warning.should == true
68
+ notifier.on_failure.should == true
69
+ end
70
+
71
+ it 'should use default values if none are given' do
72
+ notifier = Backup::Notifier::Mail.new(model)
73
+ notifier.delivery_method.should be_nil
74
+ notifier.from.should be_nil
75
+ notifier.to.should be_nil
76
+ notifier.address.should be_nil
77
+ notifier.port.should be_nil
78
+ notifier.domain.should be_nil
79
+ notifier.user_name.should be_nil
80
+ notifier.password.should be_nil
81
+ notifier.authentication.should be_nil
82
+ notifier.enable_starttls_auto.should be_nil
83
+
84
+ notifier.sendmail.should be_nil
85
+ notifier.sendmail_args.should be_nil
86
+ notifier.exim.should be_nil
87
+ notifier.exim_args.should be_nil
88
+
89
+ notifier.mail_folder.should be_nil
90
+
91
+ notifier.on_success.should == true
92
+ notifier.on_warning.should == true
93
+ notifier.on_failure.should == true
94
+ end
95
+ end # context 'when no pre-configured defaults have been set'
96
+
97
+ context 'when pre-configured defaults have been set' do
98
+ before do
99
+ Backup::Notifier::Mail.defaults do |n|
100
+ n.delivery_method = :file
101
+ n.from = 'default.sender@domain.com'
102
+ n.to = 'some.receiver@domain.com'
103
+ n.on_success = false
104
+ end
105
+ end
106
+
107
+ it 'should use pre-configured defaults' do
108
+ notifier = Backup::Notifier::Mail.new(model)
109
+ notifier.delivery_method.should == :file
110
+ notifier.from.should == 'default.sender@domain.com'
111
+ notifier.to.should == 'some.receiver@domain.com'
112
+ notifier.address.should be_nil
113
+ notifier.port.should be_nil
114
+ notifier.domain.should be_nil
115
+ notifier.user_name.should be_nil
116
+ notifier.password.should be_nil
117
+ notifier.authentication.should be_nil
118
+ notifier.enable_starttls_auto.should be_nil
119
+
120
+ notifier.sendmail.should be_nil
121
+ notifier.sendmail_args.should be_nil
122
+ notifier.exim.should be_nil
123
+ notifier.exim_args.should be_nil
124
+
125
+ notifier.mail_folder.should be_nil
126
+
127
+ notifier.on_success.should == false
128
+ notifier.on_warning.should == true
129
+ notifier.on_failure.should == true
130
+ end
131
+
132
+ it 'should override pre-configured defaults' do
133
+ notifier = Backup::Notifier::Mail.new(model) do |n|
134
+ n.delivery_method = :sendmail
135
+ n.from = 'new.sender@domain.com'
136
+ n.to = 'new.receiver@domain.com'
137
+ n.port = 123
138
+ n.on_warning = false
139
+ end
140
+
141
+ notifier.delivery_method.should == :sendmail
142
+ notifier.from.should == 'new.sender@domain.com'
143
+ notifier.to.should == 'new.receiver@domain.com'
144
+ notifier.port.should == 123
145
+
146
+ notifier.on_success.should == false
147
+ notifier.on_warning.should == false
148
+ notifier.on_failure.should == true
149
+ end
150
+ end # context 'when pre-configured defaults have been set'
151
+ end # describe '#initialize'
152
+
153
+ describe '#notify!' do
154
+ let(:template) { mock }
155
+ let(:message) { '[Backup::%s] test label (test_trigger)' }
156
+
157
+ before do
158
+ notifier.instance_variable_set(:@template, template)
159
+ notifier.delivery_method = :test
160
+ ::Mail::TestMailer.deliveries.clear
161
+ end
162
+
163
+ context 'when status is :success' do
164
+ it 'should send a Success email with no attachments' do
165
+ template.expects(:result).
166
+ with('notifier/mail/success.erb').
167
+ returns('message body')
168
+
169
+ notifier.send(:notify!, :success)
170
+
171
+ sent_message = ::Mail::TestMailer.deliveries.first
172
+ sent_message.subject.should == message % 'Success'
173
+ sent_message.multipart?.should be_false
174
+ sent_message.body.should == 'message body'
175
+ sent_message.has_attachments?.should be_false
176
+ end
177
+ end
178
+
179
+ context 'when status is :warning' do
180
+ before do
181
+ Backup::Logger.stubs(:has_warnings?).returns(true)
182
+ Backup::Logger.stubs(:messages).returns(['line 1', 'line 2', 'line 3'])
183
+ end
184
+
185
+ it 'should send a Warning email with an attached log' do
186
+ template.expects(:result).
187
+ with('notifier/mail/warning.erb').
188
+ returns('message body')
189
+
190
+ notifier.send(:notify!, :warning)
191
+
192
+ sent_message = ::Mail::TestMailer.deliveries.first
193
+ sent_message.subject.should == message % 'Warning'
194
+ sent_message.body.multipart?.should be_true
195
+ sent_message.text_part.decoded.should == 'message body'
196
+ sent_message.attachments["#{model.time}.#{model.trigger}.log"].
197
+ read.should == "line 1\nline 2\nline 3"
198
+ end
199
+ end
200
+
201
+ context 'when status is :failure' do
202
+ before do
203
+ Backup::Logger.stubs(:messages).returns(['line 1', 'line 2', 'line 3'])
204
+ end
205
+
206
+ it 'should send a Failure email with an attached log' do
207
+ template.expects(:result).
208
+ with('notifier/mail/failure.erb').
209
+ returns('message body')
210
+
211
+ notifier.send(:notify!, :failure)
212
+
213
+ sent_message = ::Mail::TestMailer.deliveries.first
214
+ sent_message.subject.should == message % 'Failure'
215
+ sent_message.body.multipart?.should be_true
216
+ sent_message.text_part.decoded.should == 'message body'
217
+ sent_message.attachments["#{model.time}.#{model.trigger}.log"].
218
+ read.should == "line 1\nline 2\nline 3"
219
+ end
220
+ end
221
+ end # describe '#notify!'
222
+
223
+ describe '#new_email' do
224
+ context 'when no delivery_method is set' do
225
+ before { notifier.delivery_method = nil }
226
+ it 'should default to :smtp' do
227
+ email = notifier.send(:new_email)
228
+ email.should be_an_instance_of ::Mail::Message
229
+ email.delivery_method.should be_an_instance_of ::Mail::SMTP
230
+ end
231
+ end
232
+
233
+ context 'when delivery_method is :smtp' do
234
+ before { notifier.delivery_method = :smtp }
235
+
236
+ it 'should return an email using SMTP' do
237
+ email = notifier.send(:new_email)
238
+ email.delivery_method.should be_an_instance_of ::Mail::SMTP
239
+ end
240
+
241
+ it 'should set the proper options' do
242
+ email = notifier.send(:new_email)
243
+
244
+ email.to.should == ['my.receiver.email@gmail.com']
245
+ email.from.should == ['my.sender.email@gmail.com']
246
+
247
+ settings = email.delivery_method.settings
248
+ settings[:address].should == 'smtp.gmail.com'
249
+ settings[:port].should == 587
250
+ settings[:domain].should == 'your.host.name'
251
+ settings[:user_name].should == 'user'
252
+ settings[:password].should == 'secret'
253
+ settings[:authentication].should == 'plain'
254
+ settings[:enable_starttls_auto].should == true
255
+ settings[:openssl_verify_mode].should be_nil
256
+ end
257
+ end
258
+
259
+ context 'when delivery_method is :sendmail' do
260
+ before { notifier.delivery_method = :sendmail }
261
+ it 'should return an email using Sendmail' do
262
+ email = notifier.send(:new_email)
263
+ email.delivery_method.should be_an_instance_of ::Mail::Sendmail
264
+ end
265
+
266
+ it 'should set the proper options' do
267
+ email = notifier.send(:new_email)
268
+
269
+ email.to.should == ['my.receiver.email@gmail.com']
270
+ email.from.should == ['my.sender.email@gmail.com']
271
+
272
+ settings = email.delivery_method.settings
273
+ settings[:location].should == '/path/to/sendmail'
274
+ settings[:arguments].should == '-i -t -X/tmp/traffic.log'
275
+ end
276
+ end
277
+
278
+ context 'when delivery_method is :exim' do
279
+ before { notifier.delivery_method = :exim }
280
+ it 'should return an email using Exim' do
281
+ email = notifier.send(:new_email)
282
+ email.delivery_method.should be_an_instance_of ::Mail::Exim
283
+ end
284
+
285
+ it 'should set the proper options' do
286
+ email = notifier.send(:new_email)
287
+
288
+ email.to.should == ['my.receiver.email@gmail.com']
289
+ email.from.should == ['my.sender.email@gmail.com']
290
+
291
+ settings = email.delivery_method.settings
292
+ settings[:location].should == '/path/to/exim'
293
+ settings[:arguments].should == '-i -t -X/tmp/traffic.log'
294
+ end
295
+ end
296
+
297
+ context 'when delivery_method is :file' do
298
+ before { notifier.delivery_method = :file }
299
+ it 'should return an email using FileDelievery' do
300
+ email = notifier.send(:new_email)
301
+ email.delivery_method.should be_an_instance_of ::Mail::FileDelivery
302
+ end
303
+
304
+ it 'should set the proper options' do
305
+ email = notifier.send(:new_email)
306
+
307
+ email.to.should == ['my.receiver.email@gmail.com']
308
+ email.from.should == ['my.sender.email@gmail.com']
309
+
310
+ settings = email.delivery_method.settings
311
+ settings[:location].should == '/path/to/backup/mails'
312
+ end
313
+ end
314
+ end # describe '#new_email'
315
+
316
+ end
@@ -0,0 +1,138 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path('../../spec_helper.rb', __FILE__)
4
+
5
+ describe Backup::Notifier::Prowl do
6
+ let(:model) { Backup::Model.new(:test_trigger, 'test label') }
7
+ let(:notifier) do
8
+ Backup::Notifier::Prowl.new(model) do |prowl|
9
+ prowl.application = 'application'
10
+ prowl.api_key = 'api_key'
11
+ end
12
+ end
13
+
14
+ it 'should be a subclass of Notifier::Base' do
15
+ Backup::Notifier::Prowl.
16
+ superclass.should == Backup::Notifier::Base
17
+ end
18
+
19
+ describe '#initialize' do
20
+ after { Backup::Notifier::Prowl.clear_defaults! }
21
+
22
+ it 'should load pre-configured defaults through Base' do
23
+ Backup::Notifier::Prowl.any_instance.expects(:load_defaults!)
24
+ notifier
25
+ end
26
+
27
+ it 'should pass the model reference to Base' do
28
+ notifier.instance_variable_get(:@model).should == model
29
+ end
30
+
31
+ context 'when no pre-configured defaults have been set' do
32
+ it 'should use the values given' do
33
+ notifier.application.should == 'application'
34
+ notifier.api_key.should == 'api_key'
35
+
36
+ notifier.on_success.should == true
37
+ notifier.on_warning.should == true
38
+ notifier.on_failure.should == true
39
+ end
40
+
41
+ it 'should use default values if none are given' do
42
+ notifier = Backup::Notifier::Prowl.new(model)
43
+ notifier.application.should be_nil
44
+ notifier.api_key.should be_nil
45
+
46
+ notifier.on_success.should == true
47
+ notifier.on_warning.should == true
48
+ notifier.on_failure.should == true
49
+ end
50
+ end # context 'when no pre-configured defaults have been set'
51
+
52
+ context 'when pre-configured defaults have been set' do
53
+ before do
54
+ Backup::Notifier::Prowl.defaults do |n|
55
+ n.application = 'default_app'
56
+ n.api_key = 'default_api_key'
57
+
58
+ n.on_success = false
59
+ n.on_warning = false
60
+ n.on_failure = false
61
+ end
62
+ end
63
+
64
+ it 'should use pre-configured defaults' do
65
+ notifier = Backup::Notifier::Prowl.new(model)
66
+ notifier.application.should == 'default_app'
67
+ notifier.api_key.should == 'default_api_key'
68
+
69
+ notifier.on_success.should == false
70
+ notifier.on_warning.should == false
71
+ notifier.on_failure.should == false
72
+ end
73
+
74
+ it 'should override pre-configured defaults' do
75
+ notifier = Backup::Notifier::Prowl.new(model) do |n|
76
+ n.application = 'new_app'
77
+ n.api_key = 'new_api_key'
78
+
79
+ n.on_success = false
80
+ n.on_warning = true
81
+ n.on_failure = true
82
+ end
83
+
84
+ notifier.application.should == 'new_app'
85
+ notifier.api_key.should == 'new_api_key'
86
+
87
+ notifier.on_success.should == false
88
+ notifier.on_warning.should == true
89
+ notifier.on_failure.should == true
90
+ end
91
+ end # context 'when pre-configured defaults have been set'
92
+ end # describe '#initialize'
93
+
94
+ describe '#notify!' do
95
+ context 'when status is :success' do
96
+ it 'should send Success message' do
97
+ notifier.expects(:send_message).with(
98
+ '[Backup::Success]'
99
+ )
100
+ notifier.send(:notify!, :success)
101
+ end
102
+ end
103
+
104
+ context 'when status is :warning' do
105
+ it 'should send Warning message' do
106
+ notifier.expects(:send_message).with(
107
+ '[Backup::Warning]'
108
+ )
109
+ notifier.send(:notify!, :warning)
110
+ end
111
+ end
112
+
113
+ context 'when status is :failure' do
114
+ it 'should send Failure message' do
115
+ notifier.expects(:send_message).with(
116
+ '[Backup::Failure]'
117
+ )
118
+ notifier.send(:notify!, :failure)
119
+ end
120
+ end
121
+ end # describe '#notify!'
122
+
123
+ describe '#send_message' do
124
+ it 'should send the given message' do
125
+ client = mock
126
+ Prowler.expects(:new).with(
127
+ :application => 'application', :api_key => 'api_key'
128
+ ).returns(client)
129
+ client.expects(:notify).with(
130
+ 'a message',
131
+ 'test label (test_trigger)'
132
+ )
133
+
134
+ notifier.send(:send_message, 'a message')
135
+ end
136
+ end
137
+
138
+ end