morse_spec_helpers 0.0.1

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 83f985a4afeaf1e12108fdcbc43947afaa552828
4
+ data.tar.gz: 967f7652846cd8c14e9f9c94c42c7af2a16ff7c5
5
+ SHA512:
6
+ metadata.gz: dc3cc668e8c4697ec89ac2ac408ec9face29578ce250921f9af73e21a3752a77436b29ae8cf175d0710a9427bcedb6065ede9160ea22ec36b77d39878a5d396b
7
+ data.tar.gz: 38575ccc855e0c752e046e005953d584f115b84481cde29895bea2a02df052182ee26f4b301299574866e7feba7bb96fd69af460a9fe645863c43f7187b9e656
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in morse_spec_helpers.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Terry S
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # MorseSpecHelpers
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'morse_spec_helpers'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install morse_spec_helpers
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it ( https://github.com/[my-github-username]/morse_spec_helpers/fork )
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,3 @@
1
+ module MorseSpecHelpers
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,490 @@
1
+ require "morse_spec_helpers/version"
2
+
3
+ module MorseSpecHelpers
4
+
5
+ def boolean_default_false(method)
6
+ exists(method)
7
+ it "should default to false" do
8
+ new_thing=@instance.class.new
9
+ expect(new_thing.send(method)).to be_false
10
+ end
11
+ end
12
+
13
+ def boolean_default_true(method)
14
+ exists(method)
15
+ it "should default to true" do
16
+ new_thing=@instance.class.new
17
+ expect(new_thing.send(method)).to be_true
18
+ end
19
+ end
20
+
21
+ def exists(method)
22
+ context "must respond to #{method}" do
23
+ it "should respond to #{method}" do
24
+ expect(@instance).to respond_to(method)
25
+ end
26
+ end
27
+ end
28
+
29
+ def exposes(variable)
30
+ it "exposes variable #{variable}" do
31
+ expect(controller.send(variable)).to_not be_nil
32
+ end
33
+ end
34
+
35
+ def mandatory_array(method)
36
+ context "#{method}" do
37
+ exists(method)
38
+ it "should be an Array" do
39
+ expect(@instance.send(method).is_a?(Array)).to be_true
40
+ end
41
+ end
42
+ end
43
+
44
+ def mandatory_belongs_to(model)
45
+ context "#{model}" do
46
+ context "where the id is incorrect" do
47
+ before do
48
+ allow(model).to receive(:find_by_id).and_return(nil)
49
+ end
50
+ it "should be invalid" do
51
+ expect(@instance).to_not be_valid
52
+ end
53
+ end
54
+ context "where the id is correct" do
55
+ before do
56
+ allow(model).to receive(:find_by_id).and_return(true)
57
+ end
58
+ it "should be valid" do
59
+ expect(@instance).to be_valid
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ def mandatory_date(method)
66
+ context "#{method} is a mandatory date" do
67
+ it "should reject a blank #{method}" do
68
+ @instance.send("#{method}=","")
69
+ expect(@instance).not_to be_valid
70
+ end
71
+ it "should accept a normal date for #{method}" do
72
+ @instance.send("#{method}=",Date.today)
73
+ expect(@instance).to be_valid
74
+ end
75
+ mandatory_thing(method)
76
+ end
77
+ end
78
+
79
+ def mandatory_datetime(method,time=nil)
80
+ context "#{method} is a mandatory datetime" do
81
+ it "should reject a blank #{method}" do
82
+ @instance.send("#{method}=","")
83
+ expect(@instance).not_to be_valid
84
+ end
85
+ it "should accept a normal datetime for #{method}" do
86
+ @instance.send("#{method}=",time||Time.now)
87
+ expect(@instance).to be_valid
88
+ end
89
+ mandatory_thing(method)
90
+ end
91
+ end
92
+
93
+ def mandatory_relation(method)
94
+ context "#{method}" do
95
+ exists(method)
96
+ it "should be an ActiveRecord::Relation" do
97
+ expect(@instance.send(method).is_a?(ActiveRecord::Relation)).to be_true
98
+ end
99
+ end
100
+ end
101
+
102
+ def mandatory_string(method)
103
+ context "#{method} is a mandatory string" do
104
+ it "should reject a blank #{method}" do
105
+ @instance.send("#{method}=","")
106
+ expect(@instance).not_to be_valid
107
+ end
108
+ it "should accept a normal string for #{method}" do
109
+ @instance.send("#{method}=","test")
110
+ expect(@instance).to be_valid
111
+ end
112
+ mandatory_thing(method)
113
+ end
114
+ end
115
+
116
+ def mandatory_string_from_collection(method,collection)
117
+ context "#{method} is a mandatory string" do
118
+ exists(method)
119
+ it "should reject a blank #{method}" do
120
+ @instance.send("#{method}=","")
121
+ expect(@instance).not_to be_valid
122
+ end
123
+ context "where the value is not within the acceptable options" do
124
+ it "should reject it" do
125
+ @instance.send("#{method}=","zgodnflax")
126
+ expect(@instance).to_not be_valid
127
+ end
128
+ end
129
+ context "where the value is within the acceptable options" do
130
+ it "should accept it" do
131
+ @instance.send("#{method}=",collection.first)
132
+ expect(@instance).to be_valid
133
+ end
134
+ end
135
+ end
136
+ end
137
+
138
+ def mandatory_string_with_default(method,default)
139
+ context "#{method} is a mandatory string which defaults to #{default}" do
140
+ it "should set a blank string to #{default}" do
141
+ @instance.send("#{method}=",nil)
142
+ expect(@instance).to be_valid
143
+ expect(@instance.send(method)).to eq(default)
144
+ end
145
+ end
146
+ end
147
+
148
+ def mandatory_thing(method)
149
+ context "#{method} is mandatory" do
150
+ exists(method)
151
+ it "should reject a nil #{method}" do
152
+ @instance.send("#{method}=","")
153
+ expect(@instance).not_to be_valid
154
+ end
155
+ end
156
+ end
157
+
158
+ def mandatory_time(method,time=nil)
159
+ context "#{method} is a mandatory time" do
160
+ it "should reject a blank #{method}" do
161
+ @instance.send("#{method}=","")
162
+ expect(@instance).not_to be_valid
163
+ end
164
+ it "should accept a normal time for #{method}" do
165
+ @instance.send("#{method}=",time||Time.now)
166
+ expect(@instance).to be_valid
167
+ end
168
+ mandatory_thing(method)
169
+ end
170
+ end
171
+
172
+ def one_date_not_after_the_other(first,second)
173
+ context "for dates, where both #{first} and #{second} exist" do
174
+ before do
175
+ @first=Date.today-1.week
176
+ @second=Date.today+1.week
177
+ end
178
+ context "where #{first} is before #{second}" do
179
+ before do
180
+ @instance.send("#{first}=",@first)
181
+ @instance.send("#{second}=",@second)
182
+ end
183
+ it "should be valid" do
184
+ expect(@instance).to be_valid
185
+ end
186
+ end
187
+ context "where #{first} is the same as #{second}" do
188
+ before do
189
+ @instance.send("#{first}=",@first)
190
+ @instance.send("#{second}=",@first)
191
+ end
192
+ it "should be valid" do
193
+ expect(@instance).to be_valid
194
+ end
195
+ end
196
+ context "where #{first} is after #{second}" do
197
+ before do
198
+ @instance.send("#{first}=",@second)
199
+ @instance.send("#{second}=",@first)
200
+ end
201
+ it "should not be valid" do
202
+ expect(@instance).to_not be_valid
203
+ end
204
+ end
205
+ end
206
+ end
207
+
208
+ def one_datetime_not_after_the_other(first,second)
209
+ context "for datetimes, where both #{first} and #{second} exist" do
210
+ before do
211
+ t=Time.now
212
+ @first=t-1.week
213
+ @second=t+1.week
214
+ end
215
+ one_thing_not_after_the_other(first,second)
216
+ end
217
+ end
218
+
219
+ def one_thing_not_after_the_other(first,second)
220
+ context "where #{first} is before #{second}" do
221
+ before do
222
+ @instance.send("#{first}=",@first)
223
+ @instance.send("#{second}=",@second)
224
+ end
225
+ it "should be valid" do
226
+ expect(@instance).to be_valid
227
+ end
228
+ end
229
+ context "where #{first} is the same as #{second}" do
230
+ before do
231
+ @instance.send("#{first}=",@first)
232
+ @instance.send("#{second}=",@first)
233
+ end
234
+ it "should be valid" do
235
+ expect(@instance).to be_valid
236
+ end
237
+ end
238
+ context "where #{first} is after #{second}" do
239
+ before do
240
+ @instance.send("#{first}=",@second)
241
+ @instance.send("#{second}=",@first)
242
+ end
243
+ it "should not be valid" do
244
+ expect(@instance).to_not be_valid
245
+ end
246
+ end
247
+ end
248
+
249
+ def optional_belongs_to(model)
250
+ context "#{model}" do
251
+ let(:model_id){"#{model.to_s.underscore}_id"}
252
+ context "where the id is incorrect" do
253
+ before do
254
+ allow(model).to receive(:find_by_id).and_return(nil)
255
+ end
256
+ it "should set the id to nil" do
257
+ @instance.valid?
258
+ expect(@instance.send(model_id)).to be_nil
259
+ end
260
+ it "should be valid" do
261
+ expect(@instance).to be_valid
262
+ end
263
+ end
264
+ context "where the id is correct" do
265
+ before do
266
+ allow(model).to receive(:where).and_return(model.where("id is not null").first)
267
+ end
268
+ it "should be valid" do
269
+ expect(@instance).to be_valid
270
+ end
271
+ end
272
+ end
273
+ end
274
+
275
+ def optional_date(method)
276
+ context "#{method} is an optional date" do
277
+ exists(method)
278
+ it "should make a blank #{method} nil" do
279
+ @instance.send("#{method}=","")
280
+ expect(@instance).to be_valid
281
+ expect(@instance.send(method)).to be_nil
282
+ end
283
+ it "should accept a normal date for #{method}" do
284
+ @instance.send("#{method}=",Date.today)
285
+ expect(@instance).to be_valid
286
+ end
287
+ end
288
+ end
289
+
290
+ def optional_datetime(method)
291
+ context "#{method} is an optional datetime" do
292
+ exists(method)
293
+ it "should make a blank #{method} nil" do
294
+ @instance.send("#{method}=","")
295
+ expect(@instance).to be_valid
296
+ expect(@instance.send(method)).to be_nil
297
+ end
298
+ it "should accept a normal datetime for #{method}" do
299
+ @instance.send("#{method}=",Time.now)
300
+ expect(@instance).to be_valid
301
+ end
302
+ end
303
+ end
304
+
305
+ def optional_float(method)
306
+ context "#{method} is an optional float" do
307
+ exists(method)
308
+ it "should make a blank #{method} nil" do
309
+ @instance.send("#{method}=","")
310
+ expect(@instance).to be_valid
311
+ expect(@instance.send(method)).to be_nil
312
+ end
313
+ it "should accept a normal float for #{method}" do
314
+ @instance.send("#{method}=",1.0)
315
+ expect(@instance).to be_valid
316
+ end
317
+ end
318
+ end
319
+
320
+ def optional_time(method)
321
+ context "#{method} is an optional time" do
322
+ exists(method)
323
+ it "should make a blank #{method} nil" do
324
+ @instance.send("#{method}=","")
325
+ expect(@instance).to be_valid
326
+ expect(@instance.send(method)).to be_nil
327
+ end
328
+ it "should accept a normal time for #{method}" do
329
+ @instance.send("#{method}=",Time.now)
330
+ expect(@instance).to be_valid
331
+ end
332
+ end
333
+ end
334
+
335
+ def optional_string(method)
336
+ context "#{method} is an optional string" do
337
+ exists(method)
338
+ it "should make a blank #{method} nil" do
339
+ @instance.send("#{method}=","")
340
+ expect(@instance).to be_valid
341
+ expect(@instance.send(method)).to be_nil
342
+ end
343
+ it "should accept a normal string for #{method}" do
344
+ @instance.send("#{method}=","test")
345
+ expect(@instance).to be_valid
346
+ end
347
+ end
348
+ end
349
+
350
+ def optional_string_from_collection(method,collection)
351
+ context "#{method} is an optional string" do
352
+ exists(method)
353
+ it "should make a blank #{method} nil" do
354
+ @instance.send("#{method}=","")
355
+ expect(@instance).to be_valid
356
+ expect(@instance.send(method)).to be_nil
357
+ end
358
+ context "where the value is not within the acceptable options" do
359
+ it "should not accept it" do
360
+ @instance.send("#{method}=","zgodnflax")
361
+ expect(@instance).to_not be_valid
362
+ end
363
+ end
364
+ context "where the value is within the acceptable options" do
365
+ it "should accept it" do
366
+ @instance.send("#{method}=",collection.first)
367
+ expect(@instance).to be_valid
368
+ end
369
+ end
370
+ end
371
+ end
372
+
373
+ def processes_attachment_to_attribute(method)
374
+ describe "#{method} processing" do
375
+ describe "accessors" do
376
+ %w{attachment attachment_title attachment_alt attachment_remove}.each do |suffix|
377
+ it "should respond to #{method}_#{suffix}" do
378
+ expect(@instance).to respond_to("#{method}_#{suffix}")
379
+ end
380
+ end
381
+ describe "processing" do
382
+ describe "where all is good" do
383
+ it "should process the #{method} attachment properly" do
384
+ @instance.send("#{method}=",nil)
385
+ @instance.valid?
386
+ expect(@instance.send(method)).to be_nil
387
+ @instance.send("#{method}_attachment=",fixture_file_upload("../support/images/placeholder.png", 'image/png'))
388
+ @instance.send("#{method}_attachment_title=","test")
389
+ @instance.valid?
390
+ expect(@instance.send(method)).to_not be_nil
391
+ end
392
+ end
393
+ describe "where the #{method} attachment has errors" do
394
+ it "should be invalid and add attachment errors to #{method} attachment" do
395
+ @instance.send("#{method}=",nil)
396
+ @instance.valid?
397
+ expect(@instance.send(method)).to be_nil
398
+ @instance.send("#{method}_attachment_title=",nil)
399
+ @instance.send("#{method}_attachment=",fixture_file_upload("../support/images/placeholder.png", 'image/png'))
400
+ expect(@instance.valid?).to_not be_true
401
+ expect(@instance.errors[method]).to_not be_empty
402
+ expect(@instance.send(method)).to be_nil
403
+ end
404
+ end
405
+ end
406
+ end
407
+ end
408
+ end
409
+
410
+ def processes_multiple_attachments_to_attribute(method)
411
+ describe "#{method} processing" do
412
+ it "should respond to #{method}" do
413
+ expect(@instance.respond_to?(method)).to be_true
414
+ end
415
+ describe "accessors" do
416
+ %w{attachment attachment_title attachment_alt attachment_remove}.each do |suffix|
417
+ it "should respond to #{method.to_s.singularize}_#{suffix}" do
418
+ expect(@instance).to respond_to("#{method.to_s.singularize}_#{suffix}")
419
+ end
420
+ end
421
+ describe "processing" do
422
+ describe "where all is good" do
423
+ it "should process the #{method} attachment properly" do
424
+ @instance.send("#{method}=",[])
425
+ @instance.valid?
426
+ expect(@instance.send(method)).to be_empty
427
+ @instance.send("#{method.to_s.singularize}_attachment=",fixture_file_upload("../support/images/placeholder.png", 'image/png'))
428
+ @instance.send("#{method.to_s.singularize}_attachment_alt=","test")
429
+ @instance.valid?
430
+ expect(@instance.send(method)).to_not be_empty
431
+ end
432
+ end
433
+ describe "where the #{method} attachment has errors" do
434
+ it "should be invalid and add attachment errors to #{method} attachment" do
435
+ @instance.send("#{method}=",[])
436
+ @instance.valid?
437
+ expect(@instance.send(method)).to be_empty
438
+ @instance.send("#{method.to_s.singularize}_attachment_alt=",nil)
439
+ @instance.send("#{method.to_s.singularize}_attachment=",fixture_file_upload("../support/images/placeholder.png", 'image/png'))
440
+ expect(@instance.valid?).to_not be_true
441
+ expect(@instance.errors[method]).to_not be_empty
442
+ expect(@instance.send(method)).to be_empty
443
+ end
444
+ end
445
+ end
446
+ end
447
+ end
448
+ end
449
+
450
+ def redirects_to(path)
451
+ it "should redirect to #{path}" do
452
+ expect(response).to redirect_to(path)
453
+ end
454
+ end
455
+
456
+ def returns_200
457
+ it "returns http success" do
458
+ expect(response).to be_success
459
+ end
460
+ end
461
+
462
+ def sets_flash(method)
463
+ it "should set flash #{method}" do
464
+ expect(flash[method]).to_not be_nil
465
+ end
466
+ end
467
+
468
+ def sets_flash_alert
469
+ sets_flash(:alert)
470
+ end
471
+
472
+ def sets_flash_error
473
+ sets_flash(:error)
474
+ end
475
+
476
+ def sets_flash_notice
477
+ sets_flash(:notice)
478
+ end
479
+
480
+ def should_be_valid
481
+ it "should be valid" do
482
+ expect(@instance).to be_valid
483
+ end
484
+ end
485
+ def should_not_be_valid
486
+ it "should not be valid" do
487
+ expect(@instance).to_not be_valid
488
+ end
489
+ end
490
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'morse_spec_helpers/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "morse_spec_helpers"
8
+ spec.version = MorseSpecHelpers::VERSION
9
+ spec.authors = ["Terry S"]
10
+ spec.email = ["itsterry@gmail.com"]
11
+ spec.summary = %q{A series of helpers to make the rspec experience nicer.}
12
+ spec.description = %q{}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rake"
23
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: morse_spec_helpers
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Terry S
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: ''
42
+ email:
43
+ - itsterry@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitignore"
49
+ - Gemfile
50
+ - LICENSE.txt
51
+ - README.md
52
+ - Rakefile
53
+ - lib/morse_spec_helpers.rb
54
+ - lib/morse_spec_helpers/version.rb
55
+ - morse_spec_helpers.gemspec
56
+ homepage: ''
57
+ licenses:
58
+ - MIT
59
+ metadata: {}
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubyforge_project:
76
+ rubygems_version: 2.2.2
77
+ signing_key:
78
+ specification_version: 4
79
+ summary: A series of helpers to make the rspec experience nicer.
80
+ test_files: []