dribbble 0.0.4 → 1.0.0.beta1

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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +7 -1
  3. data/Guardfile +0 -5
  4. data/dribbble.gemspec +0 -3
  5. data/lib/dribbble/attachment.rb +7 -0
  6. data/lib/dribbble/base.rb +64 -5
  7. data/lib/dribbble/bucket.rb +31 -0
  8. data/lib/dribbble/client.rb +0 -7
  9. data/lib/dribbble/comment.rb +4 -0
  10. data/lib/dribbble/like.rb +7 -0
  11. data/lib/dribbble/project.rb +11 -0
  12. data/lib/dribbble/shot.rb +62 -0
  13. data/lib/dribbble/team.rb +4 -0
  14. data/lib/dribbble/user.rb +47 -6
  15. data/lib/dribbble/utils/creatable.rb +33 -0
  16. data/lib/dribbble/utils/deletable.rb +21 -0
  17. data/lib/dribbble/utils/findable.rb +17 -0
  18. data/lib/dribbble/utils/has_children.rb +33 -0
  19. data/lib/dribbble/utils/updatable.rb +24 -0
  20. data/lib/dribbble/utils.rb +38 -7
  21. data/lib/dribbble/version.rb +1 -1
  22. data/spec/lib/dribbble/base_spec.rb +161 -4
  23. data/spec/lib/dribbble/bucket_spec.rb +136 -0
  24. data/spec/lib/dribbble/client_spec.rb +2 -23
  25. data/spec/lib/dribbble/project_spec.rb +45 -0
  26. data/spec/lib/dribbble/shot_spec.rb +254 -0
  27. data/spec/lib/dribbble/user_spec.rb +173 -23
  28. data/spec/spec_helper.rb +14 -17
  29. data/spec/support/dribbble.rb +159 -20
  30. data/spec/support/fixtures/attachment_success.json +9 -0
  31. data/spec/support/fixtures/attachments_success.json +11 -0
  32. data/spec/support/fixtures/bucket_created.json +8 -0
  33. data/spec/support/fixtures/bucket_success.json +8 -0
  34. data/spec/support/fixtures/bucket_updated.json +8 -0
  35. data/spec/support/fixtures/comments_success.json +37 -0
  36. data/spec/support/fixtures/current_user_success.json +25 -0
  37. data/spec/support/fixtures/followers_success.json +33 -0
  38. data/spec/support/fixtures/following_success.json +33 -0
  39. data/spec/support/fixtures/project_success.json +8 -0
  40. data/spec/support/fixtures/projects_success.json +10 -0
  41. data/spec/support/fixtures/shot_likes_success.json +33 -0
  42. data/spec/support/fixtures/shot_success.json +85 -0
  43. data/spec/support/fixtures/shot_updated.json +85 -0
  44. data/spec/support/fixtures/teams_success.json +28 -0
  45. data/spec/support/fixtures/user_likes_success.json +91 -0
  46. metadata +52 -48
  47. data/spec/factories.rb +0 -2
@@ -5,9 +5,9 @@ describe Dribbble::Client do
5
5
  @base = Dribbble::Base.new 'valid_token', {}
6
6
  end
7
7
 
8
- describe 'on #full_url' do
8
+ describe 'on #full_url_with_default_params' do
9
9
  describe 'without params' do
10
- subject { @base.full_url '/shots' }
10
+ subject { @base.full_url_with_default_params '/shots' }
11
11
 
12
12
  it 'return a valid url' do
13
13
  expect(subject).to eq('https://api.dribbble.com/v1/shots?page=1&per_page=100')
@@ -15,7 +15,7 @@ describe Dribbble::Client do
15
15
  end
16
16
 
17
17
  describe 'with default params overrided' do
18
- subject { @base.full_url '/shots', page: 2, per_page: 10 }
18
+ subject { @base.full_url_with_default_params '/shots', page: 2, per_page: 10 }
19
19
 
20
20
  it 'return a valid url' do
21
21
  expect(subject).to eq('https://api.dribbble.com/v1/shots?page=2&per_page=10')
@@ -23,11 +23,168 @@ describe Dribbble::Client do
23
23
  end
24
24
 
25
25
  describe 'with extra params' do
26
- subject { @base.full_url '/shots', params1: 'custom' }
26
+ subject { @base.full_url_with_default_params '/shots', params1: 'custom' }
27
27
 
