From 6899cf86eeb043bff790d1420536724b4bd7f09a Mon Sep 17 00:00:00 2001 From: Prashant Khandelwal Date: Thu, 4 Dec 2014 20:10:07 +0530 Subject: [PATCH 1/2] Added album.getTopTags API method to get top tags --- src/IF.Lastfm.Core/Api/AlbumApi.cs | 10 ++- .../Commands/AlbumApi/AlbumTopTagsCommand.cs | 75 +++++++++++++++++++ src/IF.Lastfm.Core/IF.Lastfm.Core.csproj | 1 + 3 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 src/IF.Lastfm.Core/Api/Commands/AlbumApi/AlbumTopTagsCommand.cs diff --git a/src/IF.Lastfm.Core/Api/AlbumApi.cs b/src/IF.Lastfm.Core/Api/AlbumApi.cs index d508a1f..9a2a1af 100644 --- a/src/IF.Lastfm.Core/Api/AlbumApi.cs +++ b/src/IF.Lastfm.Core/Api/AlbumApi.cs @@ -46,9 +46,15 @@ public Task> GetUserTagsForAlbumAsync(string artist, strin throw new NotImplementedException(); } - public Task> GetTopTagsForAlbumAsync(string artist, string album, bool autocorrect = false) + public async Task> GetTopTagsForAlbumAsync(string artist, string album, bool autocorrect = false) { - throw new NotImplementedException(); + var command = new AlbumTopTagsCommand(Auth) + { + ArtistName = artist, + AlbumName = album + }; + + return await command.ExecuteAsync(); } public async Task> SearchForAlbumAsync(string albumname, int page = 1, int itemsPerPage = LastFm.DefaultPageLength) diff --git a/src/IF.Lastfm.Core/Api/Commands/AlbumApi/AlbumTopTagsCommand.cs b/src/IF.Lastfm.Core/Api/Commands/AlbumApi/AlbumTopTagsCommand.cs new file mode 100644 index 0000000..69226b9 --- /dev/null +++ b/src/IF.Lastfm.Core/Api/Commands/AlbumApi/AlbumTopTagsCommand.cs @@ -0,0 +1,75 @@ +using IF.Lastfm.Core.Api.Enums; +using IF.Lastfm.Core.Api.Helpers; +using IF.Lastfm.Core.Objects; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; + +namespace IF.Lastfm.Core.Api.Commands.AlbumApi +{ + internal class AlbumTopTagsCommand : GetAsyncCommandBase> + { + public string AlbumMbid { get; set; } + + public string ArtistName { get; set; } + + public string AlbumName { get; set; } + + public bool Autocorrect { get; set; } + + public AlbumTopTagsCommand(ILastAuth auth) + : base(auth) + { + Method = "album.gettoptags"; + } + + public AlbumTopTagsCommand(ILastAuth auth, string album, string artist) + : this(auth) + { + AlbumName = album; + ArtistName = artist; + } + + public override void SetParameters() + { + if (AlbumMbid != null) + { + Parameters.Add("mbid", AlbumMbid); + } + else + { + Parameters.Add("artist", ArtistName); + Parameters.Add("album", AlbumName); + } + + Parameters.Add("autocorrect", Convert.ToInt32(Autocorrect).ToString()); + + AddPagingParameters(); + DisableCaching(); + } + + public async override Task> HandleResponse(HttpResponseMessage response) + { + var json = await response.Content.ReadAsStringAsync(); + + LastFmApiError error; + if (LastFm.IsResponseValid(json, out error) && response.IsSuccessStatusCode) + { + var jtoken = JsonConvert.DeserializeObject(json); + var resultsToken = jtoken.SelectToken("toptags"); + var itemsToken = resultsToken.SelectToken("tag"); + + return PageResponse.CreateSuccessResponse(itemsToken, resultsToken, LastTag.ParseJToken, false); + } + else + { + return LastResponse.CreateErrorResponse>(error); + } + } + } +} diff --git a/src/IF.Lastfm.Core/IF.Lastfm.Core.csproj b/src/IF.Lastfm.Core/IF.Lastfm.Core.csproj index 6de4b91..553c2e6 100644 --- a/src/IF.Lastfm.Core/IF.Lastfm.Core.csproj +++ b/src/IF.Lastfm.Core/IF.Lastfm.Core.csproj @@ -40,6 +40,7 @@ + From 68470c84d8458b91260e5ef6bf04a50f3d58ccc0 Mon Sep 17 00:00:00 2001 From: Prashant Khandelwal Date: Thu, 4 Dec 2014 20:58:38 +0530 Subject: [PATCH 2/2] Test cases for GetAlbumTopTagsCommand --- .../AlbumApi/GetAlbumTopTagsCommandTest.cs | 80 +++++++++++++++++++ .../IF.Lastfm.Core.Tests.csproj | 19 ++++- .../Resources/AlbumApi/AlbumGetTopTags.json | 1 + .../AlbumApi/AlbumGetTopTagsEmpty.json | 8 ++ .../AlbumApi/AlbumGetTopTagsError.json | 1 + .../Resources/AlbumApiResponses.Designer.cs | 32 +++++++- .../Resources/AlbumApiResponses.resx | 9 +++ src/IF.Lastfm.Core/Api/AlbumApi.cs | 2 +- ...gsCommand.cs => GetAlbumTopTagsCommand.cs} | 6 +- src/IF.Lastfm.Core/IF.Lastfm.Core.csproj | 2 +- 10 files changed, 152 insertions(+), 8 deletions(-) create mode 100644 src/IF.Lastfm.Core.Tests/Api/Commands/AlbumApi/GetAlbumTopTagsCommandTest.cs create mode 100644 src/IF.Lastfm.Core.Tests/Resources/AlbumApi/AlbumGetTopTags.json create mode 100644 src/IF.Lastfm.Core.Tests/Resources/AlbumApi/AlbumGetTopTagsEmpty.json create mode 100644 src/IF.Lastfm.Core.Tests/Resources/AlbumApi/AlbumGetTopTagsError.json rename src/IF.Lastfm.Core/Api/Commands/AlbumApi/{AlbumTopTagsCommand.cs => GetAlbumTopTagsCommand.cs} (90%) diff --git a/src/IF.Lastfm.Core.Tests/Api/Commands/AlbumApi/GetAlbumTopTagsCommandTest.cs b/src/IF.Lastfm.Core.Tests/Api/Commands/AlbumApi/GetAlbumTopTagsCommandTest.cs new file mode 100644 index 0000000..9fd4498 --- /dev/null +++ b/src/IF.Lastfm.Core.Tests/Api/Commands/AlbumApi/GetAlbumTopTagsCommandTest.cs @@ -0,0 +1,80 @@ +using IF.Lastfm.Core.Api.Commands.AlbumApi; +using IF.Lastfm.Core.Api.Enums; +using IF.Lastfm.Core.Tests.Resources; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IF.Lastfm.Core.Tests.Api.Commands.AlbumApi +{ + + + [TestClass] + public class GetAlbumTopTagsCommandTest : CommandTestsBase + { + private GetAlbumTopTagsCommand _command; + + public GetAlbumTopTagsCommandTest() + { + _command = new GetAlbumTopTagsCommand(MAuth.Object) + { + AlbumName = "Believe", + ArtistName = "Cher" + }; + + _command.SetParameters(); + } + + [TestMethod] + public void Constructor() + { + Assert.AreEqual(_command.Method, "album.gettoptags"); + Assert.AreEqual(_command.Parameters["album"], "Believe"); + Assert.AreEqual(_command.Parameters["artist"], "Cher"); + + } + + [TestMethod] + public async Task HandleSuccessResponse() + { + var response = CreateResponseMessage(Encoding.UTF8.GetString(AlbumApiResponses.AlbumGetTopTags)); + + var parsed = await _command.HandleResponse(response); + + Assert.IsTrue(parsed.Success); + Assert.IsNotNull(parsed.Content); + + } + + + [TestMethod] + public async Task HandleEmptyResponse() + { + var response = CreateResponseMessage(Encoding.UTF8.GetString(AlbumApiResponses.AlbumGetTopTagsEmpty)); + + var parsed = await _command.HandleResponse(response); + + Assert.IsTrue(parsed.Success); + Assert.IsNotNull(parsed.Content); + Assert.IsTrue(!parsed.Content.Any()); + } + + [TestMethod] + public async Task HandleErrorResponse() + { + var response = CreateResponseMessage(Encoding.UTF8.GetString(AlbumApiResponses.AlbumGetTopTagsError)); + + var parsed = await _command.HandleResponse(response); + + Assert.IsFalse(parsed.Success); + Assert.IsTrue(parsed.Error == LastFmApiError.MissingParameters); + Assert.IsNotNull(parsed.Content); + Assert.IsTrue(!parsed.Content.Any()); + } + } + + +} diff --git a/src/IF.Lastfm.Core.Tests/IF.Lastfm.Core.Tests.csproj b/src/IF.Lastfm.Core.Tests/IF.Lastfm.Core.Tests.csproj index 6a54462..06c2327 100644 --- a/src/IF.Lastfm.Core.Tests/IF.Lastfm.Core.Tests.csproj +++ b/src/IF.Lastfm.Core.Tests/IF.Lastfm.Core.Tests.csproj @@ -57,6 +57,12 @@ + + ..\..\packages\Microsoft.Net.Http.2.2.28\lib\net45\System.Net.Http.Extensions.dll + + + ..\..\packages\Microsoft.Net.Http.2.2.28\lib\net45\System.Net.Http.Primitives.dll + @@ -70,6 +76,7 @@ + @@ -80,9 +87,9 @@ - AlbumApiResponses.resx - True True + True + AlbumApiResponses.resx TrackApiResponses.resx @@ -102,10 +109,13 @@ + + + @@ -149,6 +159,11 @@ + + + + +