hallon 0.8.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +2 -0
- data/CHANGELOG +43 -0
- data/Gemfile +2 -0
- data/README.markdown +21 -13
- data/Rakefile +84 -23
- data/dev/login.rb +16 -0
- data/examples/adding_tracks_to_playlist.rb +49 -0
- data/examples/logging_in.rb +1 -6
- data/examples/show_published_playlists_of_user.rb +9 -19
- data/hallon.gemspec +1 -1
- data/lib/hallon.rb +3 -2
- data/lib/hallon/album.rb +55 -41
- data/lib/hallon/album_browse.rb +41 -37
- data/lib/hallon/artist.rb +30 -21
- data/lib/hallon/artist_browse.rb +59 -41
- data/lib/hallon/base.rb +68 -5
- data/lib/hallon/enumerator.rb +1 -0
- data/lib/hallon/error.rb +3 -0
- data/lib/hallon/ext/spotify.rb +169 -36
- data/lib/hallon/image.rb +30 -44
- data/lib/hallon/link.rb +29 -43
- data/lib/hallon/linkable.rb +68 -20
- data/lib/hallon/observable.rb +0 -1
- data/lib/hallon/player.rb +21 -7
- data/lib/hallon/playlist.rb +291 -0
- data/lib/hallon/playlist_container.rb +27 -0
- data/lib/hallon/search.rb +52 -45
- data/lib/hallon/session.rb +129 -81
- data/lib/hallon/toplist.rb +37 -19
- data/lib/hallon/track.rb +68 -45
- data/lib/hallon/user.rb +69 -33
- data/lib/hallon/version.rb +1 -1
- data/spec/hallon/album_browse_spec.rb +15 -9
- data/spec/hallon/album_spec.rb +15 -15
- data/spec/hallon/artist_browse_spec.rb +28 -9
- data/spec/hallon/artist_spec.rb +30 -14
- data/spec/hallon/enumerator_spec.rb +0 -1
- data/spec/hallon/hallon_spec.rb +20 -1
- data/spec/hallon/image_spec.rb +18 -41
- data/spec/hallon/link_spec.rb +10 -12
- data/spec/hallon/linkable_spec.rb +37 -18
- data/spec/hallon/player_spec.rb +8 -0
- data/spec/hallon/playlist_container_spec.rb +75 -0
- data/spec/hallon/playlist_spec.rb +204 -0
- data/spec/hallon/search_spec.rb +19 -16
- data/spec/hallon/session_spec.rb +61 -29
- data/spec/hallon/spotify_spec.rb +30 -0
- data/spec/hallon/toplist_spec.rb +22 -14
- data/spec/hallon/track_spec.rb +62 -21
- data/spec/hallon/user_spec.rb +47 -36
- data/spec/mockspotify.rb +35 -10
- data/spec/mockspotify/mockspotify_spec.rb +22 -0
- data/spec/spec_helper.rb +7 -3
- data/spec/support/common_objects.rb +91 -16
- data/spec/support/shared_for_linkable_objects.rb +39 -0
- metadata +30 -20
- data/Termfile +0 -7
- data/lib/hallon/synchronizable.rb +0 -32
- data/spec/hallon/synchronizable_spec.rb +0 -19
@@ -0,0 +1,30 @@
|
|
1
|
+
describe Spotify do
|
2
|
+
describe "a wrapped function" do
|
3
|
+
let(:null_pointer) { FFI::Pointer.new(0) }
|
4
|
+
subject do
|
5
|
+
Spotify.should_receive(:session_user).and_return(null_pointer)
|
6
|
+
Spotify.session_user!(session)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should return a Spotify::Pointer" do
|
10
|
+
subject.should be_a Spotify::Pointer
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should not add ref when the result is nil" do
|
14
|
+
Spotify.should_not_receive(:user_add_ref)
|
15
|
+
subject.should be_null
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "garbage collection" do
|
20
|
+
let(:my_pointer) { FFI::Pointer.new(1) }
|
21
|
+
|
22
|
+
it "should work" do
|
23
|
+
# GC tests are a bit funky, but as long as we garbage_release at least once, then
|
24
|
+
# we can assume our GC works properly, but up the stakes just for the sake of it
|
25
|
+
Spotify.should_receive(:garbage_release).with(my_pointer).at_least(3).times
|
26
|
+
5.times { Spotify::Pointer.new(my_pointer, :garbage, false) }
|
27
|
+
5.times { GC.start; sleep 0.1 }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/spec/hallon/toplist_spec.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
describe Hallon::Toplist do
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
Hallon::Toplist.new(:artists)
|
6
|
-
end
|
2
|
+
let(:toplist) do
|
3
|
+
Spotify.registry_add 'spotify:toplist:artists:everywhere', mock_toplistbrowse
|
4
|
+
mock_session { Hallon::Toplist.new(:artists) }
|
7
5
|
end
|
8
6
|
|
7
|
+
subject { toplist }
|
8
|
+
|
9
9
|
it { should be_a Hallon::Observable }
|
10
10
|
it { should be_loaded }
|
11
|
-
its(:
|
11
|
+
its(:status) { should eq :ok }
|
12
12
|
|
13
13
|
its('artists.size') { should eq 2 }
|
14
14
|
its('artists.to_a') { should eq instantiate(Hallon::Artist, mock_artist, mock_artist_two) }
|
@@ -19,22 +19,30 @@ describe Hallon::Toplist do
|
|
19
19
|
its('tracks.size') { should eq 2 }
|
20
20
|
its('tracks.to_a') { should eq instantiate(Hallon::Track, mock_track, mock_track_two) }
|
21
21
|
|
22
|
-
describe "
|
23
|
-
|
22
|
+
describe "#request_duration" do
|
23
|
+
it "should return the request duration in seconds" do
|
24
|
+
toplist.request_duration.should eq 2.751
|
25
|
+
end
|
24
26
|
|
27
|
+
it "should be nil if the request was fetched from local cache" do
|
28
|
+
Spotify.should_receive(:toplistbrowse_backend_request_duration).and_return(-1)
|
29
|
+
toplist.request_duration.should be_nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe ".new" do
|
25
34
|
it "should fail given an invalid type" do
|
26
|
-
expect { Hallon::Toplist.new(:invalid_type) }.to raise_error(ArgumentError, /invalid enum value/)
|
35
|
+
expect { mock_session { Hallon::Toplist.new(:invalid_type) } }.to raise_error(ArgumentError, /invalid enum value/)
|
27
36
|
end
|
28
37
|
|
29
38
|
it "should pass the username given a string to libspotify" do
|
30
|
-
Spotify.
|
31
|
-
Hallon::Toplist.new(:
|
39
|
+
Spotify.registry_add 'spotify:toplist:user:Kim', mock_toplistbrowse
|
40
|
+
mock_session { Hallon::Toplist.new(:tracks, "Kim").should be_loaded }
|
32
41
|
end
|
33
42
|
|
34
43
|
it "should pass the correct region to libspotify" do
|
35
|
-
|
36
|
-
|
37
|
-
Hallon::Toplist.new(:artists, :se)
|
44
|
+
Spotify.registry_add 'spotify:toplist:tracks:SE', mock_toplistbrowse
|
45
|
+
mock_session { Hallon::Toplist.new(:tracks, :se).should be_loaded }
|
38
46
|
end
|
39
47
|
end
|
40
48
|
end
|
data/spec/hallon/track_spec.rb
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
describe Hallon::Track do
|
3
|
-
|
3
|
+
it_should_behave_like "a Linkable object" do
|
4
|
+
let(:spotify_uri) { "spotify:track:7N2Vc8u56VGA4KUrGbikC2#01:00" }
|
5
|
+
end
|
6
|
+
|
7
|
+
let(:track) { Hallon::Track.new(mock_track) }
|
8
|
+
subject { track }
|
4
9
|
|
5
10
|
it { should be_loaded }
|
6
11
|
its(:name) { should eq "They" }
|
@@ -18,20 +23,19 @@ describe Hallon::Track do
|
|
18
23
|
around { |test| mock_session(&test) }
|
19
24
|
|
20
25
|
it "should delegate to session to unstar" do
|
21
|
-
session.should_receive(:unstar).with(
|
22
|
-
|
26
|
+
session.should_receive(:unstar).with(track)
|
27
|
+
track.starred = false
|
23
28
|
end
|
24
29
|
|
25
|
-
|
26
30
|
it "should delegate to session to star" do
|
27
|
-
session.should_receive(:star).with(
|
28
|
-
|
31
|
+
session.should_receive(:star).with(track)
|
32
|
+
track.starred = true
|
29
33
|
end
|
30
34
|
|
31
35
|
it "should change starred status of track" do
|
32
|
-
|
33
|
-
|
34
|
-
|
36
|
+
track.should be_starred
|
37
|
+
track.starred = false
|
38
|
+
track.should_not be_starred
|
35
39
|
end
|
36
40
|
end
|
37
41
|
|
@@ -43,34 +47,67 @@ describe Hallon::Track do
|
|
43
47
|
it { should_not be_local }
|
44
48
|
it { should be_autolinked }
|
45
49
|
it { should be_starred }
|
50
|
+
|
51
|
+
its(:availability) { should eq :available }
|
46
52
|
end
|
47
53
|
|
48
54
|
describe "album" do
|
49
55
|
it "should be an album when there is one" do
|
50
|
-
|
56
|
+
track.album.should eq Hallon::Album.new(mock_album)
|
51
57
|
end
|
52
58
|
|
53
59
|
it "should be nil when there isn’t one" do
|
54
|
-
Spotify.should_receive(:track_album).and_return(
|
55
|
-
|
60
|
+
Spotify.should_receive(:track_album).and_return(null_pointer)
|
61
|
+
track.album.should be_nil
|
56
62
|
end
|
57
63
|
end
|
58
64
|
|
59
65
|
describe "to_link" do
|
60
|
-
before(:each) { Hallon::Link.stub(:new) }
|
61
|
-
|
62
66
|
it "should pass the current offset by default" do
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
subject.to_link
|
67
|
+
track.should_receive(:offset).and_return(10)
|
68
|
+
track.to_link.to_str.should match(/#00:10/)
|
67
69
|
end
|
68
70
|
|
69
71
|
it "should accept offset as parameter" do
|
70
|
-
|
71
|
-
|
72
|
+
track.should_not_receive(:offset)
|
73
|
+
track.to_link(1337).to_str.should match(/#22:17/)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "#placeholder?" do
|
78
|
+
let(:yes) { Hallon::Track.new(mock_track_two) }
|
79
|
+
|
80
|
+
it "should return the placeholder status of the track" do
|
81
|
+
yes.should be_placeholder
|
82
|
+
track.should_not be_placeholder
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe "#unwrap" do
|
87
|
+
let(:track) { Hallon::Track.new(mock_track_two) }
|
88
|
+
let(:playlist) { Spotify.link_create_from_string!('spotify:user:burgestrand:playlist:07AX9IY9Hqmj1RqltcG0fi') }
|
89
|
+
let(:artist) { Spotify.link_create_from_string!('spotify:artist:3bftcFwl4vqRNNORRsqm1G') }
|
90
|
+
let(:album) { Spotify.link_create_from_string!('spotify:album:1xvnWMz2PNFf7mXOSRuLws') }
|
91
|
+
|
92
|
+
it "should unwrap a playlist placeholder into a playlist" do
|
93
|
+
Spotify.should_receive(:link_create_from_track!).and_return(playlist)
|
94
|
+
mock_session { track.unwrap.should eq Hallon::Playlist.new(playlist) }
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should unwrap an album placeholder into an album" do
|
98
|
+
Spotify.should_receive(:link_create_from_track!).and_return(album)
|
99
|
+
track.unwrap.should eq Hallon::Album.new(album)
|
100
|
+
end
|
72
101
|
|
73
|
-
|
102
|
+
it "should unwrap an artist placeholder into an artist" do
|
103
|
+
Spotify.should_receive(:link_create_from_track!).and_return(artist)
|
104
|
+
track.unwrap.should eq Hallon::Artist.new(artist)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe "#offline_status" do
|
109
|
+
it "should return the tracks’ offline status" do
|
110
|
+
track.offline_status.should eq :done
|
74
111
|
end
|
75
112
|
end
|
76
113
|
|
@@ -85,6 +122,10 @@ describe Hallon::Track do
|
|
85
122
|
specify "without offset" do
|
86
123
|
Hallon::Track.new(without_offset).offset.should eq 0
|
87
124
|
end
|
125
|
+
|
126
|
+
specify "when instantiated from a pointer" do
|
127
|
+
Hallon::Track.new(mock_track).offset.should eq 0
|
128
|
+
end
|
88
129
|
end
|
89
130
|
|
90
131
|
describe "a local track" do
|
data/spec/hallon/user_spec.rb
CHANGED
@@ -1,34 +1,18 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
describe Hallon::User do
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
end
|
7
|
-
|
8
|
-
it "should raise ArgumentError when given a non-user link" do
|
9
|
-
expect { Hallon::User.new("spotify:search:moo") }.to raise_error ArgumentError
|
10
|
-
end
|
3
|
+
it_should_behave_like "a Linkable object" do
|
4
|
+
let(:spotify_uri) { "spotify:user:burgestrand" }
|
5
|
+
let(:custom_object) { "burgestrand" }
|
11
6
|
end
|
12
7
|
|
13
|
-
describe "
|
14
|
-
|
15
|
-
subject { Hallon::User.new("spotify:user:burgestrand") }
|
16
|
-
it_should_behave_like "a loadable object"
|
17
|
-
end
|
18
|
-
|
19
|
-
context ".new", "from a Link" do
|
20
|
-
subject { Hallon::User.new Hallon::Link.new("spotify:user:burgestrand") }
|
21
|
-
it_should_behave_like "a loadable object"
|
22
|
-
end
|
8
|
+
describe "an instance" do
|
9
|
+
let(:user) { Hallon::User.new(mock_user) }
|
23
10
|
|
24
|
-
|
25
|
-
|
26
|
-
|
11
|
+
describe "#loaded?" do
|
12
|
+
it "should return true as the user is loaded" do
|
13
|
+
user.should be_loaded
|
14
|
+
end
|
27
15
|
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe "an instance", :logged_in => true do
|
31
|
-
let(:user) { Hallon::User.new(mock_user) }
|
32
16
|
|
33
17
|
describe "#to_link" do
|
34
18
|
it "should return a Link for this user" do
|
@@ -37,26 +21,53 @@ describe Hallon::User do
|
|
37
21
|
end
|
38
22
|
|
39
23
|
describe "#name" do
|
40
|
-
it "should be
|
41
|
-
user.name
|
24
|
+
it "should be the canonical name" do
|
25
|
+
user.name.should eq "burgestrand"
|
42
26
|
end
|
27
|
+
end
|
43
28
|
|
44
|
-
|
45
|
-
|
29
|
+
describe "#display_name" do
|
30
|
+
it "should be the users’ display name" do
|
31
|
+
user.display_name.should eq "Burgestrand"
|
46
32
|
end
|
33
|
+
end
|
47
34
|
|
48
|
-
|
49
|
-
|
35
|
+
describe "#post" do
|
36
|
+
let(:post) { mock_session { user.post(tracks) } }
|
37
|
+
let(:tracks) { instantiate(Hallon::Track, mock_track, mock_track_two) }
|
38
|
+
|
39
|
+
it "should have an error status" do
|
40
|
+
post.status.should eq :ok
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should post to the correct user" do
|
44
|
+
Spotify.should_receive(:inbox_post_tracks).with(any_args, user.name, any_args, any_args, any_args, any_args, any_args).and_return(null_pointer)
|
45
|
+
mock_session { user.post(tracks) }
|
50
46
|
end
|
51
47
|
|
52
|
-
it "should
|
53
|
-
|
48
|
+
it "should use given message if available" do
|
49
|
+
Spotify.should_receive(:inbox_post_tracks).with(any_args, any_args, any_args, any_args, "Hello there", any_args, any_args).and_return(null_pointer)
|
50
|
+
mock_session { user.post("Hello there", tracks) }
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should return nil on failure" do
|
54
|
+
Spotify.should_receive(:inbox_post_tracks).and_return(null_pointer)
|
55
|
+
mock_session { user.post([]).should be_nil }
|
54
56
|
end
|
55
57
|
end
|
56
58
|
|
57
|
-
describe "#
|
58
|
-
|
59
|
-
|
59
|
+
describe "#starred" do
|
60
|
+
let(:starred) { Hallon::Playlist.new("spotify:user:%s:starred" % user.name) }
|
61
|
+
|
62
|
+
it "should return the users’ starred playlist" do
|
63
|
+
session.login 'Kim', 'pass'
|
64
|
+
session.should be_logged_in
|
65
|
+
mock_session { user.starred.should eq starred }
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should return nil if not logged in" do
|
69
|
+
session.should_not be_logged_in
|
70
|
+
mock_session { user.starred.should be_nil }
|
60
71
|
end
|
61
72
|
end
|
62
73
|
end
|
data/spec/mockspotify.rb
CHANGED
@@ -5,7 +5,7 @@ module Spotify
|
|
5
5
|
module Mock
|
6
6
|
# @return [String] path to the libmockspotify C extension binary.
|
7
7
|
def self.path
|
8
|
-
File.expand_path('../mockspotify/libmockspotify.', __FILE__) <<
|
8
|
+
File.expand_path('../mockspotify/libmockspotify.', __FILE__) << RbConfig::MAKEFILE_CONFIG['DLEXT']
|
9
9
|
end
|
10
10
|
|
11
11
|
# Overridden to always ffi_lib the mock path.
|
@@ -25,23 +25,48 @@ module Spotify
|
|
25
25
|
extend Mock
|
26
26
|
require 'spotify'
|
27
27
|
|
28
|
+
module Mock
|
29
|
+
class PlaylistTrack < FFI::Struct
|
30
|
+
layout :track, :pointer,
|
31
|
+
:create_time, :int,
|
32
|
+
:creator, :pointer,
|
33
|
+
:message, :pointer,
|
34
|
+
:seen, :bool
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
28
38
|
old_verbose, $VERBOSE = $VERBOSE, true
|
29
39
|
|
40
|
+
def self.attach_mock_function(name, cname, params, returns, options = {})
|
41
|
+
attach_function(name, cname, params, returns, options)
|
42
|
+
old_method = method(name)
|
43
|
+
define_singleton_method(name) do |*args|
|
44
|
+
Spotify::Pointer.new(old_method[*args], returns, false)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
30
48
|
attach_function :registry_find, [:string], :pointer
|
31
49
|
attach_function :registry_add, [:string, :pointer], :void
|
50
|
+
attach_function :registry_clean, [], :void
|
32
51
|
|
33
|
-
attach_function :mock_session, :mocksp_session_create, [:pointer, :connectionstate, :int,
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
52
|
+
attach_function :mock_session, :mocksp_session_create, [:pointer, :connectionstate, :int, Spotify::OfflineSyncStatus, :int, :int, :playlist], :session
|
53
|
+
attach_mock_function :mock_user, :mocksp_user_create, [:string, :string, :bool], :user
|
54
|
+
attach_mock_function :mock_track, :mocksp_track_create, [:string, :int, :array, :album, :int, :int, :int, :int, :error, :bool, :availability, :track_offline_status, :bool, :bool, :bool, :bool], :track
|
55
|
+
attach_mock_function :mock_image, :mocksp_image_create, [:image_id, :imageformat, :size_t, :buffer_in, :error], :image
|
56
|
+
attach_mock_function :mock_artist, :mocksp_artist_create, [:string, :image_id, :bool], :artist
|
57
|
+
attach_mock_function :mock_album, :mocksp_album_create, [:string, :artist, :int, :image_id, :albumtype, :bool, :bool], :album
|
39
58
|
|
40
|
-
attach_function :mock_albumbrowse, :mocksp_albumbrowse_create, [:error, :album, :artist, :int, :array, :int, :array, :string, :albumbrowse_complete_cb, :pointer], :albumbrowse
|
41
|
-
attach_function :mock_artistbrowse, :mocksp_artistbrowse_create, [:error, :artist, :int, :array, :int, :array, :int, :array, :int, :array, :string, :artistbrowse_complete_cb, :pointer], :artistbrowse
|
42
|
-
attach_function :mock_toplistbrowse, :mocksp_toplistbrowse_create, [:error, :int, :array, :int, :array, :int, :array], :toplistbrowse
|
59
|
+
attach_function :mock_albumbrowse, :mocksp_albumbrowse_create, [:error, :int, :album, :artist, :int, :array, :int, :array, :string, :albumbrowse_complete_cb, :pointer], :albumbrowse
|
60
|
+
attach_function :mock_artistbrowse, :mocksp_artistbrowse_create, [:error, :int, :artist, :int, :array, :int, :array, :int, :array, :int, :array, :string, :artistbrowse_type, :artistbrowse_complete_cb, :pointer], :artistbrowse
|
61
|
+
attach_function :mock_toplistbrowse, :mocksp_toplistbrowse_create, [:error, :int, :int, :array, :int, :array, :int, :array], :toplistbrowse
|
43
62
|
|
63
|
+
attach_mock_function :mock_playlist, :mocksp_playlist_create, [:string, :bool, :user, :bool, :string, :image_id, :bool, :uint, Spotify::Subscribers, :bool, :playlist_offline_status, :int, :int, :array], :playlist
|
64
|
+
attach_mock_function :mock_playlistcontainer, :mocksp_playlistcontainer_create, [:user, :bool], :playlistcontainer
|
44
65
|
attach_function :mock_search, :mocksp_search_create, [:error, :string, :string, :int, :int, :array, :int, :int, :array, :int, :int, :array, :search_complete_cb, :pointer], :search
|
66
|
+
attach_function :mock_subscribers, :mocksp_subscribers, [:int, :array], Spotify::Subscribers
|
67
|
+
|
68
|
+
# mocked accessors
|
69
|
+
attach_function :mocksp_playlist_get_autolink_tracks, [:playlist], :bool
|
45
70
|
|
46
71
|
$VERBOSE = old_verbose
|
47
72
|
end
|
@@ -25,6 +25,15 @@ describe Spotify::Mock do
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
+
describe "unregion" do
|
29
|
+
it "should convert an integer to the correct region" do
|
30
|
+
Spotify.attach_function :unregion, [ :int ], :string
|
31
|
+
|
32
|
+
sweden = 21317
|
33
|
+
Spotify.unregion(sweden).should eq "SE"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
28
37
|
describe "the registry" do
|
29
38
|
it "should find previously added entries" do
|
30
39
|
Spotify.registry_add("i_exist", FFI::Pointer.new(1))
|
@@ -37,5 +46,18 @@ describe Spotify::Mock do
|
|
37
46
|
it "should return nil for entries not in the registry" do
|
38
47
|
Spotify.registry_find("i_do_not_exist").should be_null
|
39
48
|
end
|
49
|
+
|
50
|
+
it "should be cleanable" do
|
51
|
+
pointer = FFI::MemoryPointer.new(:uint)
|
52
|
+
|
53
|
+
Spotify.registry_add("i_exist", pointer)
|
54
|
+
Spotify.registry_find("i_exist").should_not be_null
|
55
|
+
|
56
|
+
Spotify.registry_clean
|
57
|
+
Spotify.registry_find("i_exist").should be_null
|
58
|
+
|
59
|
+
Spotify.registry_add("i_exist", pointer)
|
60
|
+
Spotify.registry_find("i_exist").should_not be_null
|
61
|
+
end
|
40
62
|
end
|
41
63
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -16,6 +16,10 @@ Thread.abort_on_exception = true
|
|
16
16
|
RSpec.configure do |config|
|
17
17
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
18
18
|
|
19
|
+
config.before do
|
20
|
+
Hallon::Session.stub(:instance?).and_return(true)
|
21
|
+
end
|
22
|
+
|
19
23
|
def fixture_image_path
|
20
24
|
File.expand_path('../fixtures/pink_cover.jpg', __FILE__)
|
21
25
|
end
|
@@ -26,11 +30,11 @@ RSpec.configure do |config|
|
|
26
30
|
end
|
27
31
|
|
28
32
|
def instantiate(klass, *pointers)
|
29
|
-
pointers.map { |x| klass.new(x) }
|
33
|
+
pointers.map { |x| klass.new(*x) }
|
30
34
|
end
|
31
35
|
|
32
|
-
def mock_session
|
33
|
-
Hallon::Session.should_receive(:instance).at_least(
|
36
|
+
def mock_session(times = 1)
|
37
|
+
Hallon::Session.should_receive(:instance).at_least(times).times.and_return(session)
|
34
38
|
yield
|
35
39
|
end
|
36
40
|
|