flickrie 0.6.1 → 0.7.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 (90) hide show
  1. data/.gitignore +1 -0
  2. data/CHANGELOG.md +22 -0
  3. data/Gemfile +0 -6
  4. data/README.md +15 -1
  5. data/Rakefile +8 -13
  6. data/api_methods.md +1 -1
  7. data/flickrie.gemspec +2 -3
  8. data/lib/flickrie/api_methods.rb +17 -0
  9. data/lib/flickrie/client.rb +21 -5
  10. data/lib/flickrie/instance.rb +7 -2
  11. data/lib/flickrie/license.rb +2 -0
  12. data/lib/flickrie/location.rb +10 -8
  13. data/lib/flickrie/media/exif.rb +3 -1
  14. data/lib/flickrie/media/tag.rb +3 -3
  15. data/lib/flickrie/media/visibility.rb +6 -4
  16. data/lib/flickrie/media.rb +69 -84
  17. data/lib/flickrie/media_count.rb +3 -5
  18. data/lib/flickrie/photo.rb +55 -54
  19. data/lib/flickrie/set.rb +31 -25
  20. data/lib/flickrie/ticket.rb +4 -8
  21. data/lib/flickrie/upload_client.rb +7 -2
  22. data/lib/flickrie/user.rb +33 -34
  23. data/lib/flickrie/version.rb +1 -1
  24. data/lib/flickrie/video.rb +13 -12
  25. data/spec/api_methods_spec.rb +43 -0
  26. data/spec/error_spec.rb +32 -0
  27. data/{test → spec/files}/photo.jpg +0 -0
  28. data/{test → spec/files}/video.mov +0 -0
  29. data/spec/instance_spec.rb +22 -0
  30. data/spec/license_spec.rb +15 -0
  31. data/spec/location_spec.rb +11 -0
  32. data/spec/media_count_spec.rb +18 -0
  33. data/spec/media_spec.rb +271 -0
  34. data/spec/oauth_spec.rb +22 -0
  35. data/spec/photo_spec.rb +137 -0
  36. data/spec/set_spec.rb +68 -0
  37. data/spec/spec_helper.rb +68 -0
  38. data/spec/user_spec.rb +56 -0
  39. data/spec/video_spec.rb +54 -0
  40. metadata +47 -132
  41. data/test/error_test.rb +0 -20
  42. data/test/instance_test.rb +0 -20
  43. data/test/license_test.rb +0 -19
  44. data/test/location_test.rb +0 -29
  45. data/test/media_count_test.rb +0 -25
  46. data/test/media_test.rb +0 -432
  47. data/test/oauth_test.rb +0 -25
  48. data/test/photo_test.rb +0 -212
  49. data/test/set_test.rb +0 -92
  50. data/test/test_helper.rb +0 -14
  51. data/test/user_test.rb +0 -70
  52. data/test/vcr_cassettes/error/code.yml +0 -1165
  53. data/test/vcr_cassettes/instance/calling_api_methods.yml +0 -182
  54. data/test/vcr_cassettes/license/get_licenses.yml +0 -73
  55. data/test/vcr_cassettes/location/square_brackets.yml +0 -85
  56. data/test/vcr_cassettes/media/delete.yml +0 -1380
  57. data/test/vcr_cassettes/media/from_contacts.yml +0 -155
  58. data/test/vcr_cassettes/media/from_set.yml +0 -276
  59. data/test/vcr_cassettes/media/from_user.yml +0 -275
  60. data/test/vcr_cassettes/media/get_context.yml +0 -73
  61. data/test/vcr_cassettes/media/get_info.yml +0 -167
  62. data/test/vcr_cassettes/media/remove_tag.yml +0 -264
  63. data/test/vcr_cassettes/media/replace.yml +0 -2252
  64. data/test/vcr_cassettes/media/search.yml +0 -275
  65. data/test/vcr_cassettes/media/tags.yml +0 -346
  66. data/test/vcr_cassettes/media_count/get.yml +0 -135
  67. data/test/vcr_cassettes/media_count/square_brackets.yml +0 -69
  68. data/test/vcr_cassettes/oauth/tokens.yml +0 -400
  69. data/test/vcr_cassettes/photo/asynchronous_upload.yml +0 -1693
  70. data/test/vcr_cassettes/photo/from_set.yml +0 -273
  71. data/test/vcr_cassettes/photo/from_user.yml +0 -275
  72. data/test/vcr_cassettes/photo/get_exif.yml +0 -239
  73. data/test/vcr_cassettes/photo/get_sizes.yml +0 -147
  74. data/test/vcr_cassettes/photo/other_api_calls.yml +0 -506
  75. data/test/vcr_cassettes/photo/search.yml +0 -271
  76. data/test/vcr_cassettes/photo/square_brackets.yml +0 -85
  77. data/test/vcr_cassettes/photo/upload.yml +0 -1229
  78. data/test/vcr_cassettes/set/from_user.yml +0 -477
  79. data/test/vcr_cassettes/set/get_info.yml +0 -951
  80. data/test/vcr_cassettes/set/square_brackets.yml +0 -73
  81. data/test/vcr_cassettes/user/find_by_email_or_username.yml +0 -135
  82. data/test/vcr_cassettes/user/get_info.yml +0 -151
  83. data/test/vcr_cassettes/user/square_brackets.yml +0 -77
  84. data/test/vcr_cassettes/video/get_exif.yml +0 -135
  85. data/test/vcr_cassettes/video/get_info.yml +0 -86
  86. data/test/vcr_cassettes/video/get_sizes.yml +0 -151
  87. data/test/vcr_cassettes/video/other_api_calls.yml +0 -643
  88. data/test/vcr_cassettes/video/square_brackets.yml +0 -86
  89. data/test/vcr_cassettes/video/upload.yml +0 -308
  90. data/test/video_test.rb +0 -118
