flickrmocks 0.8.15 → 0.9.0

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 (53) hide show
  1. data/.gitignore +3 -0
  2. data/Gemfile.lock +123 -0
  3. data/README.rdoc +104 -30
  4. data/Rakefile +12 -0
  5. data/flickrmocks.gemspec +3 -1
  6. data/lib/flickr_mocks/api/api.rb +80 -27
  7. data/lib/flickr_mocks/api/flickr.rb +69 -23
  8. data/lib/flickr_mocks/api/helpers.rb +25 -12
  9. data/lib/flickr_mocks/api/options.rb +71 -53
  10. data/lib/flickr_mocks/api/sanitize.rb +129 -20
  11. data/lib/flickr_mocks/fixtures.rb +7 -1
  12. data/lib/flickr_mocks/flickraw/custom_clone.rb +3 -1
  13. data/lib/flickr_mocks/flickraw/custom_compare.rb +4 -0
  14. data/lib/flickr_mocks/flickraw/custom_marshal.rb +7 -2
  15. data/lib/flickr_mocks/flickraw/flickraw.rb +6 -0
  16. data/lib/flickr_mocks/helpers.rb +8 -1
  17. data/lib/flickr_mocks/models/commons_institution.rb +45 -34
  18. data/lib/flickr_mocks/models/commons_institutions.rb +85 -75
  19. data/lib/flickr_mocks/models/helpers.rb +13 -6
  20. data/lib/flickr_mocks/models/models.rb +7 -0
  21. data/lib/flickr_mocks/models/photo.rb +76 -75
  22. data/lib/flickr_mocks/models/photo_details.rb +71 -69
  23. data/lib/flickr_mocks/models/photo_dimensions.rb +80 -78
  24. data/lib/flickr_mocks/models/photo_search.rb +115 -88
  25. data/lib/flickr_mocks/models/photo_size.rb +57 -56
  26. data/lib/flickr_mocks/models/photo_sizes.rb +68 -67
  27. data/lib/flickr_mocks/models/photos.rb +104 -99
  28. data/lib/flickr_mocks/stubs.rb +151 -14
  29. data/lib/flickr_mocks/version.rb +7 -1
  30. data/spec/api/api_spec.rb +26 -8
  31. data/spec/api/flickr_spec.rb +19 -19
  32. data/spec/api/helper_spec.rb +20 -20
  33. data/spec/api/options_spec.rb +170 -124
  34. data/spec/api/sanitize_spec.rb +174 -59
  35. data/spec/base/stubs_spec.rb +37 -74
  36. data/spec/base/version_spec.rb +11 -4
  37. data/spec/models/commons_institution_spec.rb +3 -2
  38. data/spec/models/commons_institutions_spec.rb +34 -5
  39. data/spec/models/helpers_spec.rb +7 -6
  40. data/spec/models/photo_details_spec.rb +12 -11
  41. data/spec/models/photo_dimensions_spec.rb +5 -4
  42. data/spec/models/photo_search_spec.rb +50 -8
  43. data/spec/models/photo_size_spec.rb +4 -3
  44. data/spec/models/photo_sizes_spec.rb +6 -5
  45. data/spec/models/photo_spec.rb +6 -4
  46. data/spec/models/photos_spec.rb +9 -7
  47. data/spec/shared_examples/hash_options/date_hash_option.rb +42 -0
  48. data/spec/shared_examples/hash_options/page_hash_option.rb +23 -0
  49. data/spec/shared_examples/hash_options/perpage_hash_option.rb +43 -0
  50. data/spec/shared_examples/hash_options/tag_mode_hash_option.rb +31 -0
  51. data/spec/shared_examples/stub_helpers.rb +140 -0
  52. data/spec/spec_helper.rb +5 -5
  53. metadata +55 -16
@@ -1,8 +1,9 @@
1
- require 'spec_helper'
1
+ require 'spec_helper'
2
2
 
3
- describe APP::PhotoSearch do
3
+ describe APP::Models::PhotoSearch do
4
4
  let(:api) {APP::Api}
5
- let(:klass) {APP::PhotoSearch}
5
+ let(:models){APP::Models}
6
+ let(:klass) {models::PhotoSearch}
6
7
  let(:fixtures){APP::Fixtures.instance}