28
28
  it 'return a valid url' do
29
29
  expect(subject).to eq('https://api.dribbble.com/v1/shots?page=1&per_page=100&params1=custom')
30
30
  end
31
31
  end
32
32
  end
33
+
34
+ describe 'on #full_url' do
35
+ describe 'without params' do
36
+ subject { @base.full_url '/shots' }
37
+
38
+ it 'return a valid url' do
39
+ expect(subject).to eq('https://api.dribbble.com/v1/shots?')
40
+ end
41
+ end
42
+
43
+ describe 'with params' do
44
+ subject { @base.full_url '/shots', custom: 1 }
45
+
46
+ it 'return a valid url' do
47
+ expect(subject).to eq('https://api.dribbble.com/v1/shots?custom=1')
48
+ end
49
+ end
50
+ end
51
+
52
+ describe 'on #get_bucket' do
53
+ subject do
54
+ stub_dribbble :get, '/buckets/2754', DribbbleAPI::BucketSuccess
55
+ @base.get_bucket 2754
56
+ end
57
+
58
+ it 'return a bucket' do
59
+ expect(subject).to be_a Dribbble::Bucket
60
+ expect(subject.id).to eq(2754)
61
+ end
62
+ end
63
+
64
+ describe 'on #get_buckets' do
65
+ subject do
66
+ stub_dribbble :get, '/user/buckets', DribbbleAPI::BucketsSuccess
67
+ @base.get_buckets
68
+ end
69
+
70
+ it 'return buckets' do
71
+ expect(subject.first).to be_a Dribbble::Bucket
72
+ end
73
+ end
74
+
75
+ describe 'on #get_followers' do
76
+ subject do
77
+ stub_dribbble :get, '/user/followers', DribbbleAPI::FollowersSuccess
78
+ @base.get_followers
79
+ end
80
+
81
+ it 'return users' do
82
+ expect(subject.first).to be_a Dribbble::User
83
+ end
84
+ end
85
+
86
+ describe 'on #get_likes' do
87
+ subject do
88
+ stub_dribbble :get, '/user/likes', DribbbleAPI::UserLikesSuccess
89
+ @base.get_likes
90
+ end
91
+
92
+ it 'return shots' do
93
+ expect(subject.first).to be_a Dribbble::Shot
94
+ end
95
+ end
96
+
97
+ describe 'on #get_project' do
98
+ subject do
99
+ stub_dribbble :get, '/projects/3', DribbbleAPI::ProjectSuccess
100
+ @base.get_project 3
101
+ end
102
+
103
+ it 'return a project' do
104
+ expect(subject).to be_a Dribbble::Project
105
+ expect(subject.id).to eq(3)
106
+ end
107
+ end
108
+
109
+ describe 'on #get_projects' do
110
+ subject do
111
+ stub_dribbble :get, '/user/projects', DribbbleAPI::ProjectsSuccess
112
+ @base.get_projects
113
+ end
114
+
115
+ it 'return projects' do
116
+ expect(subject.first).to be_a Dribbble::Project
117
+ end
118
+ end
119
+
120
+ describe 'on #get_shot' do
121
+ subject do
122
+ stub_dribbble :get, '/shots/471756', DribbbleAPI::ShotSuccess
123
+ @base.get_shot 471_756
124
+ end
125
+
126
+ it 'return a shot' do
127
+ expect(subject).to be_a Dribbble::Shot
128
+ expect(subject.id).to eq(471_756)
129
+ end
130
+ end
131
+
132
+ describe 'on #get_shots' do
133
+ subject do
134
+ stub_dribbble :get, '/user/shots', DribbbleAPI::ShotsSuccess
135
+ @base.get_shots
136
+ end
137
+
138
+ it 'return shots' do
139
+ expect(subject.first).to be_a Dribbble::Shot
140
+ end
141
+ end
142
+
143
+ describe 'on #get_following_shots' do
144
+ subject do
145
+ stub_dribbble :get, '/user/following/shots', DribbbleAPI::ShotsSuccess
146
+ @base.get_following_shots
147
+ end
148
+
149
+ it 'return shots' do
150
+ expect(subject.first).to be_a Dribbble::Shot
151
+ end
152
+ end
153
+
154
+ describe 'on #get_teams' do
155
+ subject do
156
+ stub_dribbble :get, '/user/teams', DribbbleAPI::TeamsSuccess
157
+ @base.get_teams
158
+ end
159
+
160
+ it 'return teams' do
161
+ expect(subject.first).to be_a Dribbble::Team
162
+ end
163
+ end
164
+
165
+ describe 'on #get_user' do
166
+ describe 'without id' do
167
+ subject do
168
+ stub_dribbble :get, '/user', DribbbleAPI::CurrentUserSuccess
169
+ @base.get_user
170
+ end
171
+
172
+ it 'return current user' do
173
+ expect(subject).to be_a Dribbble::User
174
+ expect(subject.id).to eq(8_008_135)
175
+ end
176
+ end
177
+
178
+ describe 'with id' do
179
+ subject do
180
+ stub_dribbble :get, '/users/483195', DribbbleAPI::UserSuccess
181
+ @base.get_user 483_195
182
+ end
183
+
184
+ it 'return current user' do
185
+ expect(subject).to be_a Dribbble::User
186
+ expect(subject.id).to eq(483_195)
187
+ end
188
+ end
189
+ end
33
190
  end