@@ -0,0 +1,271 @@
1
+ # encoding: utf-8
2
+
3
+ describe Flickrie::Media do
4
+ before(:all) do
5
+ @attributes = {
6
+ :id => PHOTO_ID,
7
+ :secret => '25bb44852b',
8
+ :server => '7049',
9
+ :farm => 8,
10
+ :title => 'IMG_0796',
11
+ :description => 'Test',
12
+ :media_status => 'ready',
13
+ :path_alias => nil,
14
+ :camera => 'Canon PowerShot G12',
15
+ :views_count => 2,
16
+ :comments_count => 1,
17
+ :location => {
18
+ :latitude => 45.807258,
19
+ :longitude => 15.967599,
20
+ :accuracy => '11',
21
+ :context => 0,
22
+ :neighbourhood => nil,
23
+ :locality => {
24
+ :name => 'Zagreb',
25
+ :place_id => '00j4IylZV7scWik',
26
+ :woeid => '851128'
27
+ },
28
+ :county => {
29
+ :name => 'Zagreb',
30
+ :place_id => '306dHrhQV7o6jm.ZUQ',
31
+ :woeid => '15022257'
32
+ },
33
+ :region => {
34
+ :name => 'Grad Zagreb',
35
+ :place_id => 'Js1DU.pTUrpBCIKhVw',
36
+ :woeid => '20070170'
37
+ },
38
+ :country => {
39
+ :name => 'Croatia',
40
+ :place_id => 'FunRCI5TUb6a6soTyw',
41
+ :woeid => '23424843'
42
+ },
43
+ :place_id => '00j4IylZV7scWik',
44
+ :woeid => '851128'
45
+ },
46
+ :geo_permissions => {
47
+ :public? => true,
48
+ :contacts? => false,
49
+ :friends? => false,
50
+ :family? => false
51
+ },
52
+ :tags => {
53
+ :first => {
54
+ :content => 'luka',
55
+ :author => {
56
+ :nsid => USER_NSID
57
+ },
58
+ :raw => 'luka',
59
+ :machine_tag? => false
60
+ }
61
+ },
62
+ :machine_tags => [],
63
+ :license => {:id => '0'},
64
+ :taken_at_granularity => 0,
65
+ :owner => {
66
+ :nsid => USER_NSID,
67
+ :username => "Janko Marohnić",
68
+ :real_name => "Janko Marohnić",
69
+ :location => "Zagreb, Croatia",
70
+ :icon_server => "5464",
71
+ :icon_farm => 6
72
+ },
73
+
74
+ :safety_level => 0,
75
+ :safe? => true,
76
+ :moderate? => false,
77
+ :restricted? => false,
78
+
79
+ :visibility => {
80
+ :public? => true,
81
+ :family? => false,
82
+ :friends? => false,
83
+ :contacts? => nil
84
+ },
85
+ :favorite? => false,
86
+
87
+ :can_comment? => false,
88
+ :can_add_meta? => false,
89
+ :can_everyone_comment? => true,
90
+ :can_everyone_add_meta? => false,
91
+
92
+ :can_download? => true,
93
+ :can_blog? => false,
94
+ :can_print? => false,
95
+ :can_share? => false,
96
+
97
+ :has_people? => false,
98
+ :faved? => false,
99
+ :notes => {
100
+ :first => {
101
+ :id => '72157629487842968',
102
+ :author => {
103
+ :nsid => '67131352@N04',
104
+ :username => 'Janko Marohnić'
105
+ },
106
+ :coordinates => [316, 0],
107
+ :width => 59,
108
+ :height => 50,
109
+ :content => 'Test'
110
+ }
111
+ }
112
+ }
113
+ end
114
+
115
+ context "get info" do
116
+ use_vcr_cassette "media/get_info"
117
+
118
+ it "should have all attributes correctly set" do
119
+ [
120
+ Flickrie.get_media_info(PHOTO_ID),
121
+ Flickrie::Photo.public_new('id' => PHOTO_ID).get_info,
122
+ Flickrie::Video.public_new('id' => PHOTO_ID).get_info
123
+ ].
124
+ each do |media|
125
+ [
126
+ :id, :secret, :server, :farm, :title, :description,
127
+ :views_count, :comments_count, :location, :geo_permissions,
128
+ :tags, :machine_tags, :license, :taken_at_granularity, :owner,
129
+ :safety_level, :safe?, :moderate?, :restricted?, :visibility,
130
+ :favorite?, :can_comment?, :can_add_meta?, :can_everyone_comment?,
131
+ :can_everyone_add_meta?, :can_download?, :can_blog?,
132
+ :can_print?, :can_share?, :has_people?, :notes
133
+ ].
134
+ each { |attribute| test_attribute(media, attribute) }
135
+
136
+ # other
137
+ media.url.empty?.should be_false
138
+ media['id'].should eq(PHOTO_ID)
139
+
140
+ # time
141
+ [:posted_at, :uploaded_at, :updated_at, :taken_at].each do |time_attribute|
142
+ media.send(time_attribute).should be_an_instance_of(Time)
143
+ end
144
+ end
145
+ end
146
+ end
147
+
148
+ shared_context "common" do
149
+ def test_common_attributes(media)
150
+ [
151
+ :id, :secret, :server, :farm, :title, :media_status, :views_count,
152
+ :geo_permissions, :machine_tags, :license, :taken_at_granularity
153
+ ].
154
+ each { |attribute| test_attribute(media, attribute) }
155
+
156
+ # the incomplete ones
157
+ test_attribute(media, :location, @attributes[:location].except(:locality, :county, :region, :country))
158
+ test_attribute(media.tags, :first, @attributes[:tags][:first].except(:author, :raw, :machine_tag?))
159
+ test_attribute(media, :owner, @attributes[:owner].except(:real_name, :location))
160
+
161
+ # other
162
+ media.url.empty?.should be_false
163
+
164
+ # time
165
+ [:uploaded_at, :updated_at, :taken_at].each do |time_attribute|
166
+ media.send(time_attribute).should be_an_instance_of(Time)
167
+ end
168
+ end
169
+ end
170
+
171
+ context "from set" do
172
+ include_context "common"
173
+ use_vcr_cassette "media/from_set"
174
+
175
+ it "should have all attributes correctly set" do
176
+ media = Flickrie.media_from_set(SET_ID, :extras => EXTRAS).
177
+ find { |media| media.id == PHOTO_ID }
178
+ test_common_attributes(media)
179
+ media.primary?.should be_true
180
+ end
181
+ end
182
+
183
+ context "public from user" do
184
+ include_context "common"
185
+ use_vcr_cassette "media/public_from_user"
186
+
187
+ it "should have all attributes correctly set" do
188
+ media = Flickrie.public_media_from_user(USER_NSID, :extras => EXTRAS).
189
+ find { |media| media.id == PHOTO_ID }
190
+ test_common_attributes(media)
191
+ test_attribute(media, :visibility)
192
+ end
193
+ end
194
+
195
+ context "search" do
196
+ include_context "common"
197
+ use_vcr_cassette "media/search"
198
+
199
+ it "should have all attributes correctly set" do
200
+ media = Flickrie.search_media(:user_id => USER_NSID, :extras => EXTRAS).
201
+ find { |media| media.id == PHOTO_ID }
202
+ test_common_attributes(media)
203
+ test_attribute(media, :visibility)
204
+ end
205
+ end
206
+
207
+ context "from contacts" do
208
+ use_vcr_cassette "media/from_contacts"
209
+
210
+ it "should have all attributes correctly set" do
211
+ params = {:include_self => 1, :single_photo => 1}
212
+ [
213
+ @flickrie.media_from_contacts(params).first,
214
+ @flickrie.public_media_from_user_contacts(USER_NSID, params).first
215
+ ].
216
+ each do |media|
217
+ media.id.should eq('7093101501')
218
+ media.secret.should eq('9337f28800')
219
+ media.server.should eq('7090')
220
+ media.farm.should eq(8)
221
+ media.owner.nsid.should eq(USER_NSID)
222
+ media.owner.username.should eq('Janko Marohnić')
223
+ media.title.should eq('IMG_0917')
224
+ test_attribute(media, :visibility)
225
+ media.media_status.should eq('ready')
226
+ end
227
+ end
228
+ end
229
+
230
+ context "get context" do
231
+ use_vcr_cassette "media/get_context"
232
+
233
+ it "should have all attributes correctly set" do
234
+ context = Flickrie.get_media_context(PHOTO_ID)
235
+ context['count'].should eq(98)
236
+ context['prevphoto'].title.should eq('IMG_0795')
237
+ context['prevphoto'].url.should_not be_empty
238
+ context['prevphoto'].faved?.should be_false
239
+ end
240
+ end
241
+
242
+ context "blank media" do
243
+ it "should have all attributes equal to nil" do
244
+ attributes = Flickrie::Media.instance_methods -
245
+ Object.instance_methods -
246
+ [:[], :get_info, :get_exif, :get_favorites]
247
+
248
+ media = Flickrie::Photo.public_new
249
+ attributes.each do |attribute|
250
+ media.send(attribute).should be_nil
251
+ end
252
+ end
253
+ end
254
+
255
+ context "get exif" do
256
+ use_vcr_cassette "media/get_exif"
257
+
258
+ it "should get exif correctly" do
259
+ [
260
+ Flickrie.get_photo_exif(PHOTO_ID),
261
+ Flickrie::Photo.public_new('id' => PHOTO_ID).get_exif
262
+ ].
263
+ each do |photo|
264
+ photo.camera.should eq('Canon PowerShot G12')
265
+ photo.exif.get('X-Resolution').should eq('180 dpi')
266
+ photo.exif.get('X-Resolution', :data => 'clean').should eq('180 dpi')
267
+ photo.exif.get('X-Resolution', :data => 'raw').should eq('180')
268
+ end
269
+ end
270
+ end
271
+ end
@@ -0,0 +1,22 @@
1
+ describe Flickrie::OAuth do
2
+ context "incorrect credentials" do
3
+ use_vcr_cassette "oauth/incorrect_credentials"
4
+
5
+ it "should raise exceptions" do
6
+ Flickrie.api_key = "foo"
7
+ Flickrie.shared_secret = "foo"
8
+
9
+ expect { Flickrie::OAuth.get_request_token }.
10
+ to raise_error(Flickrie::OAuth::Error)
11
+
12
+ Flickrie.api_key = ENV['FLICKR_API_KEY']
13
+ expect { Flickrie::OAuth.get_request_token }.
14
+ to raise_error(Flickrie::OAuth::Error)
15
+
16
+ Flickrie.shared_secret = ENV['FLICKR_SHARED_SECRET']
17
+ request_token = Flickrie::OAuth.get_request_token
18
+ expect { Flickrie::OAuth.get_access_token("foo", request_token) }.
19
+ to raise_error(Flickrie::OAuth::Error)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,137 @@
1
+ SIZES = ['Square 75', 'Thumbnail', 'Square 150', 'Small 240', 'Small 320',
2
+ 'Medium 500', 'Medium 640', 'Medium 800', 'Large 1024']
3
+
4
+ describe Flickrie::Photo do
5
+ def test_sizes(photo)
6
+ # TODO: simplify this
7
+ # non-bang versions
8
+ [
9
+ [[photo.square(75), photo.square75], ['Square 75', '75x75']],
10
+ [[photo.thumbnail], ['Thumbnail', '75x100']],
11
+ [[photo.square(150), photo.square150], ['Square 150', '150x150']],
12
+ [[photo.small(240), photo.small240], ['Small 240', '180x240']],
13
+ [[photo.small(320), photo.small320], ['Small 320', '240x320']],
14
+ [[photo.medium(500), photo.medium500], ['Medium 500', '375x500']],
15
+ [[photo.medium(640), photo.medium640], ['Medium 640', '480x640']],
16
+ [[photo.medium(800), photo.medium800], ['Medium 800', '600x800']],
17
+ [[photo.large(1024), photo.large1024], ['Large 1024', '768x1024']]
18
+ ].
19
+ each do |photos, expected_values|
20
+ flickr_size, size = expected_values
21
+ photos.each do |photo|
22
+ photo.size.should eq(flickr_size)
23
+ [photo.width, photo.height].join('x').should eq(size)
24
+ photo.source_url.should_not be_empty
25
+ end
26
+ end
27
+
28
+ # bang versions
29
+ [
30
+ [[proc { photo.square!(75) }, proc { photo.square75! }], ['Square 75', '75x75']],
31
+ [[proc { photo.thumbnail! }], ['Thumbnail', '75x100']],
32
+ [[proc { photo.square!(150) }, proc { photo.square150! }], ['Square 150', '150x150']],
33
+ [[proc { photo.small!(240) }, proc { photo.small240! }], ['Small 240', '180x240']],
34
+ [[proc { photo.small!(320) }, proc { photo.small320! }], ['Small 320', '240x320']],
35
+ [[proc { photo.medium!(500) }, proc { photo.medium500! }], ['Medium 500', '375x500']],
36
+ [[proc { photo.medium!(640) }, proc { photo.medium640! }], ['Medium 640', '480x640']],
37
+ [[proc { photo.medium!(800) }, proc { photo.medium800! }], ['Medium 800', '600x800']],
38
+ [[proc { photo.large!(1024) }, proc { photo.large1024! }], ['Large 1024', '768x1024']]
39
+ ].
40
+ each do |blocks, expected_values|
41
+ flickr_size, size = expected_values
42
+ blocks.each do |block|
43
+ result_photo = block.call
44
+ [result_photo, photo].each do |photo|
45
+ photo.size.should eq(flickr_size)
46
+ [photo.width, photo.height].join('x').should eq(size)
47
+ photo.source_url.should_not be_empty
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ context "get sizes" do
54
+ use_vcr_cassette "photo/get_sizes"
55
+
56
+ it "should have attributes correctly set" do
57
+ [
58
+ Flickrie.get_photo_sizes(PHOTO_ID),
59
+ Flickrie::Photo.public_new('id' => PHOTO_ID).get_sizes
60
+ ].
61
+ each do |photo|
62
+ photo.can_download?.should be_true
63
+ photo.can_blog?.should be_false
64
+ photo.can_print?.should be_false
65
+
66
+ test_sizes(photo)
67
+ photo.available_sizes.should eq(SIZES)
68
+ end
69
+ end
70
+ end
71
+
72
+ context "search" do
73
+ use_vcr_cassette "photo/search"
74
+
75
+ it "should have all sizes available" do
76
+ photo = Flickrie.search_photos(:user_id => USER_NSID, :extras => EXTRAS).
77
+ find { |photo| photo.id == PHOTO_ID }
78
+ photo.available_sizes.should eq(SIZES)
79
+ end
80
+ end
81
+
82
+ context "get info" do
83
+ use_vcr_cassette "photo/get_info"
84
+
85
+ it "should have all attributes correctly set" do
86
+ photo = Flickrie.get_photo_info(PHOTO_ID)
87
+ photo.rotation.should eq(90)
88
+ end
89
+ end
90
+
91
+ context "blank" do
92
+ it "should have all attributes equal to nil" do
93
+ photo = Flickrie::Photo.public_new
94
+
95
+ photo.width.should be_nil
96
+ photo.height.should be_nil
97
+ photo.source_url.should be_nil
98
+ photo.rotation.should be_nil
99
+ photo.available_sizes.should be_empty
100
+ photo.size.should be_nil
101
+
102
+ [
103
+ photo.square(75), photo.square(150), photo.thumbnail,
104
+ photo.small(240), photo.small(320), photo.medium(500),
105
+ photo.medium(640), photo.medium(800), photo.large(1024),
106
+ photo.original, photo.square75, photo.square150,
107
+ photo.small240, photo.small320, photo.medium500,
108
+ photo.medium640, photo.medium800, photo.large1024,
109
+ photo.largest
110
+ ].
111
+ each do |photo|
112
+ photo.source_url.should be_nil
113
+ photo.width.should be_nil
114
+ photo.height.should be_nil
115
+ end
116
+
117
+ [
118
+ proc { photo.square!(75) }, proc { photo.square!(150) },
119
+ proc { photo.thumbnail! }, proc { photo.small!(240) },
120
+ proc { photo.small!(320) }, proc { photo.medium!(500) },
121
+ proc { photo.medium!(640) }, proc { photo.medium!(800) },
122
+ proc { photo.large!(1024) }, proc { photo.original! },
123
+ proc { photo.square75! }, proc { photo.square150! },
124
+ proc { photo.small240! }, proc { photo.small320! },
125
+ proc { photo.medium500! }, proc { photo.medium640! },
126
+ proc { photo.medium800! }, proc { photo.large1024! },
127
+ proc { photo.largest! }
128
+ ].
129
+ each do |prok|
130
+ prok.call
131
+ photo.source_url.should be_nil
132
+ photo.width.should be_nil
133
+ photo.height.should be_nil
134
+ end
135
+ end
136
+ end
137
+ end
data/spec/set_spec.rb ADDED
@@ -0,0 +1,68 @@
1
+ # encoding: utf-8
2
+
3
+ describe Flickrie::Set do
4
+ before(:all) do
5
+ @attributes = {
6
+ :id => SET_ID,
7
+ :secret => '25bb44852b',
8
+ :server => '7049',
9
+ :farm => 8,
10
+ :title => 'Speleologija',
11
+ :description => 'Slike sa škole speleologije Velebit.',
12
+ :primary_media_id => PHOTO_ID,
13
+ :primary_photo_id => PHOTO_ID,
14
+ :primary_video_id => PHOTO_ID,
15
+ :views_count => 0,
16
+ :comments_count => 0,
17
+ :photos_count => 97,
18
+ :videos_count => 1,
19
+ :media_count => 98,
20
+ :owner => {
21
+ :nsid => USER_NSID
22
+ },
23
+ :can_comment? => false,
24
+ }
25
+ end
26
+
27
+ def test_common_attributes(set)
28
+ @attributes.keys.each do |attribute|
29
+ test_attribute(set, attribute)
30
+ end
31
+
32
+ set.photos.all? { |photo| photo.is_a?(Flickrie::Photo) }.should be_true
33
+ set.videos.all? { |video| video.is_a?(Flickrie::Video) }.should be_true
34
+ set.media.all? do |media|
35
+ media.is_a?(Flickrie::Photo) or media.is_a?(Flickrie::Video)
36
+ end.should be_true
37
+
38
+ set.created_at.should be_an_instance_of(Time)
39
+ set.updated_at.should be_an_instance_of(Time)
40
+
41
+ set.url.should_not be_empty
42
+ end
43
+
44
+ context "get info" do
45
+ use_vcr_cassette "set/get_info"
46
+
47
+ it "should have all attributes correctly set" do
48
+ [
49
+ Flickrie.get_set_info(SET_ID),
50
+ Flickrie::Set.public_new('id' => SET_ID).get_info
51
+ ].
52
+ each do |set|
53
+ test_common_attributes(set)
54
+ end
55
+ end
56
+ end
57
+
58
+ context "from user" do
59
+ use_vcr_cassette "set/from_user"
60
+
61
+ it "should have all attributes correctly set" do
62
+ set = Flickrie.sets_from_user(USER_NSID).find { |set| set.id == SET_ID }
63
+ test_common_attributes(set)
64
+ set.needs_interstitial?.should be_false
65
+ set.visibility_can_see_set?.should be_true
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,68 @@
1
+ require 'flickrie'
2
+ require 'vcr'
3
+ require 'active_support/core_ext/hash/except'
4
+ begin
5
+ require 'debugger'
6
+ rescue LoadError
7
+ end
8
+
9
+ VCR.configure do |config|
10
+ config.cassette_library_dir = 'spec/vcr_cassettes'
11
+ config.hook_into :faraday
12
+ config.default_cassette_options = {:record => :new_episodes}
13
+ end
14
+
15
+ module RSpecHelpers
16
+ def test_attribute(object, attribute, hash = nil)
17
+ expectation = hash || @attributes[attribute]
18
+ unless expectation.is_a?(Hash)
19
+ object.send(attribute).should eq(expectation)
20
+ else
21
+ iterate(object.send(attribute), expectation) do |actual, expected|
22
+ actual.should eq(expected)
23
+ end
24
+ end
25
+ end
26
+
27
+ def iterate(object, rest, &block)
28
+ rest.each do |key, value|
29
+ if value.is_a?(Hash)
30
+ iterate(object.send(key), value, &block)
31
+ else
32
+ yield [object.send(key), value]
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ RSpec.configure do |config|
39
+ config.extend VCR::RSpec::Macros
40
+ config.include RSpecHelpers
41
+ config.before(:all) do
42
+ Flickrie.api_key = ENV['FLICKR_API_KEY']
43
+ Flickrie.shared_secret = ENV['FLICKR_SHARED_SECRET']
44
+ # so that I can use the '@instance' object when I want to make authenticated API calls
45
+ @flickrie = Flickrie::Instance.new(ENV['FLICKR_ACCESS_TOKEN'], ENV['FLICKR_ACCESS_SECRET'])
46
+ end
47
+ end
48
+
49
+ PHOTO_PATH = File.join(File.expand_path(File.dirname(__FILE__)), 'files/photo.jpg').freeze
50
+ PHOTO_ID = '6946979188'.freeze
51
+ VIDEO_ID = '7093038981'.freeze
52
+ SET_ID = '72157629851991663'.freeze
53
+ USER_NSID = '67131352@N04'.freeze
54
+ EXTRAS = %w[license date_upload date_taken owner_name
55
+ icon_server original_format last_update geo tags machine_tags
56
+ o_dims views media path_alias url_sq url_q url_t url_s url_n
57
+ url_m url_z url_c url_l url_o].join(',').freeze
58
+ # for copying:
59
+ # license,date_upload,date_taken,owner_name,icon_server,original_format,last_update,geo,tags,machine_tags,o_dims,views,media,path_alias,url_sq,url_q,url_t,url_s,url_n,url_m,url_z,url_c,url_l,url_o
60
+
61
+ klasses = [Flickrie::Set, Flickrie::Photo, Flickrie::Video, Flickrie::User, Flickrie::Location]
62
+ klasses.each do |klass|
63
+ klass.instance_eval do
64
+ def public_new(*args)
65
+ new(*args)
66
+ end
67
+ end
68
+ end
data/spec/user_spec.rb ADDED
@@ -0,0 +1,56 @@
1
+ # encoding: utf-8
2
+
3
+ describe Flickrie::User do
4
+ context "get info" do
5
+ use_vcr_cassette "user/get_info"
6
+
7
+ it "should have all attributes correctly set" do
8
+ [
9
+ Flickrie.get_user_info(USER_NSID),
10
+ Flickrie::User.public_new('nsid' => USER_NSID).get_info
11
+ ].
12
+ each do |user|
13
+ user.id.should eq(USER_NSID)
14
+ user.nsid.should eq(USER_NSID)
15
+ user.username.should eq('Janko Marohnić')
16
+ user.real_name.should eq('Janko Marohnić')
17
+ user.location.should eq('Zagreb, Croatia')
18
+ user.time_zone['label'].should eq('Sarajevo, Skopje, Warsaw, Zagreb')
19
+ user.time_zone['offset'].should eq('+01:00')
20
+ description = "I'm a programmer, and I'm gonna program a badass Ruby library for Flickr."
21
+ user.description.should eq(description)
22
+
23
+ user.profile_url.should_not be_empty
24
+ user.mobile_url.should_not be_empty
25
+ user.photos_url.should_not be_empty
26
+
27
+ user.icon_server.should eq('5464')
28
+ user.icon_farm.should eq(6)
29
+ user.buddy_icon_url.should_not be_empty
30
+
31
+ user.pro?.should be_false
32
+
33
+ user.first_taken.should be_an_instance_of(Time)
34
+ user.first_uploaded.should be_an_instance_of(Time)
35
+
36
+ user.media_count.should eq(98)
37
+ end
38
+ end
39
+ end
40
+
41
+ context "find by username or email" do
42
+ use_vcr_cassette "user/find_by_username_or_email"
43
+
44
+ it "should have all attributes correctly set" do
45
+ [
46
+ Flickrie.find_user_by_username('Janko Marohnić'),
47
+ Flickrie.find_user_by_email('janko.marohnic@gmail.com')
48
+ ].
49
+ each do |user|
50
+ user.id.should eq(USER_NSID)
51
+ user.nsid.should eq(USER_NSID)
52
+ user.username.should eq('Janko Marohnić')
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,54 @@
1
+ describe Flickrie::Video do
2
+ context "get info" do
3
+ use_vcr_cassette "video/get_info"
4
+
5
+ it "should have all attributes correctly set" do
6
+ video = Flickrie.get_video_info(VIDEO_ID)
7
+
8
+ video.ready?.should be_true
9
+ video.failed?.should be_false
10
+ video.pending?.should be_false
11
+
12
+ video.duration.should eq(16)
13
+ video.width.should eq(352)
14
+ video.height.should eq(288)
15
+
16
+ video.source_url.should be_nil
17
+ video.download_url.should be_nil
18
+ video.mobile_download_url.should be_nil
19
+ end
20
+ end
21
+
22
+ context "get sizes" do
23
+ use_vcr_cassette "video/get_sizes"
24
+
25
+ it "should have all attributes correctly set" do
26
+ [
27
+ Flickrie.get_video_sizes(VIDEO_ID),
28
+ Flickrie::Video.public_new('id' => VIDEO_ID).get_sizes
29
+ ].
30
+ each do |video|
31
+ video.can_download?.should be_true
32
+ video.can_blog?.should be_false
33
+ video.can_blog?.should be_false
34
+
35
+ video.source_url.should_not be_empty
36
+ video.download_url.should_not be_empty
37
+ video.mobile_download_url.should_not be_empty
38
+ end
39
+ end
40
+ end
41
+
42
+ context "blank" do
43
+ it "should have attributes equal to nil" do
44
+ video = Flickrie::Video.public_new
45
+ [
46
+ :ready?, :failed?, :pending?, :duration, :width, :height,
47
+ :source_url, :download_url, :mobile_download_url
48
+ ].
49
+ each do |attribute|
50
+ video.send(attribute).should be_nil
51
+ end
52
+ end
53
+ end
54
+ end