7
8
  let(:options) {{:search_terms => 'iran', :page => '20', :date => '2010-10-03'}}
8
9
 
@@ -29,8 +30,8 @@ describe APP::PhotoSearch do
29
30
  it "returns object of proper class when photos responselist object specified" do
30
31
  klass.new(fixtures.photos, options).class.should == klass
31
32
  end
32
- it "returns object of proper class when APP::Photos object is provided" do
33
- klass.new(APP::Photos.new(fixtures.photos),options).class.should == klass
33
+ it "returns object of proper class when Photos object is provided" do
34
+ klass.new(models::Photos.new(fixtures.photos),options).class.should == klass
34
35
  end
35
36
  it "raises an error when an array is provided" do
36
37
  expect {
@@ -72,6 +73,47 @@ describe APP::PhotoSearch do
72
73
  end
73
74
 
74
75
  context "instance methods" do
76
+ specify {subject.should respond_to(:extract_date)}
77
+ context "#extract_date" do
78
+ it "returns nil when :date is nil in option" do
79
+ subject.extract_date(:date => nil).should be_nil
80
+ end
81
+ it "returns supplied date when proper date is supplied as string" do
82
+ subject.extract_date(:date => '2010-10-10').should == '2010-10-10'
83
+ end
84
+ it "raises error when supplied date is an array" do
85
+ expect {
86
+ subject.extract_date(:date => [])
87
+ }.to raise_error(ArgumentError)
88
+ end
89
+ it "raises an error when supplied date is ambiguous" do
90
+ expect{
91
+ subject.extract_date(:date => '2010')
92
+ }.to raise_error(ArgumentError)
93
+ end
94
+ end
95
+
96
+ specify {subject.should respond_to(:extract_search_terms)}
97
+ context "#extract_search_terms" do
98
+ it "returns lower-cased and stripped version of :serch_terms" do
99
+ subject.extract_search_terms(:search_terms => 'Iran , Shiraz Hello, goodbye').should ==
100
+ 'iran,shiraz hello,goodbye'
101
+ end
102
+ it "returns nil when :search_terms is nil" do
103
+ subject.extract_search_terms(:search_terms => nil).should be_nil
104
+ end
105
+ it "returns nil when :saerch_terms is not specified" do
106
+ subject.extract_search_terms({}).should be_nil
107
+ end
108
+ end
109
+
110
+ specify {subject.should respond_to(:extract_page)}
111
+ context "#extract_page" do
112
+ let(:method){:extract_page}
113
+ let(:options){{}}
114
+ it_behaves_like "page hash option"
115
+ end
116
+
75
117
  specify {subject.should respond_to(:search_terms)}
76
118
  context "#search_terms" do
77
119
  let(:search_terms){'shiraz,iran'}
@@ -143,7 +185,7 @@ describe APP::PhotoSearch do
143
185
  end
144
186
  it "returns yesterday for date when no options are specified" do
145
187
  options = {:date => nil, :search_terms => nil}
146
- klass.new(fixtures.photos,options).url_params.should == {:date => APP::Api.time}
188
+ klass.new(fixtures.photos,options).url_params.should == {:date => api::Helpers.date}
147
189
  end
148
190
  it "returns date when valid date and no search terms is provided" do
149
191
  options = {:date => '2010-01-01', :search_terms => nil}
@@ -234,8 +276,8 @@ describe APP::PhotoSearch do
234
276
  specify {subject.should respond_to(:delegated_instance_methods)}
235
277
  context "#delegated_instance_methods" do
236
278
  it "returns array accessor methods as well as other methods delegated to photos" do
237
- subject.delegated_instance_methods.sort.should == (FlickrMocks::PhotoSearch.delegated_instance_methods +
238
- FlickrMocks::Models::Helpers.array_accessor_methods).sort
279
+ subject.delegated_instance_methods.sort.should == (models::PhotoSearch.delegated_instance_methods +
280
+ models::Helpers.array_accessor_methods).sort
239
281
  end
240
282
  end
241
283
  end
@@ -1,7 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe APP::PhotoSize do
4
- let(:klass){APP::PhotoSize}
3
+ describe APP::Models::PhotoSize do
4
+ let(:models){APP::Models}
5
+ let(:klass){models::PhotoSize}
5
6
  let(:fixtures){APP::Fixtures.instance}
6
7
  let(:size_fixture){fixtures.photo_size}
7
8
 
@@ -10,7 +11,7 @@ describe APP::PhotoSize do
10
11
  context "#initialize" do
11
12
  context "size fixture" do
12
13
  it "returns object of proper class" do
13
- subject.should be_a(APP::PhotoSize)
14
+ subject.should be_a(models::PhotoSize)
14
15
  end
15
16
  end
16
17
  context "FlickRaw::ResponseList object" do
@@ -1,15 +1,16 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe APP::PhotoSizes do
4
- let(:klass){APP::PhotoSizes}
3
+ describe APP::Models::PhotoSizes do
4
+ let(:models){APP::Models}
5
+ let(:klass){models::PhotoSizes}
5
6
  let(:fixtures){APP::Fixtures.instance}
6
7
 
7
- subject {APP::PhotoSizes.new fixtures.photo_sizes}
8
+ subject {models::PhotoSizes.new fixtures.photo_sizes}
8
9
 
9
10
  context "initialize" do
10
11
  context "with FlickRaw::ResponseList" do
11
12
  it "returns object of proper class" do
12
- klass.new(fixtures.photo_sizes).should be_a(APP::PhotoSizes)
13
+ klass.new(fixtures.photo_sizes).should be_a(models::PhotoSizes)
13
14
  end
14
15
  end
15
16
  context "with FlickRaw::Response" do
@@ -123,7 +124,7 @@ describe APP::PhotoSizes do
123
124
  context "#delegated_instance_methods" do
124
125
  it "returns array accessor methods + size methods" do
125
126
  subject.delegated_instance_methods.sort.should == (subject.possible_sizes +
126
- APP::Models::Helpers.array_accessor_methods).sort
127
+ models::Helpers.array_accessor_methods).sort
127
128
  end