@@ -0,0 +1,136 @@
1
+ require 'spec_helper'
2
+
3
+ RAW_BUCKET = data_from_json 'bucket_success.json'
4
+
5
+ describe Dribbble::Bucket do
6
+ describe 'on instance' do
7
+ before :all do
8
+ @bucket = Dribbble::Bucket.new 'valid_token', RAW_BUCKET
9
+ end
10
+
11
+ describe 'after initialization' do
12
+ RAW_BUCKET.each do |field, value|
13
+ it "respond to #{field}" do
14
+ expect(@bucket.send field).to eq(value)
15
+ end
16
+ end
17
+ end
18
+
19
+ describe 'on #update' do
20
+ subject do
21
+ stub_dribbble :put, '/buckets/2754', DribbbleAPI::BucketUpdated
22
+ new_bucket = {
23
+ name: 'Bucket title',
24
+ description: 'Bucket description'
25
+ }
26
+ @bucket.update new_bucket
27
+ end
28
+
29
+ it 'update bucket' do
30
+ expect(subject.name).to eq('Bucket title')
31
+ end
32
+ end
33
+
34
+ describe 'on #delete' do
35
+ subject do
36
+ stub_dribbble :delete, '/buckets/2754', DribbbleAPI::BucketDeleted
37
+ @bucket.delete
38
+ end
39
+
40
+ it 'return true' do
41
+ expect(subject).to eq(true)
42
+ end
43
+ end
44
+
45
+ describe 'on #shots' do
46
+ subject do
47
+ stub_dribbble :get, '/bucket/2754/shots', DribbbleAPI::ShotsSuccess
48
+ @bucket.shots
49
+ end
50
+
51
+ it 'responds with shots' do
52
+ expect(subject.size).to eq 2
53
+ expect(subject.first).to be_a Dribbble::Shot
54
+ end
55
+ end
56
+
57
+ describe 'on #add_shot' do
58
+ subject do
59
+ stub_dribbble :put, '/buckets/2754/shots', DribbbleAPI::NoContent
60
+ @bucket.add_shot '471756'
61
+ end
62
+
63
+ it 'add shot' do
64
+ expect(subject).to eq(true)
65
+ end
66
+ end
67
+
68
+ describe 'on #remove_shot' do
69
+ subject do
70
+ stub_dribbble :delete, '/buckets/2754/shots?shot_id=471756', DribbbleAPI::NoContent
71
+ @bucket.remove_shot '471756'
72
+ end
73
+
74
+ it 'remove shot' do
75
+ expect(subject).to eq(true)
76
+ end
77
+ end
78
+ end
79
+
80
+ describe 'on class' do
81
+ describe 'on #create' do
82
+ subject do
83
+ stub_dribbble :post, '/buckets', DribbbleAPI::BucketCreated
84
+ bucket = {
85
+ name: 'Bucket title',
86
+ description: 'Bucket description'
87
+ }
88
+ Dribbble::Bucket.create 'valid_token', bucket
89
+ end
90
+
91
+ it 'create the shot' do
92
+ expect(subject).to be_a Dribbble::Bucket
93
+ end
94
+ end
95
+
96
+ describe 'on #update' do
97
+ subject do
98
+ stub_dribbble :get, '/buckets/2754', DribbbleAPI::BucketSuccess
99
+ stub_dribbble :put, '/buckets/2754', DribbbleAPI::BucketUpdated
100
+ bucket = {
101
+ name: 'Bucket title',
102
+ description: 'Bucket description'
103
+ }
104
+ Dribbble::Bucket.update 'valid_token', 2754, bucket
105
+ end
106
+
107
+ it 'update bucket' do
108
+ expect(subject.name).to eq('Bucket title')
109
+ end
110
+ end
111
+
112
+ describe 'on #delete' do
113
+ subject do
114
+ stub_dribbble :get, '/buckets/2754', DribbbleAPI::BucketSuccess
115
+ stub_dribbble :delete, '/buckets/2754', DribbbleAPI::BucketDeleted
116
+ Dribbble::Bucket.delete 'valid_token', 2754
117
+ end
118
+
119
+ it 'return true' do
120
+ expect(subject).to eq(true)
121
+ end
122
+ end
123
+
124
+ describe 'on #find' do
125
+ subject do
126
+ stub_dribbble :get, '/buckets/2754', DribbbleAPI::BucketSuccess
127
+ Dribbble::Bucket.find 'valid_token', 2754
128
+ end
129
+
130
+ it 'return a bucket' do
131
+ expect(subject).to be_a Dribbble::Bucket
132
+ expect(subject.id).to eq(2754)
133
+ end
134
+ end
135
+ end
136
+ end
@@ -12,7 +12,7 @@ describe Dribbble::Client do
12
12
  describe 'on #user' do
