spec/management/artist_manager_spec.rb in 7digital-0.1.2 vs spec/management/artist_manager_spec.rb in 7digital-0.1.5

- old
+ new

@@ -1,173 +1,173 @@ -require File.expand_path('../../spec_helper', __FILE__) - -describe "ArtistManager" do - - before do - @client = stub(Sevendigital::Client) - @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator)) - @artist_manager = Sevendigital::ArtistManager.new(@client) - end - - it "get_details should call artist/details api method and return digested artist" do - an_artist_id = 123 - an_artist = Sevendigital::Artist.new(@client) - an_api_response = fake_api_response("artist/details") - - mock_client_digestor(@client, :artist_digestor) \ - .should_receive(:from_xml_doc).with(an_api_response.item_xml("artist")).and_return(an_artist) - - @client.should_receive(:make_api_request) \ - .with(:GET, "artist/details", {:artistId => an_artist_id}, {}) \ - .and_return(an_api_response) - - artist = @artist_manager.get_details(an_artist_id) - artist.should == an_artist - end - - it "get_releases should call artist/releases api method and return list of digested releases" do - an_artist_id = 123 - a_list_of_releases = [Sevendigital::Release.new(@client), Sevendigital::Release.new(@client)] - an_api_response = fake_api_response("artist/releases") - - mock_client_digestor(@client, :release_digestor) \ - .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("releases")).and_return(a_list_of_releases) - - @client.should_receive(:make_api_request) \ - .with(:GET, "artist/releases", {:artistId => an_artist_id}, {}) \ - .and_return(an_api_response) - - releases = @artist_manager.get_releases(an_artist_id) - releases.should == a_list_of_releases - end - - it "get_top_tracks should call artist/topTracks method and digest the returned list of tracks" do - an_artist_id = 123 - a_top_tracks_list = [Sevendigital::Track.new(@client)] - an_api_response = fake_api_response("artist/toptracks") - - mock_client_digestor(@client, :track_digestor) \ - .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("tracks")).and_return(a_top_tracks_list) - - @client.should_receive(:make_api_request) \ - .with(:GET, "artist/topTracks", {:artistId => an_artist_id}, {}) \ - .and_return(an_api_response) - - tracks = @artist_manager.get_top_tracks(an_artist_id) - tracks.should == a_top_tracks_list - - end - - it "get_similar should call artist/similar method and digest the returned list of artists" do - an_artist_id = 123 - a_similar_artists_list = [Sevendigital::Artist.new(@client), Sevendigital::Artist.new(@client)] - an_api_response = fake_api_response("artist/similar") - - mock_client_digestor(@client, :artist_digestor) \ - .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("artists")).and_return(a_similar_artists_list) - - @client.should_receive(:make_api_request) \ - .with(:GET, "artist/similar", {:artistId => an_artist_id}, {}) \ - .and_return(an_api_response) - - artists = @artist_manager.get_similar(an_artist_id) - artists.should == a_similar_artists_list - - end - - it "get_top_by_tag should call artist/byTag/top api method and digest the nested artist list from response" do - - tags = "alternative-indie" - an_api_response = fake_api_response("artist/byTag/top") - a_release_list = [] - - mock_client_digestor(@client, :artist_digestor) \ - .should_receive(:nested_list_from_xml_doc) \ - .with(an_api_response.item_xml("taggedResults"), :taggedItem, :artist) \ - .and_return(a_release_list) - - @client.should_receive(:make_api_request) \ - .with(:GET, "artist/byTag/top", {:tags => tags}, {}) \ - .and_return(an_api_response) - - releases = @artist_manager.get_top_by_tag(tags) - releases.should == a_release_list - - end - - it "search should call artist/search api method and digest the nested artist list from response" do - - query = "radiohead" - api_response = fake_api_response("artist/search") - an_artist_list = [] - - mock_client_digestor(@client, :artist_digestor) \ - .should_receive(:nested_list_from_xml_doc) \ - .with(api_response.item_xml("searchResults"), :searchResult, :artist) \ - .and_return(an_artist_list) - - @client.should_receive(:make_api_request) \ - .with(:GET, "artist/search", {:q => query}, {}) \ - .and_return(api_response) - - artists = @artist_manager.search(query) - artists.should == an_artist_list - - end - - - it "browse should call artist/browse api method and digest the artist list from response" do - - letter = "ra" - an_api_response = fake_api_response("artist/browse") - an_artist_list = [] - - mock_client_digestor(@client, :artist_digestor) \ - .should_receive(:list_from_xml_doc) \ - .with(an_api_response.item_xml("artists")) \ - .and_return(an_artist_list) - - @client.should_receive(:make_api_request) \ - .with(:GET, "artist/browse", {:letter => letter}, {}) \ - .and_return(an_api_response) - - artists = @artist_manager.browse(letter) - artists.should == an_artist_list - - end - - - it "get_chart should call artist/chart api method and digest the artist list from response" do - - api_response = fake_api_response("artist/chart") - a_chart = [Sevendigital::ChartItem.new(@client)] - - mock_client_digestor(@client, :chart_item_digestor) \ - .should_receive(:list_from_xml_doc).with(api_response.item_xml("chart")).and_return(a_chart) - - @client.should_receive(:make_api_request) \ - .with(:GET, "artist/chart", {}, {}) \ - .and_return(api_response) - - chart = @artist_manager.get_chart - chart.should == a_chart - end - - - it "get_tags should call artist/tags api method and return list of digested tags" do - an_artist_id = 123 - a_list_of_tags = [Sevendigital::Tag.new, Sevendigital::Tag.new] - an_api_response = fake_api_response("artist/tags") - options = {:page => 1} - - mock_client_digestor(@client, :tag_digestor) \ - .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("tags")).and_return(a_list_of_tags) - - @client.should_receive(:make_api_request) \ - .with(:GET, "artist/tags", {:artistId => an_artist_id}, options) \ - .and_return(an_api_response) - - releases = @artist_manager.get_tags(an_artist_id, options) - releases.should == a_list_of_tags - end - +require File.expand_path('../../spec_helper', __FILE__) + +describe "ArtistManager" do + + before do + @client = stub(Sevendigital::Client) + @client.stub!(:operator).and_return(mock(Sevendigital::ApiOperator)) + @artist_manager = Sevendigital::ArtistManager.new(@client) + end + + it "get_details should call artist/details api method and return digested artist" do + an_artist_id = 123 + an_artist = Sevendigital::Artist.new(@client) + an_api_response = fake_api_response("artist/details") + + mock_client_digestor(@client, :artist_digestor) \ + .should_receive(:from_xml_doc).with(an_api_response.item_xml("artist")).and_return(an_artist) + + @client.should_receive(:make_api_request) \ + .with(:GET, "artist/details", {:artistId => an_artist_id}, {}) \ + .and_return(an_api_response) + + artist = @artist_manager.get_details(an_artist_id) + artist.should == an_artist + end + + it "get_releases should call artist/releases api method and return list of digested releases" do + an_artist_id = 123 + a_list_of_releases = [Sevendigital::Release.new(@client), Sevendigital::Release.new(@client)] + an_api_response = fake_api_response("artist/releases") + + mock_client_digestor(@client, :release_digestor) \ + .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("releases")).and_return(a_list_of_releases) + + @client.should_receive(:make_api_request) \ + .with(:GET, "artist/releases", {:artistId => an_artist_id}, {}) \ + .and_return(an_api_response) + + releases = @artist_manager.get_releases(an_artist_id) + releases.should == a_list_of_releases + end + + it "get_top_tracks should call artist/topTracks method and digest the returned list of tracks" do + an_artist_id = 123 + a_top_tracks_list = [Sevendigital::Track.new(@client)] + an_api_response = fake_api_response("artist/toptracks") + + mock_client_digestor(@client, :track_digestor) \ + .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("tracks")).and_return(a_top_tracks_list) + + @client.should_receive(:make_api_request) \ + .with(:GET, "artist/topTracks", {:artistId => an_artist_id}, {}) \ + .and_return(an_api_response) + + tracks = @artist_manager.get_top_tracks(an_artist_id) + tracks.should == a_top_tracks_list + + end + + it "get_similar should call artist/similar method and digest the returned list of artists" do + an_artist_id = 123 + a_similar_artists_list = [Sevendigital::Artist.new(@client), Sevendigital::Artist.new(@client)] + an_api_response = fake_api_response("artist/similar") + + mock_client_digestor(@client, :artist_digestor) \ + .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("artists")).and_return(a_similar_artists_list) + + @client.should_receive(:make_api_request) \ + .with(:GET, "artist/similar", {:artistId => an_artist_id}, {}) \ + .and_return(an_api_response) + + artists = @artist_manager.get_similar(an_artist_id) + artists.should == a_similar_artists_list + + end + + it "get_top_by_tag should call artist/byTag/top api method and digest the nested artist list from response" do + + tags = "alternative-indie" + an_api_response = fake_api_response("artist/byTag/top") + a_release_list = [] + + mock_client_digestor(@client, :artist_digestor) \ + .should_receive(:nested_list_from_xml_doc) \ + .with(an_api_response.item_xml("taggedResults"), :taggedItem, :artist) \ + .and_return(a_release_list) + + @client.should_receive(:make_api_request) \ + .with(:GET, "artist/byTag/top", {:tags => tags}, {}) \ + .and_return(an_api_response) + + releases = @artist_manager.get_top_by_tag(tags) + releases.should == a_release_list + + end + + it "search should call artist/search api method and digest the nested artist list from response" do + + query = "radiohead" + api_response = fake_api_response("artist/search") + an_artist_list = [] + + mock_client_digestor(@client, :artist_digestor) \ + .should_receive(:nested_list_from_xml_doc) \ + .with(api_response.item_xml("searchResults"), :searchResult, :artist) \ + .and_return(an_artist_list) + + @client.should_receive(:make_api_request) \ + .with(:GET, "artist/search", {:q => query}, {}) \ + .and_return(api_response) + + artists = @artist_manager.search(query) + artists.should == an_artist_list + + end + + + it "browse should call artist/browse api method and digest the artist list from response" do + + letter = "ra" + an_api_response = fake_api_response("artist/browse") + an_artist_list = [] + + mock_client_digestor(@client, :artist_digestor) \ + .should_receive(:list_from_xml_doc) \ + .with(an_api_response.item_xml("artists")) \ + .and_return(an_artist_list) + + @client.should_receive(:make_api_request) \ + .with(:GET, "artist/browse", {:letter => letter}, {}) \ + .and_return(an_api_response) + + artists = @artist_manager.browse(letter) + artists.should == an_artist_list + + end + + + it "get_chart should call artist/chart api method and digest the artist list from response" do + + api_response = fake_api_response("artist/chart") + a_chart = [Sevendigital::ChartItem.new(@client)] + + mock_client_digestor(@client, :chart_item_digestor) \ + .should_receive(:list_from_xml_doc).with(api_response.item_xml("chart")).and_return(a_chart) + + @client.should_receive(:make_api_request) \ + .with(:GET, "artist/chart", {}, {}) \ + .and_return(api_response) + + chart = @artist_manager.get_chart + chart.should == a_chart + end + + + it "get_tags should call artist/tags api method and return list of digested tags" do + an_artist_id = 123 + a_list_of_tags = [Sevendigital::Tag.new, Sevendigital::Tag.new] + an_api_response = fake_api_response("artist/tags") + options = {:page => 1} + + mock_client_digestor(@client, :tag_digestor) \ + .should_receive(:list_from_xml_doc).with(an_api_response.item_xml("tags")).and_return(a_list_of_tags) + + @client.should_receive(:make_api_request) \ + .with(:GET, "artist/tags", {:artistId => an_artist_id}, options) \ + .and_return(an_api_response) + + releases = @artist_manager.get_tags(an_artist_id, options) + releases.should == a_list_of_tags + end + end \ No newline at end of file