128
129
  end
129
130
 
@@ -1,24 +1,26 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe APP::Photo do
4
- let(:klass){APP::Photo}
3
+ describe APP::Models::Photo do
4
+ let(:models){APP::Models}
5
+ let(:klass){models::Photo}
5
6
  let(:fixtures){APP::Fixtures.instance}
6
7
  let(:basic_photo){klass.new fixtures.photo}
7
8
  let(:extended_photo){klass.new fixtures.photo_details}
8
9
 
10
+
9
11
  subject {basic_photo}
10
12
 
11
13
  context "initialize" do
12
14
  context "with extended photo" do
13
15
  it "returns object of proper class" do
14
- klass.new(fixtures.photo_details).should be_a(APP::Photo)
16
+ klass.new(fixtures.photo_details).should be_a(models::Photo)
15
17
  end
16
18
  end
17
19
 
18
20
  context "with basic photo" do
19
21
  subject {klass.new fixtures.photo}
20
22
  it "returns object of proper class" do
21
- klass.new(fixtures.photo).should be_a(APP::Photo)
23
+ klass.new(fixtures.photo).should be_a(models::Photo)
22
24
  end
23
25
  end
24
26
  context "with nil" do
@@ -1,14 +1,16 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe APP::Photos do
3
+ describe APP::Models::Photos do
4
4
  let(:api) {APP::Api}
5
- let(:klass) {APP::Photos}
5
+ let(:models){APP::Models}
6
+ let(:klass) {models::Photos}
6
7
  let(:fixtures){APP::Fixtures.instance}
7
8
  let(:photos_fixture) {fixtures.photos}
8
9
  let(:interesting_photos_fixture){fixtures.interesting_photos}
9
10
 
11
+
10
12
  subject {klass.new photos_fixture}
11
- let(:max_pages){subject.default(:max_entries)/subject.default(:per_page)}
13
+ let(:max_pages){subject.max_entries/subject.per_page}
12
14
 
13
15
  context "class methods" do
14
16
  specify { klass.should respond_to(:defaults)}
@@ -39,8 +41,8 @@ describe APP::Photos do
39
41
  specify { klass.defaults.should have_key(:max_entries) }
40
42
  specify { klass.defaults.should have_key(:per_page) }