13
13
  describe 'with an invalid token' do
14
14
  subject do
15
- stub_dribbble_with DribbbleAPI::Unauthorized
15
+ stub_dribbble :get, '/user', DribbbleAPI::Unauthorized
16
16
  Dribbble::Client.new(token: 'fake_invalid_token')
17
17
  end
18
18
 
@@ -25,7 +25,7 @@ describe Dribbble::Client do
25
25
 
26
26
  describe 'with a valid token' do
27
27
  subject do
28
- stub_dribbble_with DribbbleAPI::UserSuccess
28
+ stub_dribbble :get, '/user', DribbbleAPI::UserSuccess
29
29
  Dribbble::Client.new(token: 'valid_token')
30
30
  end
31
31
 
@@ -35,25 +35,4 @@ describe Dribbble::Client do
35
35
  end
36
36
  end
37
37
  end
38
-
39
- describe 'on #create_shot' do
40
- before :all do
41
- stub_dribbble_with DribbbleAPI::Created
42
- @shot = {
43
- title: 'Shot title',
44
- desciption: 'Shot description',
45
- image: File.new("#{Dir.pwd}/spec/support/fixtures/image.jpg", 'rb'),
46
- tags: %w(tag1 tag2)
47
- }
48
- @client = Dribbble::Client.new(token: 'valid_token')
49
- end
50
-
51
- subject do
52
- @client.create_shot(@shot)
53
- end
54
-
55
- it 'create the shot' do
56
- expect(subject.code).to eq(202)
57
- end
58
- end
59
38
  end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ RAW_PROJECT = data_from_json 'project_success.json'
