spec/hallon/search_spec.rb in hallon-0.15.0 vs spec/hallon/search_spec.rb in hallon-0.16.0
- old
+ new
@@ -1,65 +1,248 @@
# coding: utf-8
require 'cgi'
describe Hallon::Search do
+ let(:search) do
+ Hallon::Search.new("my å utf8 query")
+ end
+
+ let(:empty_search) do
+ Hallon::Search.new("")
+ end
+
+ specify { search.should be_a Hallon::Loadable }
+ specify { search.should be_a Hallon::Observable }
+
it_should_behave_like "a Linkable object" do
let(:spotify_uri) { "spotify:search:my+%C3%A5+utf8+%EF%A3%BF+query" }
let(:custom_object) { "http://open.spotify.com/search/my+%C3%A5+utf8+%EF%A3%BF+query" }
- let(:described_class) { stub_session(Hallon::Search) }
+ let(:described_class) { Hallon::Search }
end
- it { should be_a Hallon::Loadable }
-
- subject { search }
- let(:search) do
- mock_session { Hallon::Search.new("my å utf8 query") }
- end
-
describe ".new" do
it "should have some sane defaults" do
Spotify.should_receive(:search_create).with(session.pointer, "my å utf8 query", 0, 25, 0, 25, 0, 25, 0, 25, :standard, anything, anything).and_return(mock_search)
- mock_session { Hallon::Search.new("my å utf8 query") }
+ Hallon::Search.new("my å utf8 query")
end
it "should allow you to customize the defaults" do
- Spotify.should_receive(:search_create).with(session.pointer, "my å utf8 query", 1, 2, 3, 4, 5, 6, 7, 8, :standard, anything, anything).and_return(mock_search)
+ Spotify.should_receive(:search_create).with(session.pointer, "my å utf8 query", 1, 2, 3, 4, 5, 6, 7, 8, :suggest, anything, anything).and_return(mock_search)
my_params = {
:tracks_offset => 1,
:tracks => 2,
:albums_offset => 3,
:albums => 4,
:artists_offset => 5,
:artists => 6,
:playlists_offset => 7,
- :playlists => 8
+ :playlists => 8,
+ :type => :suggest
}
- mock_session { Hallon::Search.new("my å utf8 query", my_params) }
+ Hallon::Search.new("my å utf8 query", my_params)
end
+ it "should raise an error given an invalid search type" do
+ expect { Hallon::Search.new("my å utf8 query", type: :hulabandola) }.to raise_error(ArgumentError)
+ end
+
it "should raise an error if the search failed" do
Spotify.should_receive(:search_create).and_return(null_pointer)
- expect { mock_session { Hallon::Search.new("omgwtfbbq") } }.to raise_error(/search (.*?) failed/)
+ expect { Hallon::Search.new("omgwtfbbq") }.to raise_error(/search (.*?) failed/)
end
end
- it { should be_a Hallon::Observable }
- it { should be_loaded }
- its(:status) { should eq :ok }
- its(:query) { should eq "my å utf8 query" }
- its(:did_you_mean) { should eq "another thing" }
+ describe "#loaded?" do
+ it "returns true if the search is complete" do
+ search.should be_loaded
+ end
+ end
- its('tracks.size') { should eq 2 }
- its('tracks.to_a') { should eq instantiate(Hallon::Track, mock_track, mock_track_two) }
- its('tracks.total') { should eq 1337 }
+ describe "#status" do
+ it "returns the status of the search" do
+ search.status.should eq :ok
+ end
+ end
- its('albums.size') { should eq 1 }
- its('albums.to_a') { should eq instantiate(Hallon::Album, mock_album) }
- its('albums.total') { should eq 42 }
+ describe "#query" do
+ it "returns the search query" do
+ search.query.should eq "my å utf8 query"
+ end
+ end
- its('artists.size') { should eq 2 }
- its('artists.to_a') { should eq instantiate(Hallon::Artist, mock_artist, mock_artist_two) }
- its('artists.total') { should eq 81104 }
+ describe "#did_you_mean" do
+ it "returns a suggestion for what the query might have intended to be" do
+ search.did_you_mean.should eq "another thing"
+ end
- its(:to_link) { should eq Hallon::Link.new("spotify:search:#{CGI.escape(search.query)}") }
+ it "returns an empty string if there is no suggestion available" do
+ empty_search.did_you_mean.should be_empty
+ end
+ end
+
+ describe "#tracks" do
+ it "returns an enumerator of the search’s track" do
+ search.tracks.to_a.should eq instantiate(Hallon::Track, mock_track, mock_track_two)
+ end
+
+ it "returns an empty enumerator if there are no search results" do
+ empty_search.tracks.should be_empty
+ end
+
+ describe ".total" do
+ it "returns the total number of track search results" do
+ search.tracks.total.should eq 1337
+ end
+
+ it "returns zero if there are no search results whatsoever" do
+ empty_search.tracks.total.should eq 0
+ end
+ end
+ end
+
+ describe "#albums" do
+ it "returns an enumerator of the search’s albums" do
+ search.albums.to_a.should eq instantiate(Hallon::Album, mock_album)
+ end
+
+ it "returns an empty enumerator if there are no search results" do
+ empty_search.albums.should be_empty
+ end
+
+ describe ".total" do
+ it "returns the total number of album search results" do
+ search.albums.total.should eq 42
+ end
+
+ it "returns zero if there are no search results whatsoever" do
+ empty_search.albums.total.should eq 0
+ end
+ end
+ end
+
+ describe "#artists" do
+ it "returns an enumerator of the search’s artists" do
+ search.artists.to_a.should eq instantiate(Hallon::Artist, mock_artist, mock_artist_two)
+ end
+
+ it "returns an empty enumerator if there are no search results" do
+ empty_search.artists.should be_empty
+ end
+
+ describe ".total" do
+ it "returns the total number of artist search results" do
+ search.artists.total.should eq 81104
+ end
+
+ it "returns zero if there are no search results whatsoever" do
+ empty_search.artists.total.should eq 0
+ end
+ end
+ end
+
+ describe "#playlist_names" do
+ it "returns an enumerator of the search’s playlist names" do
+ search.playlist_names.to_a.should eq %w(Dunderlist)
+ end
+
+ it "returns an empty enumerator of there are no search results" do
+ empty_search.playlist_names.should be_empty
+ end
+
+ describe ".total" do
+ it "returns the total number of search results" do
+ search.playlist_names.total.should eq 462
+ end
+
+ it "returns zero if there are no search results whatsoever" do
+ empty_search.playlist_names.total.should eq 0
+ end
+ end
+ end
+
+ describe "#playlist_uris" do
+ it "returns an enumerator of the search’s playlist uris" do
+ search.playlist_uris.to_a.should eq %w(spotify:user:burgestrand:playlist:megaplaylist)
+ end
+
+ it "returns an empty enumerator of there are no search results" do
+ empty_search.playlist_uris.should be_empty
+ end
+
+ describe ".total" do
+ it "returns the total number of search results" do
+ search.playlist_uris.total.should eq 462
+ end
+
+ it "returns zero if there are no search results whatsoever" do
+ empty_search.playlist_uris.total.should eq 0
+ end
+ end
+ end
+
+ describe "#playlist_image_uris" do
+ it "returns an enumerator of the search’s playlist image uris" do
+ search.playlist_image_uris.to_a.should eq %w(spotify:image:3ad93423add99766e02d563605c6e76ed2b0e400)
+ end
+
+ it "returns an empty enumerator of there are no search results" do
+ empty_search.playlist_image_uris.should be_empty
+ end
+
+ describe ".total" do
+ it "returns the total number of search results" do
+ search.playlist_image_uris.total.should eq 462
+ end
+
+ it "returns zero if there are no search results whatsoever" do
+ empty_search.playlist_image_uris.total.should eq 0
+ end
+ end
+ end
+
+ describe "#playlists" do
+ it "returns an enumerator of the search’s playlists" do
+ search.playlists.to_a.should eq instantiate(Hallon::Playlist, mock_playlist_two)
+ end
+
+ it "returns an empty enumerator of there are no search results" do
+ empty_search.playlists.should be_empty
+ end
+
+ describe ".total" do
+ it "returns the total number of search results" do
+ search.playlists.total.should eq 462
+ end
+
+ it "returns zero if there are no search results whatsoever" do
+ empty_search.playlists.total.should eq 0
+ end
+ end
+ end
+
+ describe "#playlist_images" do
+ it "returns an enumerator of the search’s playlist images" do
+ search.playlist_images.to_a.should eq instantiate(Hallon::Image, mock_image)
+ end
+
+ it "returns an empty enumerator of there are no search results" do
+ empty_search.playlist_images.should be_empty
+ end
+
+ describe ".total" do
+ it "returns the total number of search results" do
+ search.playlist_images.total.should eq 462
+ end
+
+ it "returns zero if there are no search results whatsoever" do
+ empty_search.playlist_images.total.should eq 0
+ end
+ end
+ end
+
+ describe "#to_link" do
+ it "contains the search query" do
+ search.to_link.should eq Hallon::Link.new("spotify:search:#{CGI.escape(search.query)}")
+ end
+ end
end