flickrmocks 0.8.15 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
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