4
+
5
+ describe Dribbble::Project do
6
+ describe 'on instance' do
7
+ before :all do
8
+ @project = Dribbble::Project.new 'valid_token', RAW_PROJECT
9
+ end
10
+
11
+ describe 'after initialization' do
12
+ RAW_PROJECT.each do |field, value|
13
+ it "respond to #{field}" do
14
+ expect(@project.send field).to eq(value)
15
+ end
16
+ end
17
+ end
18
+
19
+ describe 'on #shots' do
20
+ subject do
21
+ stub_dribbble :get, '/projects/3/shots', DribbbleAPI::ShotsSuccess
22
+ @project.shots
23
+ end
24
+
25
+ it 'responds with shots' do
26
+ expect(subject.size).to eq 2
27
+ expect(subject.first).to be_a Dribbble::Shot
28
+ end
29
+ end
30
+ end
31
+
32
+ describe 'on class' do
33
+ describe 'on #find' do
34
+ subject do
35
+ stub_dribbble :get, '/projects/3', DribbbleAPI::ProjectSuccess
36
+ Dribbble::Project.find 'valid_token', 3
37
+ end
38
+
39
+ it 'return a project' do
40
+ expect(subject).to be_a Dribbble::Project
41
+ expect(subject.id).to eq(3)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,254 @@
1
+ require 'spec_helper'
2
+
3
+ RAW_SHOT = data_from_json 'shot_success.json'
4
+
5
+ describe Dribbble::Shot do
6
+ describe 'on instance' do
7
+ before :all do
8
+ @shot = Dribbble::Shot.new 'valid_token', RAW_SHOT
9
+ end
10
+
11
+ describe 'after initialization' do
12
+ RAW_SHOT.each do |field, value|
13
+ it "respond to #{field}" do
14
+ expect(@shot.send field).to eq(value)
15
+ end
16
+ end
17
+ end
18
+
19
+ describe 'on #update' do
20
+ subject do
21
+ stub_dribbble :put, '/shots/471756', DribbbleAPI::ShotUpdated
22
+ new_shot = {
23
+ title: 'Shot title',
24
+ description: 'Shot description'
25
+ }
26
+ @shot.update new_shot
27
+ end
28
+
29
+ it 'update shot' do
30
+ expect(subject.title).to eq('Shot title')
31
+ end
32
+ end
33
+
34
+ describe 'on #delete' do
35
+ subject do
36
+ stub_dribbble :delete, '/shots/471756', DribbbleAPI::ShotDeleted
37
+ @shot.delete
38
+ end
39
+
40
+ it 'return true' do
41
+ expect(subject).to eq(true)
42
+ end
43
+ end
44
+
45
+ describe 'on #attachments' do
46
+ describe 'all' do
47
+ subject do
48
+ stub_dribbble :get, '/shots/471756/attachments', DribbbleAPI::AttachmentsSuccess
49
+ @shot.attachments
50
+ end
51
+
52
+ it 'return a shot' do
53
+ expect(subject.first).to be_a Dribbble::Attachment
54
+ end
55
+ end
56
+
57
+ describe 'create' do
58
+ subject do
59
+ stub_dribbble :post, '/shots/471756/attachments', DribbbleAPI::Accepted
60
+ @shot.create_attachment
61
+ end
62
+
63
+ it 'works' do
64
+ expect(subject).to be_truthy
65
+ end
66
+ end
67
+
68
+ describe 'find' do
69
+ subject do
70
+ stub_dribbble :get, '/shots/471756/attachments/206165', DribbbleAPI::AttachmentSuccess
71
+ @shot.find_attachment 206_165
72
+ end
73
+
74
+ it 'return an attachment' do
75
+ expect(subject).to be_a Dribbble::Attachment
76
+ expect(subject.id).to eq(206_165)
77
+ end
78
+ end
79
+ end
80
+
81
+ describe 'on #buckets' do
82
+ subject do
83
+ stub_dribbble :get, '/shots/471756/buckets', DribbbleAPI::BucketsSuccess
84
+ @shot.buckets
85
+ end
86
+
87
+ it 'return a shot' do
88
+ expect(subject.first).to be_a Dribbble::Bucket
89
+ end
90
+ end
91
+
92
+ describe 'on #comments' do
93
+ subject do
94
+ stub_dribbble :get, '/shots/471756/comments', DribbbleAPI::CommentsSuccess
95
+ @shot.comments
96
+ end
97
+
98
+ it 'return a shot' do
99
+ expect(subject.first).to be_a Dribbble::Comment
100
+ end
101
+ end
102
+
103
+ describe 'on #likes' do
104
+ subject do
105
+ stub_dribbble :get, '/shots/471756/likes', DribbbleAPI::ShotLikesSuccess
106
+ @shot.likes
107
+ end
108
+
109
+ it 'return a user' do
110
+ expect(subject.first).to be_a Dribbble::Like
111
+ expect(subject.first.user).to be_a Dribbble::User
112
+ end
113
+ end
114
+
115
+ describe 'on #like?' do
116
+ describe 'on a not liked shot' do
117
+ subject do
118
+ stub_dribbble :get, '/shots/471756/like', DribbbleAPI::ShotLikeNotFound
119
+ @shot.like?
120
+ end
121
+
122
+ it 'return a user' do
123
+ expect(subject).to be_falsy
124
+ end
125
+ end
126
+
127
+ describe 'on a liked shot' do
128
+ subject do
129
+ stub_dribbble :get, '/shots/471756/like', DribbbleAPI::ShotLikeSuccess
130
+ @shot.like?
131
+ end
132
+
133
+ it 'return a user' do
134
+ expect(subject).to be_truthy
135
+ end
136
+ end
137
+ end
138
+
139
+ describe 'on #like!' do
140
+ subject do
141
+ stub_dribbble :post, '/shots/471756/like', DribbbleAPI::ShotLikeCreated
142
+ @shot.like!
143
+ end
144
+
145
+ it 'return true' do
146
+ expect(subject).to be_truthy
147
+ end
148
+ end
149
+
150
+ describe 'on #unlike!' do
151
+ subject do
152
+ stub_dribbble :delete, '/shots/471756/like', DribbbleAPI::ShotLikeDeleted
153
+ @shot.unlike!
154
+ end
155
+
156
+ it 'return true' do
157
+ expect(subject).to be_truthy
158
+ end
159
+ end
160
+
161
+ describe 'on #projects' do
162
+ subject do
163
+ stub_dribbble :get, '/shots/471756/projects', DribbbleAPI::ProjectsSuccess
164
+ @shot.projects
165
+ end
166
+
167
+ it 'return a list of project' do
168
+ expect(subject.first).to be_a Dribbble::Project
169
+ end
170
+ end
171
+
172
+ describe 'on #rebounds' do
173
+ subject do
174
+ stub_dribbble :get, '/shots/471756/rebounds', DribbbleAPI::ShotsSuccess
175
+ @shot.rebounds
176
+ end
177
+
178
+ it 'return a list of shots' do
179
+ expect(subject.first).to be_a Dribbble::Shot
180
+ end
181
+ end
182
+ end
183
+
184
+ describe 'on class' do
185
+ describe 'on #create' do
186
+ subject do
187
+ stub_dribbble :post, '/shots', DribbbleAPI::ShotAccepted
188
+ shot = {
189
+ title: 'Shot title',
190
+ desciption: 'Shot description',
191
+ image: File.new("#{Dir.pwd}/spec/support/fixtures/image.jpg", 'rb'),
192
+ tags: %w(tag1 tag2)
193
+ }
194
+ Dribbble::Shot.create 'valid_token', shot
195
+ end
196
+
197
+ it 'create the shot' do
198
+ expect(subject).to be_truthy
199
+ expect(subject).to eq('471756')
200
+ end
201
+ end
202
+
203
+ describe 'on #update' do
204
+ subject do
205
+ stub_dribbble :get, '/shots/471756', DribbbleAPI::ShotSuccess
206
+ stub_dribbble :put, '/shots/471756', DribbbleAPI::ShotUpdated
207
+ bucket = {
208
+ name: 'Shot title',
209
+ description: 'Shot description'
210
+ }
211
+ Dribbble::Shot.update 'valid_token', 471_756, bucket
212
+ end
213
+
214
+ it 'update bucket' do
215
+ expect(subject.title).to eq('Shot title')
216
+ end
217
+ end
218
+
219
+ describe 'on #delete' do
220
+ subject do
221
+ stub_dribbble :get, '/shots/471756', DribbbleAPI::ShotSuccess
222
+ stub_dribbble :delete, '/shots/471756', DribbbleAPI::ShotDeleted
223
+ Dribbble::Shot.delete 'valid_token', 471_756
224
+ end
225
+
226
+ it 'return true' do
227
+ expect(subject).to eq(true)
228
+ end
229
+ end
230
+
231
+ describe 'on #find' do
232
+ subject do
233
+ stub_dribbble :get, '/shots/471756', DribbbleAPI::ShotSuccess
234
+ Dribbble::Shot.find 'valid_token', 471_756
235
+ end
236
+
237
+ it 'return a shot' do
238
+ expect(subject).to be_a Dribbble::Shot
239
+ expect(subject.id).to eq(471_756)
240
+ end
241
+ end
242
+
243
+ describe 'on #all' do
244
+ subject do
245
+ stub_dribbble :get, '/shots', DribbbleAPI::ShotsSuccess
246
+ Dribbble::Shot.all 'valid_token'
247
+ end
248
+
249
+ it 'return a shot' do
250
+ expect(subject.first).to be_a Dribbble::Shot
251
+ end
252
+ end
253
+ end
254
+ end