41
43
 
42
- it "returns 50 for argument :per_page" do
43
- klass.defaults[:per_page].should == 50
44
+ it "returns 200 for argument :per_page" do
45
+ klass.defaults[:per_page].should == FlickrMocks::Api.default(:per_page).to_i
44
46
  end
45
47
  it "returns 4000 for argument :max_entries" do
46
48
  klass.defaults[:max_entries].should == 4000
@@ -181,7 +183,7 @@ describe APP::Photos do
181
183
  end
182
184
  it "returns Array containing elements of class FlickrMocks::Photo " do
183
185
  subject.photos.each do |photo|
184
- photo.should be_instance_of(APP::Photo)
186
+ photo.should be_instance_of(models::Photo)
185
187
  end
186
188
  end
187
189
  it "returns expected number of photos" do
@@ -261,7 +263,7 @@ describe APP::Photos do
261
263
  specify{ subject.should respond_to(:delegated_instance_methods)}
262
264
  context "#delegated_instance_methods" do
263
265
  it "returns expected list of methods that are delegated to other objects" do
264
- subject.delegated_instance_methods.should == APP::Models::Helpers.array_accessor_methods
266
+ subject.delegated_instance_methods.should == models::Helpers.array_accessor_methods
265
267
  end
266
268
  end
267
269
 
