red_haze 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +7 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -0
- data/config.template.yml +4 -0
- data/lib/red_haze/activity.rb +5 -0
- data/lib/red_haze/client.rb +58 -0
- data/lib/red_haze/collection.rb +16 -0
- data/lib/red_haze/comment.rb +6 -0
- data/lib/red_haze/group.rb +28 -0
- data/lib/red_haze/helpers/resource.rb +91 -0
- data/lib/red_haze/helpers.rb +8 -0
- data/lib/red_haze/me.rb +66 -0
- data/lib/red_haze/playlist.rb +6 -0
- data/lib/red_haze/request.rb +22 -0
- data/lib/red_haze/track.rb +23 -0
- data/lib/red_haze/user.rb +35 -0
- data/lib/red_haze/version.rb +3 -0
- data/lib/red_haze.rb +28 -0
- data/red_haze.gemspec +28 -0
- data/spec/fixtures/vcr_cassettes/collection_next.yml +348 -0
- data/spec/fixtures/vcr_cassettes/comment_sync.yml +56 -0
- data/spec/fixtures/vcr_cassettes/group_contributors.yml +55 -0
- data/spec/fixtures/vcr_cassettes/group_members.yml +55 -0
- data/spec/fixtures/vcr_cassettes/group_moderators.yml +55 -0
- data/spec/fixtures/vcr_cassettes/group_sync.yml +55 -0
- data/spec/fixtures/vcr_cassettes/group_users.yml +55 -0
- data/spec/fixtures/vcr_cassettes/me.yml +55 -0
- data/spec/fixtures/vcr_cassettes/me_activities.yml +429 -0
- data/spec/fixtures/vcr_cassettes/me_activities_limit.yml +127 -0
- data/spec/fixtures/vcr_cassettes/playlist.yml +60 -0
- data/spec/fixtures/vcr_cassettes/track_comments.yml +79 -0
- data/spec/fixtures/vcr_cassettes/track_favorite_get.yml +50 -0
- data/spec/fixtures/vcr_cassettes/track_favorite_put.yml +50 -0
- data/spec/fixtures/vcr_cassettes/track_favoriters.yml +172 -0
- data/spec/fixtures/vcr_cassettes/track_sync.yml +82 -0
- data/spec/fixtures/vcr_cassettes/track_unfavorite_put.yml +50 -0
- data/spec/fixtures/vcr_cassettes/user_comments.yml +89 -0
- data/spec/fixtures/vcr_cassettes/user_favorites.yml +479 -0
- data/spec/fixtures/vcr_cassettes/user_follow_put.yml +65 -0
- data/spec/fixtures/vcr_cassettes/user_followers.yml +431 -0
- data/spec/fixtures/vcr_cassettes/user_follows_.yml +104 -0
- data/spec/fixtures/vcr_cassettes/user_follows_get.yml +50 -0
- data/spec/fixtures/vcr_cassettes/user_groups.yml +66 -0
- data/spec/fixtures/vcr_cassettes/user_playlists.yml +482 -0
- data/spec/fixtures/vcr_cassettes/user_sync.yml +57 -0
- data/spec/fixtures/vcr_cassettes/user_unfollow_put.yml +54 -0
- data/spec/lib/red_haze/activity_spec.rb +18 -0
- data/spec/lib/red_haze/client_spec.rb +43 -0
- data/spec/lib/red_haze/collection_spec.rb +26 -0
- data/spec/lib/red_haze/comment_spec.rb +30 -0
- data/spec/lib/red_haze/group_spec.rb +57 -0
- data/spec/lib/red_haze/me_spec.rb +117 -0
- data/spec/lib/red_haze/playlist_spec.rb +41 -0
- data/spec/lib/red_haze/request_spec.rb +17 -0
- data/spec/lib/red_haze/track_spec.rb +96 -0
- data/spec/lib/red_haze/user_spec.rb +110 -0
- data/spec/lib/red_haze_spec.rb +13 -0
- data/spec/spec_helper.rb +45 -0
- metadata +212 -0
@@ -0,0 +1,57 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://api.soundcloud.com/users/2879548?client_id=<CLIENT_ID>
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/json
|
12
|
+
response:
|
13
|
+
status:
|
14
|
+
code: 200
|
15
|
+
message: OK
|
16
|
+
headers:
|
17
|
+
Server:
|
18
|
+
- nginx
|
19
|
+
Date:
|
20
|
+
- Fri, 29 Jun 2012 15:40:50 GMT
|
21
|
+
Content-Type:
|
22
|
+
- application/json; charset=utf-8
|
23
|
+
Connection:
|
24
|
+
- keep-alive
|
25
|
+
X-Runtime:
|
26
|
+
- '20'
|
27
|
+
Etag:
|
28
|
+
- ! '"978a91aca31d51b1abda82e9b0a07791"'
|
29
|
+
Cache-Control:
|
30
|
+
- private, max-age=0, must-revalidate
|
31
|
+
Access-Control-Allow-Methods:
|
32
|
+
- GET, PUT, POST, DELETE
|
33
|
+
Access-Control-Allow-Headers:
|
34
|
+
- Accept, Authorization, Content-Type, Origin
|
35
|
+
Access-Control-Allow-Origin:
|
36
|
+
- ! '*'
|
37
|
+
X-Cacheable:
|
38
|
+
- NO:Cache-Control=max-age=0
|
39
|
+
Content-Length:
|
40
|
+
- '639'
|
41
|
+
X-Varnish:
|
42
|
+
- '3859846790'
|
43
|
+
Age:
|
44
|
+
- '0'
|
45
|
+
Via:
|
46
|
+
- 1.1 varnish
|
47
|
+
X-Cache:
|
48
|
+
- MISS
|
49
|
+
body:
|
50
|
+
encoding: US-ASCII
|
51
|
+
string: ! '{"id":2879548,"kind":"user","permalink":"jstnw","username":"jstreet","uri":"http://api.soundcloud.com/users/2879548","permalink_url":"http://soundcloud.com/jstnw","avatar_url":"http://i1.sndcdn.com/avatars-000006763043-urg7lt-large.jpg?96679da","country":"United
|
52
|
+
States","full_name":"Justin Street","city":"San Francisco","description":"I''m
|
53
|
+
a Business Developer on SoundCloud''s API Team. ","discogs_name":null,"myspace_name":null,"website":"http://justin.st","website_title":"the
|
54
|
+
personal blog of Justin W. Street","online":true,"track_count":43,"playlist_count":5,"public_favorites_count":393,"followers_count":493,"followings_count":444}'
|
55
|
+
http_version:
|
56
|
+
recorded_at: Fri, 29 Jun 2012 15:40:53 GMT
|
57
|
+
recorded_with: VCR 2.2.0
|
@@ -0,0 +1,54 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: delete
|
5
|
+
uri: https://api.soundcloud.com/me/followings/19813607?oauth_token=<ACCESS_TOKEN>
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/json
|
12
|
+
response:
|
13
|
+
status:
|
14
|
+
code: 200
|
15
|
+
message: OK
|
16
|
+
headers:
|
17
|
+
Server:
|
18
|
+
- nginx
|
19
|
+
Date:
|
20
|
+
- Sat, 14 Jul 2012 23:59:13 GMT
|
21
|
+
Content-Type:
|
22
|
+
- application/json; charset=utf-8
|
23
|
+
Connection:
|
24
|
+
- keep-alive
|
25
|
+
X-Runtime:
|
26
|
+
- '34'
|
27
|
+
Etag:
|
28
|
+
- ! '"1dbc21fb7c7e059bce9a52d441d344eb"'
|
29
|
+
Cache-Control:
|
30
|
+
- private, max-age=0, must-revalidate
|
31
|
+
Access-Control-Allow-Methods:
|
32
|
+
- GET, PUT, POST, DELETE
|
33
|
+
Access-Control-Allow-Headers:
|
34
|
+
- Accept, Authorization, Content-Type, Origin
|
35
|
+
Access-Control-Allow-Origin:
|
36
|
+
- ! '*'
|
37
|
+
X-Cacheable:
|
38
|
+
- NO:Cache-Control=max-age=0
|
39
|
+
Content-Length:
|
40
|
+
- '21'
|
41
|
+
X-Varnish:
|
42
|
+
- '500767527'
|
43
|
+
Age:
|
44
|
+
- '0'
|
45
|
+
Via:
|
46
|
+
- 1.1 varnish
|
47
|
+
X-Cache:
|
48
|
+
- MISS
|
49
|
+
body:
|
50
|
+
encoding: US-ASCII
|
51
|
+
string: ! '{"status":"200 - OK"}'
|
52
|
+
http_version:
|
53
|
+
recorded_at: Sat, 14 Jul 2012 23:59:17 GMT
|
54
|
+
recorded_with: VCR 2.2.2
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RedHaze::Activity do
|
4
|
+
let(:raw_hash) do
|
5
|
+
setup_config(:oauth)
|
6
|
+
VCR.use_cassette('me_activities') do
|
7
|
+
RedHaze::Request.get('/me/activities/all')['collection'].sample
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:instance) { described_class.new(raw_hash) }
|
12
|
+
subject { instance }
|
13
|
+
|
14
|
+
its(:type) { should be_a String }
|
15
|
+
its(:created_at) { should be_a DateTime }
|
16
|
+
its(:origin) { subject.class.name.should =~ /RedHaze/ }
|
17
|
+
its(:tags) { should be_an Array }
|
18
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RedHaze::Client do
|
4
|
+
|
5
|
+
let(:instance) { described_class.new(client_id: 'id', client_secret: 'secret') }
|
6
|
+
|
7
|
+
describe "#initialize" do
|
8
|
+
context "with client and secret keys" do
|
9
|
+
subject { instance }
|
10
|
+
its(:client_id) { should == 'id' }
|
11
|
+
its(:client_secret) { should == 'secret' }
|
12
|
+
end
|
13
|
+
|
14
|
+
context "with only access token" do
|
15
|
+
subject { described_class.new(access_token: 'token') }
|
16
|
+
its(:access_token) { should == 'token' }
|
17
|
+
end
|
18
|
+
|
19
|
+
context "with missing keys" do
|
20
|
+
subject { described_class.new(client_secret: 'secret') }
|
21
|
+
specify do
|
22
|
+
expect { subject }.to raise_error /missing client_id/
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "#authorize_url" do
|
28
|
+
context "with right attributes" do
|
29
|
+
let(:instance_with_response_uri) do
|
30
|
+
instance.redirect_uri = 'uri'
|
31
|
+
instance
|
32
|
+
end
|
33
|
+
subject { instance_with_response_uri.authorize_url }
|
34
|
+
it { subject.should =~ /https:\/\/soundcloud\.com\/connect\?client_id=.+&redirect_uri=.+&response_type=code/ }
|
35
|
+
end
|
36
|
+
|
37
|
+
context "without right attributes" do
|
38
|
+
subject { instance.authorize_url }
|
39
|
+
specify { expect { subject }.to raise_error }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RedHaze::Collection do
|
4
|
+
# just need a good example of a collection hash
|
5
|
+
let(:raw_hash) do
|
6
|
+
setup_config(:oauth)
|
7
|
+
VCR.use_cassette('me_activities') do
|
8
|
+
RedHaze::Request.get('/me/activities/all')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:instance) { described_class.new(raw_hash) }
|
13
|
+
subject { instance }
|
14
|
+
|
15
|
+
its(:items) { should return_an_array_of_red_haze_objects }
|
16
|
+
its(:next_href) { should =~ /http/ }
|
17
|
+
its(:future_href) { should =~ /http/ }
|
18
|
+
|
19
|
+
describe "#next" do
|
20
|
+
subject do
|
21
|
+
VCR.use_cassette('collection_next') { instance.next }
|
22
|
+
end
|
23
|
+
it{ should be_a described_class }
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
|
3
|
+
describe RedHaze::Comment do
|
4
|
+
before(:all) { setup_config(:client) }
|
5
|
+
|
6
|
+
let(:instance) { described_class.new(13685794) }
|
7
|
+
|
8
|
+
describe "#initialize" do
|
9
|
+
subject { instance }
|
10
|
+
it { should be_a described_class }
|
11
|
+
its(:id) { should == 13685794 }
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#sync" do
|
15
|
+
subject do
|
16
|
+
VCR.use_cassette("comment_sync") { instance.sync }
|
17
|
+
end
|
18
|
+
|
19
|
+
it { should be_a described_class }
|
20
|
+
its(:created_at) { should be_a DateTime }
|
21
|
+
its(:user_id) { should be_a Integer }
|
22
|
+
its(:track_id) { should be_a Integer }
|
23
|
+
its(:timestamp) { should be_a Integer }
|
24
|
+
its(:body) { should be_a String }
|
25
|
+
its(:uri) { should =~ /http:\/\/api.soundcloud.com/ }
|
26
|
+
its(:user) { should be_a RedHaze::User }
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RedHaze::Group do
|
4
|
+
before(:all) { setup_config(:client) }
|
5
|
+
|
6
|
+
let(:instance) { described_class.new(83495) }
|
7
|
+
|
8
|
+
describe "#initialize" do
|
9
|
+
subject { instance }
|
10
|
+
it { should be_a described_class }
|
11
|
+
its(:id) { should == 83495 }
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#sync" do
|
15
|
+
subject do
|
16
|
+
VCR.use_cassette("group_sync") { instance.sync }
|
17
|
+
end
|
18
|
+
its(:uri) { should =~ /http:\/\/api.soundcloud.com/ }
|
19
|
+
its(:created_at) { should be_a DateTime }
|
20
|
+
its(:permalink) { should be_a String }
|
21
|
+
its(:permalink_url) { should =~ /http:\/\/soundcloud.com/ }
|
22
|
+
its(:artwork_url) { should =~ /http:\/\/.*\.(jpg|png)/ }
|
23
|
+
its(:name) { should be_a String }
|
24
|
+
its(:description) { should be_a String }
|
25
|
+
its(:short_description) { should be_a String }
|
26
|
+
its(:creator) { should be_a RedHaze::User }
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#members" do
|
30
|
+
subject do
|
31
|
+
VCR.use_cassette("group_members") { instance.members }
|
32
|
+
end
|
33
|
+
it { should return_an_array_of RedHaze::User }
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "#moderators" do
|
37
|
+
subject do
|
38
|
+
VCR.use_cassette("group_moderators") { instance.moderators }
|
39
|
+
end
|
40
|
+
it { should return_an_array_of RedHaze::User }
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "#contributors" do
|
44
|
+
subject do
|
45
|
+
VCR.use_cassette("group_contributors") { instance.contributors }
|
46
|
+
end
|
47
|
+
it { should return_an_array_of RedHaze::User }
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "#users" do
|
51
|
+
subject do
|
52
|
+
VCR.use_cassette("group_users") { instance.users }
|
53
|
+
end
|
54
|
+
it { should return_an_array_of RedHaze::User }
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RedHaze::Me do
|
4
|
+
let(:instance) { VCR.use_cassette('me') { described_class.new } }
|
5
|
+
let(:friend_id) { 19813607 }
|
6
|
+
let(:friend) { RedHaze::User.new(friend_id) }
|
7
|
+
subject { instance }
|
8
|
+
|
9
|
+
context "with oauth token " do
|
10
|
+
before(:all) { setup_config(:oauth) }
|
11
|
+
|
12
|
+
its(:id) { should == 999942 }
|
13
|
+
it { should be_a RedHaze::User }
|
14
|
+
|
15
|
+
shared_examples_for "an ambiguous id argument" do
|
16
|
+
before do
|
17
|
+
@vcr_name = "#{klass}_#{method}".sub('?','_get').sub('!','_put')
|
18
|
+
end
|
19
|
+
|
20
|
+
it "accepts an object" do
|
21
|
+
VCR.use_cassette(@vcr_name) do
|
22
|
+
instance.send(method, friend)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it "accepts an id" do
|
27
|
+
VCR.use_cassette(@vcr_name) do
|
28
|
+
instance.send(method, friend_id)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
it "fails otherwise" do
|
33
|
+
expect { instance.send(method,'something') }.to raise_error ArgumentError
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context "follow actions" do
|
38
|
+
let(:klass) { 'user' }
|
39
|
+
pending "application test"
|
40
|
+
describe "#follow!" do
|
41
|
+
let(:method) { 'follow!' }
|
42
|
+
it_behaves_like "an ambiguous id argument"
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "#unfollow!" do
|
46
|
+
let(:method) { 'unfollow!' }
|
47
|
+
it_behaves_like "an ambiguous id argument"
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "#follows?" do
|
51
|
+
let(:method) { 'follows?' }
|
52
|
+
it_behaves_like "an ambiguous id argument"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "favorite actions" do
|
57
|
+
let(:klass) { 'track' }
|
58
|
+
let(:track_id) { 8774929 }
|
59
|
+
|
60
|
+
describe "#favorite?" do
|
61
|
+
let(:method) { 'favorite?' }
|
62
|
+
subject { instance.favorite?(track_id) }
|
63
|
+
it_behaves_like "an ambiguous id argument"
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "#favorite!" do
|
67
|
+
let(:method) { 'favorite!' }
|
68
|
+
subject { instance.favorite?(track_id) }
|
69
|
+
it_behaves_like "an ambiguous id argument"
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "#unfavorite!" do
|
73
|
+
let(:method) { 'unfavorite!' }
|
74
|
+
subject { instance.unfavorite!(track_id) }
|
75
|
+
it_behaves_like "an ambiguous id argument"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "#activities" do
|
80
|
+
subject do
|
81
|
+
VCR.use_cassette("me_activities") { instance.activities }
|
82
|
+
end
|
83
|
+
it { should be_a RedHaze::Collection }
|
84
|
+
|
85
|
+
context "with limit" do
|
86
|
+
subject do
|
87
|
+
VCR.use_cassette("me_activities_limit") { instance.activities(limit: 10) }
|
88
|
+
end
|
89
|
+
its(:items) { subject.size.should == 10 }
|
90
|
+
end
|
91
|
+
|
92
|
+
context "with underscored filter" do
|
93
|
+
subject { instance.activities(filter: :tracks_affiliated) }
|
94
|
+
specify do
|
95
|
+
instance.should_receive(:get_endpoint).with("/activities/tracks/affiliated",anything)
|
96
|
+
subject
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context "with bad filter" do
|
101
|
+
subject { instance.activities(filter: :bad) }
|
102
|
+
specify do
|
103
|
+
expect { subject }.to raise_error /bad activities filter/i
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
context "without access token" do
|
111
|
+
before(:all) { setup_config(:client) }
|
112
|
+
specify do
|
113
|
+
expect { subject }.to raise_error /access_token/
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'red_haze/playlist'
|
3
|
+
|
4
|
+
describe RedHaze::Playlist do
|
5
|
+
before(:all) { setup_config(:client) }
|
6
|
+
|
7
|
+
let(:instance) { described_class.new(2161228) }
|
8
|
+
|
9
|
+
describe "#sync" do
|
10
|
+
subject { VCR.use_cassette("playlist") { instance.sync } }
|
11
|
+
its(:id) { should be_an Integer }
|
12
|
+
its(:created_at) { should be_a DateTime }
|
13
|
+
its(:user_id) { should be_an Integer }
|
14
|
+
its(:user) { should be_a RedHaze::User }
|
15
|
+
its(:title) { should be_a String }
|
16
|
+
its(:permalink) { should be_a String }
|
17
|
+
its(:permalink_url) { should be_a String }
|
18
|
+
its(:url) { should be_a String }
|
19
|
+
its(:sharing) { should be_a String }
|
20
|
+
#its(:purchase_url) { should be_a String }
|
21
|
+
#its(:artwork_url) { should be_a String }
|
22
|
+
its(:description) { should be_a String }
|
23
|
+
#its(:label) { should be_a String }
|
24
|
+
its(:duration) { should be_an Integer }
|
25
|
+
its(:streamable) { should be_boolean }
|
26
|
+
its(:downloadable) { should be_boolean }
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#shared_to_emails" do
|
31
|
+
#subject { instance.shared_to_emails }
|
32
|
+
#it { should be_an_array_of String }
|
33
|
+
pending "need token"
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "#shared_to_emails" do
|
37
|
+
#subject { instance.shared_to_emails }
|
38
|
+
#it { should be_an_array_of String }
|
39
|
+
pending "need token"
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RedHaze::Request do
|
4
|
+
|
5
|
+
context "oauth request" do
|
6
|
+
before(:all) { setup_config(:oauth) }
|
7
|
+
specify { described_class.base_uri.should == 'https://api.soundcloud.com'}
|
8
|
+
end
|
9
|
+
|
10
|
+
context "non-oauth request" do
|
11
|
+
before(:all) { setup_config(:client) }
|
12
|
+
specify { described_class.base_uri.should == 'http://api.soundcloud.com'}
|
13
|
+
end
|
14
|
+
|
15
|
+
specify { described_class.headers['Accept'].should == 'application/json' }
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RedHaze::Track do
|
4
|
+
before(:all) { setup_config(:client) }
|
5
|
+
|
6
|
+
let(:instance) { described_class.new(49518905) }
|
7
|
+
let(:synced_track) do
|
8
|
+
VCR.use_cassette('track_sync') { instance.sync }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#initialize" do
|
12
|
+
subject { instance }
|
13
|
+
specify { should be_a described_class }
|
14
|
+
its(:id) { should == 49518905 }
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "#tag_list" do
|
18
|
+
pending
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#sync" do
|
22
|
+
subject { synced_track }
|
23
|
+
|
24
|
+
its(:created_at) { should be_a DateTime }
|
25
|
+
its(:user_id) { should be_an Integer }
|
26
|
+
its(:title) { should be_a String }
|
27
|
+
its(:permalink) { should be_a String }
|
28
|
+
its(:permalink_url) { should =~ /http:\/\/soundcloud.com/ }
|
29
|
+
its(:uri) { should =~ /http:\/\/api.soundcloud.com/ }
|
30
|
+
its(:sharing) { should be_a String }
|
31
|
+
its(:purchase_url) { should =~ /http:\/\// }
|
32
|
+
its(:artwork_url) { should =~ /http:\/\/.*\.jpg/ }
|
33
|
+
its(:description) { should be_a String }
|
34
|
+
its(:duration) { should be_an Integer }
|
35
|
+
its(:genre) { should be_a String }
|
36
|
+
its(:label_name) { should be_a String }
|
37
|
+
its(:license) { should be_a String }
|
38
|
+
its(:release) { should be_a String }
|
39
|
+
its(:streamable) { should be_boolean }
|
40
|
+
its(:downloadable) { should be_boolean }
|
41
|
+
its(:state) { should be_a String }
|
42
|
+
its(:waveform_url) { should =~ /http:\/\/.*\.png/ }
|
43
|
+
its(:commentable) { should be_boolean }
|
44
|
+
its(:comment_count) { should be_an Integer }
|
45
|
+
its(:download_count) { should be_an Integer }
|
46
|
+
its(:playback_count) { should be_an Integer }
|
47
|
+
its(:favoritings_count) { should be_an Integer }
|
48
|
+
its(:original_format) { should be_a String }
|
49
|
+
its(:original_content_size) { should be_an Integer }
|
50
|
+
|
51
|
+
#no test data
|
52
|
+
#its(:label_id) { should be_nil }
|
53
|
+
#its(:release_day) { should be_nil }
|
54
|
+
#its(:release_month) { should be_nil }
|
55
|
+
#its(:release_year) { should be_nil }
|
56
|
+
#its(:track_type) { should be_nil }
|
57
|
+
#its(:bpm) { should be_nil }
|
58
|
+
#its(:isrc) { should be_nil }
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "#comments" do
|
62
|
+
subject do
|
63
|
+
VCR.use_cassette("track_comments") { instance.comments }
|
64
|
+
end
|
65
|
+
|
66
|
+
it { should return_an_array_of RedHaze::Comment }
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "#favoriters" do
|
70
|
+
subject do
|
71
|
+
VCR.use_cassette('track_favoriters') { instance.favoriters }
|
72
|
+
end
|
73
|
+
it { should return_an_array_of RedHaze::User }
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "#shared_to" do
|
77
|
+
pending "Do not have any actual data for this"
|
78
|
+
#subject do
|
79
|
+
# VCR.use_cassette('track_shared_tos') { instance.shared_to }
|
80
|
+
#end
|
81
|
+
#it { should be_an_array_of RedHaze::Track }
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "#secret_token" do
|
85
|
+
pending
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "#owner" do
|
89
|
+
subject { synced_track.owner }
|
90
|
+
it { should be_a RedHaze::User }
|
91
|
+
end
|
92
|
+
|
93
|
+
describe "#comment" do
|
94
|
+
pending
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RedHaze::User do
|
4
|
+
let(:instance) { described_class.new(2879548) }
|
5
|
+
context "without auth" do
|
6
|
+
before(:all) { setup_config(:client) }
|
7
|
+
|
8
|
+
|
9
|
+
describe "#initialize" do
|
10
|
+
subject { instance }
|
11
|
+
specify { should be_a described_class }
|
12
|
+
its(:id) { should be_an Integer }
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#sync" do
|
16
|
+
subject do
|
17
|
+
VCR.use_cassette('user_sync') { instance.sync }
|
18
|
+
end
|
19
|
+
it { should be_a described_class }
|
20
|
+
its(:permalink) { should be_a String }
|
21
|
+
its(:username) { should be_a String }
|
22
|
+
its(:uri) { should =~ /http:\/\/api.soundcloud.com\/*/ }
|
23
|
+
its(:permalink_url) { should =~ /http:\/\/soundcloud.com\/*/ }
|
24
|
+
its(:avatar_url) { should =~ /http:\/\/.*.jpg/ }
|
25
|
+
its(:country) { should be_a String }
|
26
|
+
its(:full_name) { should be_a String }
|
27
|
+
its(:city) { should be_a String }
|
28
|
+
its(:description) { should be_a String }
|
29
|
+
its(:website) { should be_a String }
|
30
|
+
its(:online) { should be_boolean }
|
31
|
+
its(:track_count) { should be_an Integer }
|
32
|
+
its(:playlist_count) { should be_an Integer }
|
33
|
+
its(:followers_count) { should be_an Integer }
|
34
|
+
its(:followings_count) { should be_an Integer }
|
35
|
+
its(:public_favorites_count) { should be_an Integer }
|
36
|
+
its(:website_title) { should be_a String }
|
37
|
+
|
38
|
+
# no real data for these
|
39
|
+
its(:discogs_name) { should be_nil }
|
40
|
+
its(:myspace_name) { should be_nil }
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "#playlists" do
|
44
|
+
subject do
|
45
|
+
VCR.use_cassette('user_playlists') { instance.playlists }
|
46
|
+
end
|
47
|
+
it { should return_an_array_of RedHaze::Playlist }
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "#followings" do
|
51
|
+
context "with arg" do
|
52
|
+
context "valid followings user id" do
|
53
|
+
subject do
|
54
|
+
VCR.use_cassette("user_followings_valid_id") do
|
55
|
+
instance.followings(903649)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
#it { should be_an_array_of RedHaze::User }
|
59
|
+
pending "need authorization"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context "without arg" do
|
64
|
+
subject do
|
65
|
+
VCR.use_cassette("user_followings") { instance.followings }
|
66
|
+
end
|
67
|
+
it { return_an_array_of return_an_array_of RedHaze::User }
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe "#followers" do
|
72
|
+
subject do
|
73
|
+
VCR.use_cassette('user_followers') { instance.followers }
|
74
|
+
end
|
75
|
+
it { should return_an_array_of RedHaze::User }
|
76
|
+
end
|
77
|
+
|
78
|
+
describe "#comments" do
|
79
|
+
subject do
|
80
|
+
VCR.use_cassette('user_comments') { instance.comments }
|
81
|
+
end
|
82
|
+
it { should return_an_array_of RedHaze::Comment }
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "#groups" do
|
86
|
+
subject do
|
87
|
+
VCR.use_cassette('user_groups') { instance.groups }
|
88
|
+
end
|
89
|
+
it { should return_an_array_of RedHaze::Group }
|
90
|
+
end
|
91
|
+
|
92
|
+
describe "#web_profiles" do
|
93
|
+
pending
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "#favorites" do
|
97
|
+
context "with arg" do
|
98
|
+
pending "need authentication"
|
99
|
+
end
|
100
|
+
context "without arg" do
|
101
|
+
subject do
|
102
|
+
VCR.use_cassette("user_favorites") { instance.favorites }
|
103
|
+
end
|
104
|
+
|
105
|
+
it { should return_an_array_of RedHaze::Track }
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RedHaze do
|
4
|
+
describe ".configure" do
|
5
|
+
subject { described_class.configure(client_id: 'id', client_secret: 'secret') }
|
6
|
+
its(:client) { should be_a RedHaze::Client }
|
7
|
+
end
|
8
|
+
|
9
|
+
describe ".configure_from_file" do
|
10
|
+
subject { described_class.configure_from_file 'config.template.yml' }
|
11
|
+
its(:client) { should be_a RedHaze::Client }
|
12
|
+
end
|
13
|
+
end
|