hallon 0.15.0 → 0.16.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +40 -0
- data/README.markdown +1 -1
- data/dev/application_key_converter.rb +11 -0
- data/examples/example_support.rb +4 -0
- data/examples/playing_audio.rb +1 -1
- data/lib/hallon.rb +11 -0
- data/lib/hallon/album_browse.rb +3 -3
- data/lib/hallon/artist_browse.rb +20 -4
- data/lib/hallon/blob.rb +11 -0
- data/lib/hallon/enumerator.rb +5 -0
- data/lib/hallon/ext/spotify.rb +2 -0
- data/lib/hallon/image.rb +7 -1
- data/lib/hallon/link.rb +5 -2
- data/lib/hallon/observable.rb +48 -1
- data/lib/hallon/player.rb +15 -26
- data/lib/hallon/playlist.rb +16 -25
- data/lib/hallon/playlist_container.rb +38 -0
- data/lib/hallon/search.rb +75 -4
- data/lib/hallon/session.rb +31 -42
- data/lib/hallon/toplist.rb +3 -3
- data/lib/hallon/track.rb +28 -10
- data/lib/hallon/version.rb +1 -1
- data/spec/hallon/album_browse_spec.rb +68 -18
- data/spec/hallon/album_spec.rb +62 -27
- data/spec/hallon/artist_browse_spec.rb +106 -31
- data/spec/hallon/artist_spec.rb +32 -18
- data/spec/hallon/blob_spec.rb +6 -0
- data/spec/hallon/enumerator_spec.rb +10 -0
- data/spec/hallon/error_spec.rb +4 -4
- data/spec/hallon/hallon_spec.rb +1 -1
- data/spec/hallon/image_spec.rb +58 -47
- data/spec/hallon/link_spec.rb +51 -43
- data/spec/hallon/observable/album_browse_spec.rb +1 -1
- data/spec/hallon/observable/artist_browse_spec.rb +1 -1
- data/spec/hallon/observable/image_spec.rb +1 -1
- data/spec/hallon/observable/playlist_container_spec.rb +4 -4
- data/spec/hallon/observable/playlist_spec.rb +14 -14
- data/spec/hallon/observable/post_spec.rb +1 -1
- data/spec/hallon/observable/search_spec.rb +1 -1
- data/spec/hallon/observable/session_spec.rb +17 -17
- data/spec/hallon/observable/toplist_spec.rb +1 -1
- data/spec/hallon/observable_spec.rb +40 -6
- data/spec/hallon/player_spec.rb +1 -1
- data/spec/hallon/playlist_container_spec.rb +96 -13
- data/spec/hallon/playlist_spec.rb +180 -45
- data/spec/hallon/search_spec.rb +211 -28
- data/spec/hallon/session_spec.rb +44 -38
- data/spec/hallon/toplist_spec.rb +31 -14
- data/spec/hallon/track_spec.rb +159 -50
- data/spec/hallon/user_post_spec.rb +10 -5
- data/spec/hallon/user_spec.rb +60 -50
- data/spec/spec_helper.rb +40 -15
- data/spec/support/album_mocks.rb +30 -0
- data/spec/support/artist_mocks.rb +36 -0
- data/spec/support/common_objects.rb +0 -201
- data/spec/support/image_mocks.rb +34 -0
- data/spec/support/playlist_container_mocks.rb +36 -0
- data/spec/support/playlist_mocks.rb +70 -0
- data/spec/support/search_mocks.rb +23 -0
- data/spec/support/session_mocks.rb +33 -0
- data/spec/support/toplist_mocks.rb +19 -0
- data/spec/support/track_mocks.rb +28 -0
- data/spec/support/user_mocks.rb +20 -0
- metadata +40 -18
- data/spec/support/context_stub_session.rb +0 -5
data/spec/hallon/album_spec.rb
CHANGED
@@ -1,59 +1,94 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
#
|
3
3
|
describe Hallon::Album do
|
4
|
-
|
4
|
+
let(:album) do
|
5
|
+
Hallon::Album.new(mock_albums[:default])
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:empty_album) do
|
9
|
+
Hallon::Album.new(mock_albums[:empty])
|
10
|
+
end
|
11
|
+
|
12
|
+
specify { album.should be_a Hallon::Loadable }
|
5
13
|
|
6
14
|
it_should_behave_like "a Linkable object" do
|
7
15
|
let(:spotify_uri) { "spotify:album:1xvnWMz2PNFf7mXOSRuLws" }
|
8
16
|
end
|
9
17
|
|
10
|
-
|
11
|
-
|
18
|
+
describe ".types" do
|
19
|
+
subject { Hallon::Album.types }
|
12
20
|
|
13
|
-
|
14
|
-
|
15
|
-
its(:type) { should be :single }
|
16
|
-
its(:browse) do
|
17
|
-
mock_session { should eq Hallon::AlbumBrowse.new(album) }
|
21
|
+
it { should be_an Array }
|
22
|
+
it { should include :single }
|
18
23
|
end
|
19
24
|
|
20
|
-
|
21
|
-
|
25
|
+
describe "#name" do
|
26
|
+
it "returns the album’s name" do
|
27
|
+
album.name.should eq "Finally Woken"
|
28
|
+
end
|
22
29
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
30
|
+
it "returns an empty string if the album is not loaded" do
|
31
|
+
empty_album.name.should be_empty
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#release_year" do
|
36
|
+
it "returns the album’s release year" do
|
37
|
+
album.release_year.should eq 2004
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "#type" do
|
42
|
+
it "returns the album’s type" do
|
43
|
+
album.type.should eq :single
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "#browse" do
|
48
|
+
it "returns the album’s browser object" do
|
49
|
+
album.browse.should eq Hallon::AlbumBrowse.new(album)
|
27
50
|
end
|
51
|
+
end
|
28
52
|
|
53
|
+
describe "#available?" do
|
54
|
+
it "returns true when the album is available" do
|
55
|
+
album.should be_available
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "#loaded?" do
|
60
|
+
it "returns true when the album is loaded" do
|
61
|
+
album.should be_loaded
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "artist" do
|
29
66
|
it "should be an artist if it exists" do
|
30
67
|
album.artist.should eq Hallon::Artist.new(mock_artist)
|
31
68
|
end
|
32
|
-
end
|
33
69
|
|
34
|
-
|
35
|
-
|
36
|
-
Spotify.should_receive(:album_cover).and_return(null_pointer)
|
37
|
-
album.cover.should be_nil
|
70
|
+
it "should be nil if there is no artist" do
|
71
|
+
empty_album.artist.should be_nil
|
38
72
|
end
|
73
|
+
end
|
39
74
|
|
75
|
+
describe "#cover" do
|
40
76
|
it "should be an image if it exists" do
|
41
|
-
|
77
|
+
album.cover.should eq Hallon::Image.new(mock_image_id)
|
42
78
|
end
|
43
|
-
end
|
44
79
|
|
45
|
-
describe "#cover_link" do
|
46
80
|
it "should be nil if there is no image" do
|
47
|
-
|
48
|
-
album.cover_link.should be_nil
|
81
|
+
empty_album.cover.should be_nil
|
49
82
|
end
|
83
|
+
end
|
50
84
|
|
85
|
+
describe "#cover_link" do
|
51
86
|
it "should be a link if it exists" do
|
52
87
|
album.cover_link.should eq Hallon::Link.new("spotify:image:3ad93423add99766e02d563605c6e76ed2b0e400")
|
53
88
|
end
|
54
|
-
end
|
55
89
|
|
56
|
-
|
57
|
-
|
90
|
+
it "should be nil if there is no image" do
|
91
|
+
empty_album.cover_link.should be_nil
|
92
|
+
end
|
58
93
|
end
|
59
94
|
end
|
@@ -1,11 +1,22 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
|
2
3
|
describe Hallon::ArtistBrowse do
|
3
|
-
|
4
|
+
let(:browse) do
|
5
|
+
artist = Hallon::Artist.new(mock_artists[:default])
|
6
|
+
Hallon::ArtistBrowse.new(artist)
|
7
|
+
end
|
8
|
+
|
9
|
+
let(:empty_browse) do
|
10
|
+
artist = Hallon::Artist.new(mock_artists[:empty])
|
11
|
+
Hallon::ArtistBrowse.new(artist)
|
12
|
+
end
|
13
|
+
|
14
|
+
specify { browse.should be_a Hallon::Loadable }
|
4
15
|
|
5
16
|
describe ".new" do
|
6
17
|
it "should raise an error if the browse request failed" do
|
7
18
|
Spotify.should_receive(:artistbrowse_create).and_return(null_pointer)
|
8
|
-
expect {
|
19
|
+
expect { Hallon::ArtistBrowse.new(mock_artist) }.to raise_error(FFI::NullPointerError)
|
9
20
|
end
|
10
21
|
|
11
22
|
it "should raise an error given a non-album spotify pointer" do
|
@@ -13,48 +24,112 @@ describe Hallon::ArtistBrowse do
|
|
13
24
|
end
|
14
25
|
end
|
15
26
|
|
16
|
-
|
17
|
-
|
18
|
-
|
27
|
+
describe '.types' do
|
28
|
+
subject { Hallon::ArtistBrowse.types }
|
29
|
+
|
30
|
+
it { should be_an Array }
|
31
|
+
it { should include :full }
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "#loaded?" do
|
35
|
+
it "is true when the artist browser is loaded" do
|
36
|
+
browse.should be_loaded
|
37
|
+
end
|
19
38
|
end
|
20
39
|
|
21
|
-
|
40
|
+
describe "#status" do
|
41
|
+
it "returns the artist browser’s status" do
|
42
|
+
browse.status.should eq :ok
|
43
|
+
end
|
44
|
+
end
|
22
45
|
|
23
|
-
|
24
|
-
|
25
|
-
|
46
|
+
describe "#biography" do
|
47
|
+
it "returns the artist’s biography" do
|
48
|
+
browse.biography.should eq 'grew up in DA BLOCK'
|
49
|
+
end
|
26
50
|
|
27
|
-
|
28
|
-
|
29
|
-
|
51
|
+
it "returns an empty string when the artist browser is not loaded" do
|
52
|
+
empty_browse.biography.should be_empty
|
53
|
+
end
|
30
54
|
end
|
31
55
|
|
32
|
-
|
33
|
-
|
56
|
+
describe "#artist" do
|
57
|
+
it "returns the artist" do
|
58
|
+
browse.artist.should eq Hallon::Artist.new(mock_artists[:default])
|
59
|
+
end
|
34
60
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
its('similar_artists.size') { should eq 2 }
|
40
|
-
its('similar_artists.to_a') { should eq [mock_artist, mock_artist_two].map{ |p| Hallon::Artist.new(p) } }
|
41
|
-
its(:biography) { should eq 'grew up in DA BLOCK' }
|
61
|
+
it "returns nil if the artist browser is not loaded" do
|
62
|
+
empty_browse.artist.should be_nil
|
63
|
+
end
|
64
|
+
end
|
42
65
|
|
43
|
-
describe "#
|
44
|
-
it "
|
45
|
-
browse.
|
66
|
+
describe "#portraits" do
|
67
|
+
it "returns an enumerator of the artist’s portraits" do
|
68
|
+
browse.portraits.to_a.should eq instantiate(Hallon::Image, mock_image_id, mock_image_id)
|
46
69
|
end
|
47
70
|
|
48
|
-
it "
|
49
|
-
|
50
|
-
browse.request_duration.should be_nil
|
71
|
+
it "returns an empty enumerator when the artist browser is not loaded" do
|
72
|
+
empty_browse.portraits.size.should eq 0
|
51
73
|
end
|
52
74
|
end
|
53
75
|
|
54
|
-
describe
|
55
|
-
|
76
|
+
describe "#portrait_links" do
|
77
|
+
it "returns an enumerator of the artist’s portrait links" do
|
78
|
+
browse.portrait_links.to_a.should eq instantiate(Hallon::Link, mock_image_link, mock_image_link)
|
79
|
+
end
|
56
80
|
|
57
|
-
it
|
58
|
-
|
81
|
+
it "returns an empty enumerator when the artist browser is not loaded" do
|
82
|
+
empty_browse.portrait_links.size.should eq 0
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe "#tracks" do
|
87
|
+
it "returns an enumerator of the artist’s tracks" do
|
88
|
+
browse.tracks.to_a.should eq instantiate(Hallon::Track, mock_track, mock_track_two)
|
89
|
+
end
|
90
|
+
|
91
|
+
it "returns an empty enumerator when the artist browser is not loaded" do
|
92
|
+
empty_browse.tracks.size.should eq 0
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "#albums" do
|
97
|
+
it "returns an enumerator of the artist’s albums" do
|
98
|
+
browse.albums.to_a.should eq instantiate(Hallon::Album, mock_album)
|
99
|
+
end
|
100
|
+
|
101
|
+
it "returns an empty enumerator when the artist browser is not loaded" do
|
102
|
+
empty_browse.albums.size.should eq 0
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe "#similar_artists" do
|
107
|
+
it "returns an enumerator of the artist’s albums" do
|
108
|
+
browse.similar_artists.to_a.should eq instantiate(Hallon::Artist, mock_artist, mock_artist_two)
|
109
|
+
end
|
110
|
+
|
111
|
+
it "returns an empty enumerator when the artist browser is not loaded" do
|
112
|
+
empty_browse.similar_artists.size.should eq 0
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
describe "#top_hits" do
|
117
|
+
it "returns an enumerator of the artist’s top hits" do
|
118
|
+
browse.top_hits.to_a.should eq instantiate(Hallon::Track, mock_track)
|
119
|
+
end
|
120
|
+
|
121
|
+
it "returns an empty enumerator when the artist browser is not loaded" do
|
122
|
+
empty_browse.top_hits.should be_empty
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
describe "#request_duration" do
|
127
|
+
it "should return the request duration in seconds" do
|
128
|
+
browse.request_duration.should eq 2.751
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should be zero if the request was fetched from local cache" do
|
132
|
+
empty_browse.request_duration.should eq 0
|
133
|
+
end
|
59
134
|
end
|
60
135
|
end
|
data/spec/hallon/artist_spec.rb
CHANGED
@@ -1,20 +1,38 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
describe Hallon::Artist do
|
3
|
-
|
3
|
+
let(:artist) do
|
4
|
+
Hallon::Artist.new(mock_artists[:default])
|
5
|
+
end
|
6
|
+
|
7
|
+
let(:empty_artist) do
|
8
|
+
Hallon::Artist.new(mock_artists[:empty])
|
9
|
+
end
|
10
|
+
|
11
|
+
specify { artist.should be_a Hallon::Loadable }
|
4
12
|
|
5
13
|
it_should_behave_like "a Linkable object" do
|
6
14
|
let(:spotify_uri) { "spotify:artist:3bftcFwl4vqRNNORRsqm1G" }
|
7
15
|
end
|
8
16
|
|
9
|
-
|
10
|
-
|
17
|
+
describe "#loaded?" do
|
18
|
+
it "returns true when the artist is loaded" do
|
19
|
+
artist.should be_loaded
|
20
|
+
end
|
21
|
+
end
|
11
22
|
|
12
|
-
|
13
|
-
|
23
|
+
describe "#name" do
|
24
|
+
it "returns the artist’s name" do
|
25
|
+
artist.name.should eq "Jem"
|
26
|
+
end
|
27
|
+
|
28
|
+
it "returns an empty string if the artist is not loaded" do
|
29
|
+
empty_artist.name.should be_empty
|
30
|
+
end
|
31
|
+
end
|
14
32
|
|
15
33
|
describe "#browse" do
|
16
34
|
it "should return an artist browsing object" do
|
17
|
-
|
35
|
+
artist.browse.should eq Hallon::ArtistBrowse.new(mock_artist)
|
18
36
|
end
|
19
37
|
|
20
38
|
it "should default to full browsing" do
|
@@ -29,26 +47,22 @@ describe Hallon::Artist do
|
|
29
47
|
end
|
30
48
|
|
31
49
|
describe "#portrait" do
|
32
|
-
let(:link) { Hallon::Link.new(mock_image_uri) }
|
33
|
-
|
34
|
-
it "should be nil if an image is not available" do
|
35
|
-
Spotify.should_receive(:artist_portrait).and_return(null_pointer)
|
36
|
-
artist.portrait.should be_nil
|
37
|
-
end
|
38
|
-
|
39
50
|
it "should be an image if it exists" do
|
40
|
-
|
51
|
+
artist.portrait.should eq Hallon::Image.new(mock_image_id)
|
41
52
|
end
|
42
|
-
end
|
43
53
|
|
44
|
-
describe "#portrait_link" do
|
45
54
|
it "should be nil if an image is not available" do
|
46
|
-
|
47
|
-
artist.portrait_link.should be_nil
|
55
|
+
empty_artist.portrait.should be_nil
|
48
56
|
end
|
57
|
+
end
|
49
58
|
|
59
|
+
describe "#portrait_link" do
|
50
60
|
it "should be a link if it exists" do
|
51
61
|
artist.portrait_link.should eq Hallon::Link.new(mock_image_uri)
|
52
62
|
end
|
63
|
+
|
64
|
+
it "should be nil if an image is not available" do
|
65
|
+
empty_artist.portrait_link.should be_nil
|
66
|
+
end
|
53
67
|
end
|
54
68
|
end
|
@@ -50,6 +50,16 @@ describe Hallon::Enumerator do
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
+
describe "#empty?" do
|
54
|
+
it "returns true if the enumerator is empty" do
|
55
|
+
enumerator(0).should be_empty
|
56
|
+
end
|
57
|
+
|
58
|
+
it "returns false if the enumerator is not empty" do
|
59
|
+
enum.should_not be_empty
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
53
63
|
describe "#[]" do
|
54
64
|
it "should return nil if #[x] is not within the enumerators’ size (no matter if the value exists or not)" do
|
55
65
|
enum.should_receive(:size).and_return(1)
|
data/spec/hallon/error_spec.rb
CHANGED
@@ -3,7 +3,7 @@ describe Hallon::Error do
|
|
3
3
|
|
4
4
|
it { should <= RuntimeError }
|
5
5
|
|
6
|
-
describe "
|
6
|
+
describe ".disambiguate" do
|
7
7
|
it "should not fail on invalid numbers" do
|
8
8
|
subject.disambiguate(10000).should eq [-1, nil]
|
9
9
|
end
|
@@ -13,7 +13,7 @@ describe Hallon::Error do
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
describe "
|
16
|
+
describe ".explain" do
|
17
17
|
it "should work properly given an integer" do
|
18
18
|
subject.explain(0).should eq 'sp_error: 0'
|
19
19
|
end
|
@@ -23,7 +23,7 @@ describe Hallon::Error do
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
describe "
|
26
|
+
describe ".maybe_raise" do
|
27
27
|
it "should not raise error when given 0 as error code" do
|
28
28
|
expect { subject.maybe_raise(0) }.to_not raise_error
|
29
29
|
end
|
@@ -47,7 +47,7 @@ describe Hallon::Error do
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
describe "
|
50
|
+
describe ".table" do
|
51
51
|
it "should return a hash of symbol to integer" do
|
52
52
|
Hallon::Error.table[:ok].should eq 0
|
53
53
|
end
|
data/spec/hallon/hallon_spec.rb
CHANGED
data/spec/hallon/image_spec.rb
CHANGED
@@ -2,76 +2,87 @@
|
|
2
2
|
require 'ostruct'
|
3
3
|
|
4
4
|
describe Hallon::Image do
|
5
|
-
|
5
|
+
let(:image) do
|
6
|
+
Hallon::Image.new(mock_image)
|
7
|
+
end
|
8
|
+
|
9
|
+
let(:empty_image) do
|
10
|
+
Hallon::Image.new(mock_empty_image)
|
11
|
+
end
|
6
12
|
|
7
13
|
it_should_behave_like "a Linkable object" do
|
8
14
|
let(:spotify_uri) { "spotify:image:#{mock_image_hex}" }
|
9
15
|
let(:custom_object) { mock_image_hex }
|
16
|
+
let(:described_class) { Hallon::Image }
|
17
|
+
end
|
10
18
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
17
|
-
end
|
19
|
+
specify { image.should be_a Hallon::Loadable }
|
20
|
+
|
21
|
+
describe "#loaded?" do
|
22
|
+
it "returns true when the image is loaded" do
|
23
|
+
image.should be_loaded
|
18
24
|
end
|
19
25
|
end
|
20
26
|
|
21
|
-
describe "
|
22
|
-
|
23
|
-
|
27
|
+
describe "#status" do
|
28
|
+
it "returns the image’s status" do
|
29
|
+
image.status.should eq :ok
|
30
|
+
end
|
31
|
+
end
|
24
32
|
|
25
|
-
|
26
|
-
|
27
|
-
|
33
|
+
describe "#format" do
|
34
|
+
it "returns the image’s format" do
|
35
|
+
image.format.should eq :jpeg
|
36
|
+
end
|
37
|
+
end
|
28
38
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
39
|
+
describe "#id" do
|
40
|
+
it "returns the image id as a hexadecimal string" do
|
41
|
+
image.id.should eq mock_image_hex
|
33
42
|
end
|
43
|
+
end
|
34
44
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
end
|
45
|
+
describe "#raw_id" do
|
46
|
+
it "returns the image id as a binary string" do
|
47
|
+
image.raw_id.should eq mock_image_id
|
39
48
|
end
|
49
|
+
end
|
40
50
|
|
41
|
-
|
42
|
-
|
51
|
+
describe "#data" do
|
52
|
+
it "returns the image’s data" do
|
53
|
+
image.data.should eq File.open(fixture_image_path, 'r:binary', &:read)
|
54
|
+
end
|
43
55
|
|
44
|
-
|
45
|
-
|
46
|
-
|
56
|
+
it "has a binary encoding" do
|
57
|
+
image.data.encoding.name.should eq 'ASCII-8BIT'
|
58
|
+
end
|
47
59
|
|
48
|
-
|
49
|
-
|
50
|
-
end
|
60
|
+
it "returns an empty string if the image is not loaded" do
|
61
|
+
empty_image.data.should be_empty
|
51
62
|
end
|
63
|
+
end
|
52
64
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
end
|
65
|
+
describe "#to_link" do
|
66
|
+
it "should retrieve the Spotify URI" do
|
67
|
+
image.to_link.should eq Hallon::Link.new("spotify:image:#{image.id}")
|
57
68
|
end
|
69
|
+
end
|
58
70
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
71
|
+
describe "#===" do
|
72
|
+
it "should compare ids (but only if other is an Image)" do
|
73
|
+
other = double
|
74
|
+
other.should_receive(:is_a?).with(Hallon::Image).and_return(true)
|
75
|
+
other.should_receive(:raw_id).and_return(image.raw_id)
|
64
76
|
|
65
|
-
|
66
|
-
|
67
|
-
|
77
|
+
image.should eq other
|
78
|
+
image.should_not eq double
|
79
|
+
end
|
68
80
|
|
69
|
-
|
70
|
-
|
71
|
-
|
81
|
+
it "should not call #id if other is not an image" do
|
82
|
+
other = double
|
83
|
+
other.should_not_receive(:raw_id)
|
72
84
|
|
73
|
-
|
74
|
-
end
|
85
|
+
image.should_not eq other
|
75
86
|
end
|
76
87
|
end
|
77
88
|
end
|