@@ -0,0 +1,42 @@
1
+ shared_examples_for "date hash option" do
2
+ def expected?
3
+ begin
4
+ expected
5
+ true
6
+ rescue
7
+ false
8
+ end
9
+ end
10
+ let(:default_date){FlickrMocks::Api::Helpers.date}
11
+
12
+ def self.date(params=nil)
13
+ case params
14
+ when String then Api::Helpers.date(params)
15
+ when Time then params.strftime('%Y-%m-%d')
16
+ else Api::Helpers.date('yesterday')
17
+ end
18
+ end
19
+
20
+ it "returns date when proper date string supplied" do
21
+ subject.send(method,options.clone.merge(:date => '2010-10-10')).should ==
22
+ (expected? ? expected.clone.merge(:date => '2010-10-10') : '2010-10-10')
23
+ end
24
+ it "returns default date when :date is nil" do
25
+ subject.send(method,options.clone.merge(:date => nil)).should ==
26
+ (expected? ? expected.clone.merge(:date => default_date) : default_date)
27
+ end
28
+ it "returns default date when :date is not set" do
29
+ subject.send(method,options.clone.merge({})).should ==
30
+ (expected? ? expected.clone.merge(:date => default_date) : default_date)
31
+ end
32
+ it "returns default date when Time object provided" do
33
+ time ='2010-01-01'
34
+ subject.send(method,options.clone.merge(:date=>Time.new(time))).should ==
35
+ (expected? ? expected.clone.merge(:date => time) : time)
36
+ end
37
+ it "returns yesterday when Array object provided" do
38
+ subject.send(method,options.clone.merge(:date => [])).should ==
39
+ (expected? ? expected.clone.merge(:date => default_date) : default_date)
40
+ end
41
+
42
+ end
@@ -0,0 +1,23 @@
1
+ shared_examples_for "page hash option" do
2
+ let(:default_page){FlickrMocks::Api.default(:page)}
3
+ def expected?
4
+ begin
5
+ expected
6
+ true
7
+ rescue
8
+ false
9
+ end
10
+ end
11
+ it "returns supplied page when valid page is provided" do
12
+ subject.send(method,options.clone.merge(:page => '4')).should ==
13
+ (expected? ? expected.clone.merge(:page => '4') : '4')
14
+ end
15
+ it "returns default page when 0 provided" do
16
+ subject.send(method,options.clone.merge(:page => '0')).should ==
17
+ (expected? ? expected.clone.merge(:page => default_page) : default_page)
18
+ end
19
+ it "returns default page when negative page provided" do
20
+ subject.send(method,options.clone.merge(:page => '-1')).should ==
21
+ (expected? ? expected.clone.merge(:page => default_page) : default_page)
22
+ end
23
+ end
@@ -0,0 +1,43 @@
1
+ shared_examples_for "per page hash option" do
2
+ let(:default_per_page){FlickrMocks::Api.default(:per_page)}
3
+ def expected?
4
+ begin
5
+ expected
6
+ true
7
+ rescue
8
+ false
9
+ end
10
+ end
11
+ it "returns supplied per_page when valid per page is provided" do
12
+ subject.send(method,options.clone.merge(:per_page => '400')).should ==
13
+ (expected? ? expected.clone.merge(:per_page => '400') : '400')
14
+ end
15
+ it "returns supplied perpage when valid value is provided" do
16
+ subject.send(method,options.clone.merge({:perpage => '400'})).should ==
17
+ (expected? ? expected.clone.merge(:per_page => '400') : '400')
18
+ end
19
+ it "should give preference to supplied per_page value over :perpage" do
20
+ subject.send(method,options.clone.merge({:per_page => '500', :perpage => '444'})).should ==
21
+ (expected? ? expected.clone.merge(:per_page => '500') : '500')
22
+ end
23
+ it "returns default :per_page when supplied value is 0" do
24
+ subject.send(method,options.clone.merge({:per_page => '0'})).should ==
25
+ (expected? ? expected.clone.merge(:per_page => default_per_page) : default_per_page)
26
+ end
27
+ it "returns default :per_page when supplied value is negative" do
28
+ subject.send(method,options.clone.merge({:per_page => '-1'})).should ==
29
+ (expected? ? expected.clone.merge(:per_page => default_per_page) : default_per_page)
30
+ end
31
+ it "returns default :per_page when supplied :perpage is 0" do
32
+ subject.send(method,options.clone.merge({:perpage => '0'})).should ==
33
+ (expected? ? expected.clone.merge(:per_page => default_per_page) : default_per_page)
34
+ end
35
+ it "returns default :per_page when supplied :perpage is negative" do
36
+ subject.send(method,options.clone.merge({:perpage=>'-1'})).should ==
37
+ (expected? ? expected.clone.merge(:per_page => default_per_page) :default_per_page)
38
+ end
39
+ it "returns default :per_page when invalid :per_page and valid :perpage provided" do
40
+ subject.send(method,options.clone.merge({:per_page => '-1', :perpage => '300'})).should ==
41
+ (expected? ? expected.clone.merge(:per_page => default_per_page) : default_per_page)
42
+ end
43
+ end
@@ -0,0 +1,31 @@
1
+ shared_examples_for "tag mode hash option" do
2
+ let(:default_tag_mode){FlickrMocks::Api.default(:tag_mode)}
3
+ def expected?
4
+ begin
5
+ expected
6
+ true
7
+ rescue
8
+ false
9
+ end
10
+ end
11
+ it "returns supplied value when :tag_mode is all" do
12
+ subject.send(method,options.clone.merge({:tag_mode=>'all'})).should ==
13
+ (expected? ? expected.clone.merge({:tag_mode => 'all'}) : 'all')
14
+ end
15
+ it "returns supplied value when :tag_mode is any" do
16
+ subject.send(method,options.clone.merge({:tag_mode=>'any'})).should ==
17
+ (expected? ? expected.clone.merge({:tag_mode => 'any'}) : 'any')
18
+ end
19
+ it "returns default tag_mode when tag_mode is not specified" do
20
+ subject.send(method,options.clone.merge({})).should ==
21
+ (expected? ? expected.clone.merge({:tag_mode => default_tag_mode}) : default_tag_mode)
22
+ end
23
+ it "returns default tag_mode when tag_mode is nil" do
24
+ subject.send(method,options.clone.merge({:tag_mode => nil})).should ==
25
+ (expected? ? expected.clone.merge({:tag_mode => default_tag_mode}) : default_tag_mode)
26
+ end
27
+ it "should give default tag_mode when junk given for tag_mode" do
28
+ subject.send(method,options.clone.merge(:tag_mode => 'junk')).should ==
29
+ (expected? ? expected.clone.merge({:tag_mode => default_tag_mode}) : default_tag_mode)
30
+ end
31
+ end
@@ -0,0 +1,140 @@
1
+
2
+ shared_examples_for "stub for Api.photo" do
3
+ it "returns Photo object populated with fixtures.photo_details when valid id provided" do
4
+ APP::Api.photo(:photo_id => 'detail').should == APP::Models::Photo.new(fixtures.photo_details)
5
+ end
6
+
7
+ context "error conditions" do
8
+ let(:subject){api}
9
+ let(:method){:photo}
10
+ it_behaves_like "object that expects single Hash argument"
11
+ it_behaves_like "flickr api stub that requires :photo_id key in options hash"
12
+ end
13
+ end
14
+
15
+
16
+ shared_examples_for "stub for Api.photos" do
17
+ it "returns PhotoSearch object populated with fixtures.photos with valid tag" do
18
+ APP::Api.photos(:search_terms => 'france').should ==
19
+ APP::Models::PhotoSearch.new(fixtures.photos,{:search_terms => 'france'})
20
+ end
21
+
22
+ context "owner_id provided" do
23
+ it "returns object with same user when owner_id provided" do
24
+ params = {:owner_id => '1'}
25
+ api.photos(:owner_id => '1').should ==
26
+ ::FlickrMocks::Models::PhotoSearch.new(fixtures.author_photos,params)
27
+ end
28
+ it "returns object with same user when owner_id and tags provided" do
29
+ params = {:owner_id => '1',:search_terms => 'iran'}
30
+ api.photos(:owner_id => '1').should ==
31
+ ::FlickrMocks::Models::PhotoSearch.new(fixtures.author_photos,{:owner_id => '1'})
32
+ end
33
+ it "returns object with no entries when owner_id set to 'garbage'" do
34
+ api.photos(:owner_id => 'garbage').should ==
35
+ ::FlickrMocks::Models::PhotoSearch.new(fixtures.empty_photos,{:owner_id => 'garbage'})
36
+ end
37
+ end
38
+
39
+ context "search_terms provided" do
40
+ it "returns object with different owner_id values when :search_terms provided" do
41
+ params = {:search_terms => 'iran'}
42
+ api.photos(params).should ==
43
+ ::FlickrMocks::Models::PhotoSearch.new(fixtures.photos,params)
44
+ end
45
+ it "returns object with no entries when :search_terms is set to 'garbage'" do
46
+ params = {:search_terms => 'garbage'}
47
+ api.photos(params).should ==
48
+ ::FlickrMocks::Models::PhotoSearch.new(fixtures.empty_photos,params)
49
+ end
50
+ end
51
+ context "error conditions" do
52
+ let(:subject){api}
53
+ let(:method){:photos}
54
+ it_behaves_like "object that expects single Hash argument"
55
+ end
56
+ end
57
+
58
+ shared_examples_for "stub for Api.photo_details" do
59
+ it "returns PhotoDetails object populated with fixtures.photo_details and fixtures.photo_sizes with valid :photo_id" do
60
+ details = FlickrMocks::Models::Photo.new(fixtures.photo_details)
61
+ sizes = FlickrMocks::Models::PhotoSizes.new(fixtures.photo_sizes)
62
+ APP::Api.photo_details(:photo_id => 'sample').should ==
63
+ APP::Models::PhotoDetails.new(details,sizes)
64
+ end
65
+ it "returns expected object when proper :photo_id provided" do
66
+ api.photo_details(:photo_id => '1234').should ==
67
+ ::FlickrMocks::Models::PhotoDetails.new(fixtures.photo_details,fixtures.photo_sizes)
68
+ end
69
+ context "error conditions" do
70
+ let(:subject){api}
71
+ let(:method){:photo_details}
72
+ it_behaves_like "object that expects single Hash argument"
73
+ end
74
+ end
75
+
76
+ shared_examples_for "stub for Api.photo_sizes" do
77
+ it "returns PhotoSizes object populated with fixtures.photo_sizes with valid :photo_id" do
78
+ api.photo_sizes(:photo_id => '1234').should ==
79
+ ::FlickrMocks::Models::PhotoSizes.new(fixtures.photo_sizes)
80
+ end
81
+ context "error conditions" do
82
+ let(:subject){api}
83
+ let(:method){:photo_sizes}
84
+ it_behaves_like "object that expects single Hash argument"
85
+ it_behaves_like "flickr api stub that requires :photo_id key in options hash"
86
+ end
87
+ end
88
+
89
+ shared_examples_for "stub for Api.interesting_photos" do
90
+ it "returns PhotoSearch object when called with valid :date" do
91
+ api.interesting_photos(:date => '2010-10-20').should ==
92
+ ::FlickrMocks::Models::PhotoSearch.new(fixtures.interesting_photos,{:date => '2010-10-20'})
93
+ end
94
+ it "returns PhotoSearch object when called without a :date" do
95
+ api.interesting_photos({}).should ==
96
+ FlickrMocks::Models::PhotoSearch.new(fixtures.interesting_photos,{})
97
+ end
98
+ it "returns empty photos when date is set to '2000-01-01" do
99
+ params = {:date => '2000-01-01'}
100
+ api.interesting_photos(params).should ==
101
+ FlickrMocks::Models::PhotoSearch.new(fixtures.empty_photos,params)
102
+ end
103
+
104
+ context "error conditions" do
105
+ it_behaves_like "object that expects single Hash argument"
106
+ it "raises eror when :date is set to 'garbage'" do
107
+ expect {
108
+ api.interesting_photos(:date => 'garbage')
109
+ }.to raise_error(FlickRaw::FailedResponse)
110
+ end
111
+ end
112
+ end
113
+
114
+
115
+ shared_examples_for "stub for Api.commons_institutions" do
116
+ it "returns CommonsInstitutions object with no options" do
117
+
118
+ end
119
+
120
+ end
121
+
122
+ shared_examples_for "flickr api stub that requires :photo_id key in options hash" do
123
+ it "raises FlickRaw::FailedResponse when :photo_id not supplied in Hash" do
124
+ expect {
125
+ api.send(method,{})
126
+ }.to raise_error(FlickRaw::FailedResponse)
127
+ end
128
+ it "raises FlickRaw::FailedResponse when :photo_id is nil" do
129
+ expect {
130
+ api.send(method,{:photo_id => nil})
131
+ }.to raise_error(FlickRaw::FailedResponse)
132
+ end
133
+ it "raises FlickRaw::FailedResponse when :photo_id is garbage" do
134
+ expect {
135
+ api.send(method,{:photo_id => 'garbage'})
136
+ }.to raise_error(FlickRaw::FailedResponse)
137
+ end
138
+ end
139
+
140
+
data/spec/spec_helper.rb CHANGED
@@ -1,18 +1,18 @@
1
1
  require 'rubygems'
