flickr_fu 0.1.6 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. data/.gitignore +13 -0
  2. data/README +38 -1
  3. data/Rakefile +64 -13
  4. data/VERSION.yml +4 -0
  5. data/flickr_fu.gemspec +114 -32
  6. data/lib/flickr/auth.rb +8 -1
  7. data/lib/flickr/base.rb +75 -26
  8. data/lib/flickr/contact.rb +16 -0
  9. data/lib/flickr/contacts.rb +55 -0
  10. data/lib/flickr/errors.rb +20 -0
  11. data/lib/flickr/geo.rb +42 -0
  12. data/lib/flickr/license.rb +10 -0
  13. data/lib/flickr/location.rb +15 -0
  14. data/lib/flickr/photo.rb +130 -107
  15. data/lib/flickr/photos.rb +29 -11
  16. data/lib/flickr/photoset.rb +37 -0
  17. data/lib/flickr/photosets.rb +39 -0
  18. data/lib/flickr/token.rb +1 -1
  19. data/lib/flickr/urls.rb +44 -0
  20. data/lib/flickr_fu.rb +25 -2
  21. data/spec/fixtures/flickr/contacts/get_list-fail-99.xml +4 -0
  22. data/spec/fixtures/flickr/contacts/get_public_list-0.xml +7 -0
  23. data/spec/fixtures/flickr/photos/geo/get_location-0.xml +11 -0
  24. data/spec/fixtures/flickr/photos/geo/get_location-fail-2.xml +4 -0
  25. data/spec/fixtures/flickr/photos/get_info-0.xml +41 -0
  26. data/spec/fixtures/flickr/photos/get_info-1.xml +19 -0
  27. data/spec/fixtures/flickr/photos/get_sizes-0.xml +10 -0
  28. data/spec/fixtures/flickr/photos/get_sizes-1.xml +8 -0
  29. data/spec/fixtures/flickr/photos/licenses/get_info.xml +12 -0
  30. data/spec/fixtures/flickr/photosets/get_list-0.xml +13 -0
  31. data/spec/fixtures/flickr/photosets/get_photos-0.xml +7 -0
  32. data/spec/fixtures/flickr/test/echo-0.xml +5 -0
  33. data/spec/fixtures/flickr/test/null-fail-99.xml +4 -0
  34. data/spec/fixtures/flickr/urls/get_group-0.xml +4 -0
  35. data/spec/fixtures/flickr/urls/get_group-fail-1.xml +4 -0
  36. data/spec/fixtures/flickr/urls/get_user_photos-0.xml +4 -0
  37. data/spec/fixtures/flickr/urls/get_user_photos-fail-1.xml +4 -0
  38. data/spec/fixtures/flickr/urls/get_user_photos-fail-2.xml +4 -0
  39. data/spec/fixtures/flickr/urls/get_user_profile-0.xml +4 -0
  40. data/spec/fixtures/flickr/urls/get_user_profile-fail-1.xml +4 -0
  41. data/spec/fixtures/flickr/urls/get_user_profile-fail-2.xml +4 -0
  42. data/spec/fixtures/flickr/urls/lookup_group-0.xml +6 -0
  43. data/spec/fixtures/flickr/urls/lookup_group-fail-1.xml +4 -0
  44. data/spec/fixtures/flickr/urls/lookup_user-0.xml +6 -0
  45. data/spec/fixtures/flickr/videos/get_info-0.xml +31 -0
  46. data/spec/fixtures/flickr/videos/get_sizes-0.xml +13 -0
  47. data/spec/flickr/base_spec.rb +97 -0
  48. data/spec/flickr/contacts_spec.rb +47 -0
  49. data/spec/flickr/errors_spec.rb +21 -0
  50. data/spec/flickr/geo_spec.rb +20 -0
  51. data/spec/flickr/photo_spec.rb +140 -0
  52. data/spec/flickr/photos_spec.rb +50 -0
  53. data/spec/flickr/photosets_spec.rb +49 -0
  54. data/spec/flickr/test_spec.rb +34 -0
  55. data/spec/flickr/urls_spec.rb +99 -0
  56. data/spec/spec.opts +4 -0
  57. data/spec/spec_helper.rb +20 -0
  58. metadata +66 -7
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <rsp stat="ok">
3
+ <user nsid="80755658@N00" url="http://www.flickr.com/people/lvizard/"/>
4
+ </rsp>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <rsp stat="fail">
3
+ <err code="1" msg="User not found"/>
4
+ </rsp>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <rsp stat="fail">
3
+ <err code="2" msg="No user specified"/>
4
+ </rsp>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <rsp stat="ok">
3
+ <group id="34427469792@N01">
4
+ <groupname>FlickrCentral</groupname>
5
+ </group>
6
+ </rsp>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <rsp stat="fail">
3
+ <err code="1" msg="Group not found"/>
4
+ </rsp>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <rsp stat="ok">
3
+ <user id="80755658@N00">
4
+ <username>Maciej Biłas</username>
5
+ </user>
6
+ </rsp>
@@ -0,0 +1,31 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <rsp stat="ok">
3
+ <photo id="2729556270" secret="eee23fb14a" server="3207" farm="4" dateuploaded="1217794663" isfavorite="0" license="4" rotation="0" originalsecret="e940a69ebf" originalformat="png" media="video">
4
+ <owner nsid="24461004@N00" username="girl_named_fred" realname="Cynthia Donovan" location="Pawtucket, USA" />
5
+ <title>bust a move?</title>
6
+ <description />
7
+ <visibility ispublic="1" isfriend="0" isfamily="0" />
8
+ <dates posted="1217794663" taken="2008-08-03 13:17:43" takengranularity="0" lastupdate="1217859448" />
9
+ <editability cancomment="0" canaddmeta="0" />
10
+ <usage candownload="1" canblog="0" canprint="0" />
11
+
12
+ <comments>0</comments>
13
+ <notes />
14
+ <tags>
15
+ <tag id="251642-2729556270-6613225" author="24461004@N00" raw="babysquash" machine_tag="0">babysquash</tag>
16
+ <tag id="251642-2729556270-8754" author="24461004@N00" raw="august" machine_tag="0">august</tag>
17
+ <tag id="251642-2729556270-30529" author="24461004@N00" raw="anita" machine_tag="0">anita</tag>
18
+ <tag id="251642-2729556270-65815" author="24461004@N00" raw="waltham" machine_tag="0">waltham</tag>
19
+
20
+ <tag id="251642-2729556270-1853" author="24461004@N00" raw="liberty" machine_tag="0">liberty</tag>
21
+ <tag id="251642-2729556270-20506" author="24461004@N00" raw="cousin" machine_tag="0">cousin</tag>
22
+ <tag id="251642-2729556270-2079514" author="24461004@N00" raw="brucespringstein" machine_tag="0">brucespringstein</tag>
23
+ </tags>
24
+ <urls>
25
+ <url type="photopage">http://www.flickr.com/photos/girl_named_fred/2729556270/</url>
26
+ </urls>
27
+
28
+ <video ready="1" failed="0" pending="0" duration="" width="320" height="240" />
29
+ </photo>
30
+ </rsp>
31
+
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <rsp stat="ok">
3
+ <sizes canblog="0" canprint="0" candownload="1">
4
+ <size label="Square" width="75" height="75" source="http://farm4.static.flickr.com/3207/2729556270_eee23fb14a_s.jpg" url="http://www.flickr.com/photos/girl_named_fred/2729556270/sizes/sq/" media="photo" />
5
+ <size label="Thumbnail" width="100" height="75" source="http://farm4.static.flickr.com/3207/2729556270_eee23fb14a_t.jpg" url="http://www.flickr.com/photos/girl_named_fred/2729556270/sizes/t/" media="photo" />
6
+ <size label="Small" width="240" height="180" source="http://farm4.static.flickr.com/3207/2729556270_eee23fb14a_m.jpg" url="http://www.flickr.com/photos/girl_named_fred/2729556270/sizes/s/" media="photo" />
7
+ <size label="Medium" width="320" height="240" source="http://farm4.static.flickr.com/3207/2729556270_eee23fb14a.jpg" url="http://www.flickr.com/photos/girl_named_fred/2729556270/sizes/m/" media="photo" />
8
+ <size label="Original" width="320" height="240" source="http://farm4.static.flickr.com/3207/2729556270_e940a69ebf_o.png" url="http://www.flickr.com/photos/girl_named_fred/2729556270/sizes/o/" media="photo" />
9
+ <size label="Video Player" width="320" height="240" source="http://www.flickr.com/apps/video/stewart.swf?v=63881&amp;photo_id=2729556270&amp;photo_secret=eee23fb14a" url="http://www.flickr.com/photos/girl_named_fred/2729556270/" media="video" />
10
+ </sizes>
11
+ </rsp>
12
+
13
+
@@ -0,0 +1,97 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Flickr do
4
+
5
+ before :all do
6
+ @token = Flickr::Auth::Token.new(:permissions => "write", :token => "foo", :user_id => "80755658@N00",
7
+ :user_real_name => "Maciej Bilas", :username => "Maciej Bilas")
8
+ @api_key = "foo"
9
+ @api_secret = "bar"
10
+ @yaml_hash = {"key" => @api_key, "secret" => @api_secret}
11
+ end
12
+
13
+ describe ".new" do
14
+
15
+ describe "with no environment option specified" do
16
+ it "should inititialize Flickr from a Hash" do
17
+ # AFAIK there is no spec on how the key and secret look like
18
+ # so we can test with simple values
19
+ init_hash = {:key => @api_key, :secret => @api_secret}
20
+ flickr = Flickr.new(init_hash)
21
+ flickr.api_key.should == @api_key
22
+ flickr.api_secret.should == @api_secret
23
+
24
+ init_hash_with_token = init_hash.merge(:token => @token)
25
+ flickr = Flickr.new(init_hash_with_token)
26
+ flickr.token.should == @token
27
+ end
28
+
29
+ it "should initialize Flickr from a YAML file" do
30
+ YAML.should_receive(:load_file).once.and_return(@yaml_hash)
31
+ flickr = Flickr.new("flickr.yml")
32
+ flickr.api_key.should == @api_key
33
+ flickr.api_secret.should == @api_secret
34
+ end
35
+
36
+ it "should fail if API key or secret value is absent" do
37
+ invalid_hash = {:key => @api_key}
38
+ lambda { Flickr.new(invalid_hash) }.should raise_error
39
+ invalid_hash = {:secret => @api_secret}
40
+ lambda { Flickr.new(invalid_hash) }.should raise_error
41
+ end
42
+
43
+ end
44
+
45
+ describe "with an environment option specified" do
46
+ before :all do
47
+ @environment_specified = "development"
48
+ end
49
+
50
+ it "should initialize Flickr from a YAML file" do
51
+ yaml_hash = {@environment_specified => {"key" => @api_key, "secret" => @api_secret}}
52
+ YAML.should_receive(:load_file).once.and_return(yaml_hash)
53
+ flickr = Flickr.new("flickr.yml", :environment => @environment_specified)
54
+ flickr.api_key.should == @api_key
55
+ flickr.api_secret.should == @api_secret
56
+ end
57
+ end
58
+
59
+ describe "when token_cache is passed (only with a YAML file)" do
60
+
61
+ before :all do
62
+ @expected_token_cache = "token_cache.yml"
63
+ end
64
+
65
+ # For backward compatibility
66
+ it "should initialize Flickr with token_cache when passed as the second parameter" do
67
+ YAML.should_receive(:load_file).once.and_return(@yaml_hash)
68
+ flickr = Flickr.new("flickr.yml", @expected_token_cache)
69
+ flickr.token_cache.should == @expected_token_cache
70
+ end
71
+
72
+ it "should initialize Flickr with token_cache when passed as an option" do
73
+ YAML.should_receive(:load_file).once.and_return(@yaml_hash)
74
+ flickr = Flickr.new("flickr.yml", :token_cache => @expected_token_cache)
75
+ flickr.token_cache.should == @expected_token_cache
76
+ end
77
+ end
78
+
79
+ describe "when token is passed as an options (only with a YAML file)" do
80
+
81
+ it "should initialize Flickr with a token if passed" do
82
+ YAML.should_receive(:load_file).once.and_return(@yaml_hash)
83
+ flickr = Flickr.new("flickr.yml", :token => @token)
84
+ flickr.token.should == @token
85
+ end
86
+
87
+ end
88
+
89
+ describe "when both token and token_cache are passed" do
90
+ it "should raise an error" do
91
+ YAML.should_receive(:load_file).once.and_return(@yaml_hash)
92
+ lambda { Flickr.new("flickr.yml", {:token => @token, :token_cache => "token_cache.yml"})}.should raise_error
93
+ end
94
+ end
95
+
96
+ end
97
+ end
@@ -0,0 +1,47 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Flickr::Contacts do
4
+
5
+ before :each do
6
+ @flickr = SpecHelper.flickr
7
+ end
8
+
9
+ describe ".get_public_list" do
10
+ before :all do
11
+ @public_list_xml = File.read(File.dirname(__FILE__) +
12
+ "/../fixtures/flickr/contacts/get_public_list-0.xml")
13
+ end
14
+
15
+ it "should call flickr.contacts.getPublicList" do
16
+ bogus_user_id = "12334@N00"
17
+ @flickr.should_receive(:send_request).with("flickr.contacts.getPublicList",
18
+ {:user_id=>bogus_user_id})
19
+ @flickr.contacts.get_public_list(bogus_user_id)
20
+ end
21
+
22
+ it "should return public contacts for the given user" do
23
+ bogus_user_id = "12334@N00"
24
+ @flickr.stub!(:request_over_http).and_return(@public_list_xml)
25
+ contacts = @flickr.contacts.get_public_list(bogus_user_id)
26
+ contacts.size.should == 2
27
+ contacts.first.username.should == "kooop"
28
+ contacts.first.nsid.should == "40718771@N00"
29
+ contacts.first.iconserver.should == "2"
30
+ contacts.first.iconfarm.should == "1"
31
+ end
32
+ end
33
+
34
+ describe ".get_list" do
35
+ it "should call flickr.contacts.getList" do
36
+ @flickr.should_receive(:send_request).with("flickr.contacts.getList", {})
37
+ @flickr.contacts.get_list
38
+ end
39
+
40
+ it "should raise flickr error 99: Insufficient permissions" do
41
+ xml = File.read(File.dirname(__FILE__) + "/../fixtures/flickr/contacts/get_list-fail-99.xml")
42
+ @flickr.stub!(:request_over_http).and_return(xml)
43
+ lambda { @flickr.contacts.get_list }.should raise_error(Flickr::Error, /^99:/)
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,21 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Flickr::Errors, ".error_for" do
4
+ it "should raise a RuntimeError with an \"Internal message\" message if either code or message is blank" do
5
+ lambda { Flickr::Errors.error_for(nil, nil) }.should raise_error(RuntimeError, /^Internal error/)
6
+ lambda { Flickr::Errors.error_for(20, nil) }.should raise_error(RuntimeError, /^Internal error/)
7
+ lambda { Flickr::Errors.error_for(nil, "foo") }.should raise_error(RuntimeError, /^Internal error/)
8
+ end
9
+
10
+ it "should raise a RuntimeError with an \"Internal error\" message if code is not an integer" do
11
+ lambda { Flickr::Errors.error_for("a", "foo")}.should raise_error(RuntimeError, /^Internal error/)
12
+ end
13
+
14
+ it "should raise a valid error if parameters are valid" do
15
+ lambda { Flickr::Errors.error_for(96, "Invalid signature")}.should raise_error(Flickr::Error)
16
+ end
17
+
18
+ it "should return an error with a message starting with the error code" do
19
+ lambda { Flickr::Errors.error_for(97, "Missing signature")}.should raise_error(Flickr::Error, /^97/)
20
+ end
21
+ end
@@ -0,0 +1,20 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Flickr::Photos::Geo do
4
+
5
+ before :each do
6
+ @flickr = SpecHelper.flickr
7
+ end
8
+
9
+ describe ".get_location" do
10
+ it "should return the geo data (latitude and longitude and the accuracy level) for a photo" do
11
+ location_xml = File.read(File.dirname(__FILE__) + "/../fixtures/flickr/photos/geo/get_location-0.xml")
12
+ @flickr.should_receive(:request_over_http).and_return(location_xml)
13
+ acctual_loc = @flickr.photos.geo.get_location(2984637736)
14
+ acctual_loc.latitude.should == 50.041376
15
+ acctual_loc.longitude.should == 21.999006
16
+ acctual_loc.accuracy.should == 16
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,140 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ module PhotoSpecHelper
4
+ def valid_photo_attributes
5
+ {
6
+ :id => 2984637736,
7
+ :owner => "80755658@N00",
8
+ :secret => "9e5762e027",
9
+ :server => 3180,
10
+ :farm => 4,
11
+ :title => "Demolition of Hotel Rzeszów",
12
+ :is_public => 1,
13
+ :is_friend => 0,
14
+ :is_family => 0
15
+ }
16
+ end
17
+ end
18
+
19
+ describe Flickr::Photos::Photo do
20
+
21
+ include PhotoSpecHelper
22
+
23
+ before :all do
24
+ @info_xml = File.read(File.dirname(__FILE__) + "/../fixtures/flickr/photos/get_info-0.xml")
25
+ @sizes_xml = File.read(File.dirname(__FILE__) + "/../fixtures/flickr/photos/get_sizes-0.xml")
26
+ end
27
+
28
+ before :each do
29
+ @flickr = SpecHelper.flickr
30
+ #@flickr.stub!(:request_over_http).and_return(info_xml)
31
+ @photo = Flickr::Photos::Photo.new(@flickr, valid_photo_attributes)
32
+ end
33
+
34
+ describe ".description" do
35
+ it "should return the description" do
36
+ @flickr.should_receive(:request_over_http).and_return(@info_xml)
37
+ @photo.description.should ==
38
+ "The last picture from a quite old event. The demolition of the best known hotel in Rzeszów called Hotel Rzeszów."
39
+ end
40
+ end
41
+
42
+ describe ".photo_size" do
43
+ it "should return the appropriate Flickr::Photos::Size instance when requested by symbol" do
44
+ @photo.photo_size(:square).class.should == Flickr::Photos::Size
45
+ @photo.photo_size(:square).label.should == "Square"
46
+ end
47
+
48
+ it "should return the appropriate Flickr::Photos::Size instance when requested by string" do
49
+ @photo.photo_size('square').class.should == Flickr::Photos::Size
50
+ @photo.photo_size('square').label.should == "Square"
51
+ end
52
+
53
+ it "should return the :medium Flickr::Photos::Size instance invalidly requested" do
54
+ @photo.photo_size(:doubleplusbig).class.should == Flickr::Photos::Size
55
+ @photo.photo_size(:doubleplusbig).label.should == "Medium"
56
+ end
57
+ end
58
+
59
+ describe ".image_url" do
60
+ it "should return all standard sizes (thumbnail, square, small, medium and large) when requested" do
61
+ @photo.image_url(:square).should == "http://farm4.static.flickr.com/3180/2984637736_9e5762e027_s.jpg"
62
+ @photo.image_url(:thumbnail).should == "http://farm4.static.flickr.com/3180/2984637736_9e5762e027_t.jpg"
63
+ @photo.image_url(:small).should == "http://farm4.static.flickr.com/3180/2984637736_9e5762e027_m.jpg"
64
+ @photo.image_url(:medium).should == "http://farm4.static.flickr.com/3180/2984637736_9e5762e027.jpg"
65
+ @photo.image_url(:large).should == "http://farm4.static.flickr.com/3180/2984637736_9e5762e027_b.jpg"
66
+ end
67
+
68
+ it "should return the same image even if you pass a string as an argument" do
69
+ @photo.image_url("square").should == @photo.image_url(:square)
70
+ @photo.image_url("large").should == @photo.image_url(:large)
71
+ end
72
+
73
+ it "should not call getSizes if not requested the url of the original image" do
74
+ @flickr.should_not_receive(:request_over_http)
75
+ @photo.image_url :square
76
+ @photo.image_url :thumbnail
77
+ @photo.image_url :small
78
+ @photo.image_url :medium
79
+ @photo.image_url :large
80
+ end
81
+
82
+ it "should call getSizes if requested the url of the original image" do
83
+ @flickr.should_receive(:request_over_http).and_return(@sizes_xml)
84
+ @photo.image_url :original
85
+ end
86
+
87
+ it "should return nil if original image url not available" do
88
+ @flickr.should_receive(:request_over_http).and_return(@sizes_xml)
89
+ @photo.image_url(:original).should == nil
90
+ end
91
+ end
92
+
93
+ describe ".video_url" do
94
+ it "should return nil, since it's not a video" do
95
+ @flickr.should_receive(:request_over_http).and_return(@sizes_xml)
96
+ @photo.video_url.should == nil
97
+ end
98
+ end
99
+
100
+ describe ".location" do
101
+ it "should return the picture location as specified in flickr.photos.geo.getLocation" do
102
+ location_xml = File.read(File.dirname(__FILE__) + "/../fixtures/flickr/photos/geo/get_location-0.xml")
103
+ @flickr.should_receive(:request_over_http).twice.and_return(location_xml)
104
+ expected_loc = @flickr.photos.geo.get_location(@photo.id)
105
+ acctual_loc = @photo.location
106
+ # Checking by latitude and longitude is enough for us
107
+ acctual_loc.latitude.should == expected_loc.latitude
108
+ acctual_loc.longitude.should == expected_loc.longitude
109
+ end
110
+
111
+ it "should return nil if picture is not geo-tagged" do
112
+ no_location_xml = File.read(File.dirname(__FILE__) + "/../fixtures/flickr/photos/geo/get_location-fail-2.xml")
113
+ @flickr.should_receive(:request_over_http).and_return(no_location_xml)
114
+ @photo.location.should be_nil
115
+ end
116
+ end
117
+
118
+ describe Flickr::Photos::Photo, "but it's really a video" do
119
+
120
+ include PhotoSpecHelper
121
+
122
+ before :all do
123
+ @info_xml = File.read(File.dirname(__FILE__) + "/../fixtures/flickr/videos/get_info-0.xml")
124
+ @sizes_xml = File.read(File.dirname(__FILE__) + "/../fixtures/flickr/videos/get_sizes-0.xml")
125
+ end
126
+
127
+ before :each do
128
+ @flickr = SpecHelper.flickr
129
+ #@flickr.stub!(:request_over_http).and_return(info_xml)
130
+ @photo = Flickr::Photos::Photo.new(@flickr, valid_photo_attributes)
131
+ end
132
+
133
+ describe ".video_url" do
134
+ it "should return something sane" do
135
+ @flickr.should_receive(:request_over_http).and_return(@sizes_xml)
136
+ @photo.video_url.should == "http://www.flickr.com/apps/video/stewart.swf?v=63881&photo_id=2729556270&photo_secret=eee23fb14a"
137
+ end
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,50 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Flickr::Photos do
4
+
5
+ before :each do
6
+ @flickr = SpecHelper.flickr
7
+ end
8
+
9
+ describe ".licenses" do
10
+ before :all do
11
+ @licenses_xml = File.read(File.dirname(__FILE__) + "/../fixtures/flickr/photos/licenses/get_info.xml")
12
+ @valid_licenses = {
13
+ 0 => Flickr::Photos::License.new(:id => 0, :name => "All Rights Reserved", :url => ""),
14
+ 4 => Flickr::Photos::License.new(:id => 4, :name => "Attribution License", :url => "http://creativecommons.org/licenses/by/2.0/"),
15
+ 6 => Flickr::Photos::License.new(:id => 6, :name => "Attribution-NoDerivs License", :url => "http://creativecommons.org/licenses/by-nd/2.0/"),
16
+ 3 => Flickr::Photos::License.new(:id => 3, :name => "Attribution-NonCommercial-NoDerivs License", :url => "http://creativecommons.org/licenses/by-nc-nd/2.0/"),
17
+ 2 => Flickr::Photos::License.new(:id => 2, :name => "Attribution-NonCommercial License", :url => "http://creativecommons.org/licenses/by-nc/2.0/"),
18
+ 1 => Flickr::Photos::License.new(:id => 1, :name => "Attribution-NonCommercial-ShareAlike License", :url => "http://creativecommons.org/licenses/by-nc-sa/2.0/"),
19
+ 5 => Flickr::Photos::License.new(:id => 5, :name => "Attribution-ShareAlike License", :url => "http://creativecommons.org/licenses/by-sa/2.0/")
20
+ }
21
+ end
22
+
23
+ it "should return all valid licenses" do
24
+ @flickr.should_receive(:request_over_http).and_return(@licenses_xml)
25
+ @flickr.photos.licenses.should == @valid_licenses
26
+ end
27
+
28
+ it "should not not call Flickr API more than once" do
29
+ @flickr.should_receive(:request_over_http).once.and_return(@licenses_xml)
30
+ @flickr.photos.licenses
31
+ @flickr.photos.licenses
32
+ end
33
+ end
34
+
35
+ describe ".find_by_id" do
36
+ it "should return a photo when a valid id is given" do
37
+ photo_id = 2984637736
38
+ #photo_upload_date = 1225297614
39
+ info_xml = File.read(File.dirname(__FILE__) + "/../fixtures/flickr/photos/get_info-0.xml")
40
+ @flickr.should_receive(:request_over_http).and_return(info_xml)
41
+
42
+ photo = @flickr.photos.find_by_id(photo_id)
43
+ photo.id.should == photo_id
44
+ end
45
+
46
+ it "should raise an error when no id is given"
47
+
48
+ it "should raise an error when the photo does not exist"
49
+ end
50
+ end