2
2
  require 'rspec'
3
-
4
3
  require 'faker'
5
-
6
- require 'chronic_duration'
7
4
  require 'flickraw-cached'
8
5
  require 'ruby-debug'
9
-
10
6
  require 'shared_examples/array_accessor'
11
7
  require 'shared_examples/image_url_helpers'
12
8
  require 'shared_examples/size_accessor'
13
9
  require 'shared_examples/collection'
14
10
  require 'shared_examples/hash_argument'
15
-
11
+ require 'shared_examples/stub_helpers'
12
+ require 'shared_examples/hash_options/perpage_hash_option'
13
+ require 'shared_examples/hash_options/page_hash_option'
14
+ require 'shared_examples/hash_options/tag_mode_hash_option'
15
+ require 'shared_examples/hash_options/date_hash_option'
16
16
  require 'flickrmocks'
17
17
 
18
18
  Rspec.configure do |c|
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 8
8
- - 15
9
- version: 0.8.15
7
+ - 9
8
+ - 0
9
+ version: 0.9.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Takaltoo
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-20 00:00:00 -08:00
17
+ date: 2010-12-25 00:00:00 -08:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -46,7 +46,7 @@ dependencies:
46
46
  type: :runtime
47
47
  version_requirements: *id002
48
48
  - !ruby/object:Gem::Dependency
49
- name: rspec
49
+ name: ruby-debug19
50
50
  prerelease: false
51
51
  requirement: &id003 !ruby/object:Gem::Requirement
52
52
  none: false
@@ -54,14 +54,14 @@ dependencies:
54
54
  - - ">="
55
55
  - !ruby/object:Gem::Version
56
56
  segments:
57
- - 2
58
- - 2
59
57
  - 0
60
- version: 2.2.0
61
- type: :development
58
+ - 11
59
+ - 6
60
+ version: 0.11.6
61
+ type: :runtime
62
62
  version_requirements: *id003
63
63
  - !ruby/object:Gem::Dependency
64
- name: capybara
64
+ name: will_paginate
65
65
  prerelease: false
66
66
  requirement: &id004 !ruby/object:Gem::Requirement
67
67
  none: false
@@ -69,14 +69,31 @@ dependencies:
69
69
  - - ">="
70
70
  - !ruby/object:Gem::Version
71
71
  segments:
72
+ - 3
72
73
  - 0
73
- version: "0"
74
- type: :development
74
+ - pre2
75
+ version: 3.0.pre2
76
+ type: :runtime
75
77
  version_requirements: *id004
76
78
  - !ruby/object:Gem::Dependency
77
- name: factory_girl_rails
79
+ name: rspec
78
80
  prerelease: false
79
81
  requirement: &id005 !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ segments:
87
+ - 2
88
+ - 2
89
+ - 0
90
+ version: 2.2.0
91
+ type: :development
92
+ version_requirements: *id005
93
+ - !ruby/object:Gem::Dependency
94
+ name: factory_girl_rails
95
+ prerelease: false
96
+ requirement: &id006 !ruby/object:Gem::Requirement
80
97
  none: false
81
98
  requirements:
82
99
  - - ">="
@@ -86,11 +103,11 @@ dependencies:
86
103
  - 0
87
104
  version: "1.0"
88
105
  type: :development
89
- version_requirements: *id005
106
+ version_requirements: *id006
90
107
  - !ruby/object:Gem::Dependency
91
108
  name: faker
92
109
  prerelease: false
93
- requirement: &id006 !ruby/object:Gem::Requirement
110
+ requirement: &id007 !ruby/object:Gem::Requirement
94
111
  none: false
95
112
  requirements:
96
113
  - - ">="
@@ -101,7 +118,22 @@ dependencies:
101
118
  - 1
102
119
  version: 0.3.1
103
120
  type: :development
104
- version_requirements: *id006
121
+ version_requirements: *id007
122
+ - !ruby/object:Gem::Dependency
123
+ name: flickraw-cached
124
+ prerelease: false
125
+ requirement: &id008 !ruby/object:Gem::Requirement
126
+ none: false
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ segments:
131
+ - 0
132
+ - 8
133
+ - 2
134
+ version: 0.8.2
135
+ type: :development
136
+ version_requirements: *id008
105
137
  description: |-
106
138
  FlickrMocks makes it possible to Marshal responses
107
139
  generated from the FLickRaw gem. This is useful for
@@ -122,6 +154,7 @@ files:
122
154
  - .gitignore
123
155
  - .rspec
124
156
  - Gemfile
157
+ - Gemfile.lock
125
158
  - MIT-LICENSE
126
159
  - README.rdoc
127
160
  - Rakefile
@@ -141,6 +174,7 @@ files:
141
174
  - lib/flickr_mocks/models/commons_institution.rb
142
175
  - lib/flickr_mocks/models/commons_institutions.rb
143
176
  - lib/flickr_mocks/models/helpers.rb
177
+ - lib/flickr_mocks/models/models.rb
144
178
  - lib/flickr_mocks/models/photo.rb
145
179
  - lib/flickr_mocks/models/photo_details.rb
146
180
  - lib/flickr_mocks/models/photo_dimensions.rb
@@ -187,8 +221,13 @@ files:
187
221
  - spec/shared_examples/array_accessor.rb
188
222
  - spec/shared_examples/collection.rb
189
223
  - spec/shared_examples/hash_argument.rb
224
+ - spec/shared_examples/hash_options/date_hash_option.rb
225
+ - spec/shared_examples/hash_options/page_hash_option.rb
226
+ - spec/shared_examples/hash_options/perpage_hash_option.rb
227
+ - spec/shared_examples/hash_options/tag_mode_hash_option.rb
190
228
  - spec/shared_examples/image_url_helpers.rb
191
229
  - spec/shared_examples/size_accessor.rb
230
+ - spec/shared_examples/stub_helpers.rb
192
231
  - spec/spec_helper.rb
193
232
  - tasks/fixtures.rb
194
233
  has_rdoc: true