mirror of
https://github.com/Sarsoo/IF.Lastfm.git
synced 2024-10-17 07:13:09 +01:00
commit
1af3d9b7d7
@ -0,0 +1,58 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using IF.Lastfm.Core.Api.Commands.Tag;
|
||||||
|
using IF.Lastfm.Core.Api.Enums;
|
||||||
|
using IF.Lastfm.Core.Objects;
|
||||||
|
using IF.Lastfm.Core.Tests.Resources;
|
||||||
|
using NUnit.Framework;
|
||||||
|
|
||||||
|
namespace IF.Lastfm.Core.Tests.Api.Commands.Tag
|
||||||
|
{
|
||||||
|
public class GetInfoCommandTests: CommandTestsBase
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public async Task HandleSuccessResponse()
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
const string tagName = "disco";
|
||||||
|
const string tagUri = "http://www.last.fm/tag/disco";
|
||||||
|
|
||||||
|
var command = new GetInfoCommand(MAuth.Object, tagName);
|
||||||
|
var expectedTag=new LastTag(tagName,tagUri)
|
||||||
|
{
|
||||||
|
Reach = 34671,
|
||||||
|
Count = 172224,
|
||||||
|
Streamable = true
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var response = CreateResponseMessage(Encoding.UTF8.GetString(TagApiResponses.GetInfoSuccess));
|
||||||
|
var lastResponse = await command.HandleResponse(response);
|
||||||
|
var tag = lastResponse.Content;
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.IsTrue(lastResponse.Success);
|
||||||
|
Assert.AreEqual(expectedTag.Reach,tag.Reach);
|
||||||
|
Assert.AreEqual(expectedTag.Name, tag.Name);
|
||||||
|
Assert.AreEqual(expectedTag.Count, tag.Count);
|
||||||
|
Assert.AreEqual(expectedTag.Streamable, tag.Streamable);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public async Task HandleErrorResponse()
|
||||||
|
{
|
||||||
|
var command = new GetInfoCommand(MAuth.Object, "errorTag");
|
||||||
|
|
||||||
|
var response = CreateResponseMessage(Encoding.UTF8.GetString(TagApiResponses.GetInfoError));
|
||||||
|
|
||||||
|
var parsed = await command.HandleResponse(response);
|
||||||
|
|
||||||
|
Assert.IsFalse(parsed.Success);
|
||||||
|
Assert.IsTrue(parsed.Status == LastResponseStatus.MissingParameters);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -92,6 +92,7 @@
|
|||||||
<Compile Include="Api\Commands\Library\LibraryGetTracksCommandTests.cs" />
|
<Compile Include="Api\Commands\Library\LibraryGetTracksCommandTests.cs" />
|
||||||
<Compile Include="Api\Commands\Library\RemoveScrobbleCommandTests.cs" />
|
<Compile Include="Api\Commands\Library\RemoveScrobbleCommandTests.cs" />
|
||||||
<Compile Include="Api\Commands\Library\RemoveTrackCommandTests.cs" />
|
<Compile Include="Api\Commands\Library\RemoveTrackCommandTests.cs" />
|
||||||
|
<Compile Include="Api\Commands\Tag\GetInfoCommandTests.cs" />
|
||||||
<Compile Include="Api\Commands\Tag\GetSimilarCommandTests.cs" />
|
<Compile Include="Api\Commands\Tag\GetSimilarCommandTests.cs" />
|
||||||
<Compile Include="Api\Commands\TrackApi\GetTrackShoutsCommandTests.cs" />
|
<Compile Include="Api\Commands\TrackApi\GetTrackShoutsCommandTests.cs" />
|
||||||
<Compile Include="Api\Commands\ArtistGetInfoCommandTests.cs" />
|
<Compile Include="Api\Commands\ArtistGetInfoCommandTests.cs" />
|
||||||
@ -174,6 +175,8 @@
|
|||||||
<None Include="Resources\ArtistApi\ArtistGetTopTagsSingle.json" />
|
<None Include="Resources\ArtistApi\ArtistGetTopTagsSingle.json" />
|
||||||
<None Include="Resources\LibraryApi\LibraryGetTracksMultiple.json" />
|
<None Include="Resources\LibraryApi\LibraryGetTracksMultiple.json" />
|
||||||
<None Include="Resources\LibraryApi\LibraryGetTracksSingle.json" />
|
<None Include="Resources\LibraryApi\LibraryGetTracksSingle.json" />
|
||||||
|
<None Include="Resources\Tag\GetInfoError.json" />
|
||||||
|
<None Include="Resources\Tag\GetInfoSuccess.json" />
|
||||||
<None Include="Resources\Tag\GetSimilarError.json" />
|
<None Include="Resources\Tag\GetSimilarError.json" />
|
||||||
<None Include="Resources\Tag\GetSimilarSuccess.json" />
|
<None Include="Resources\Tag\GetSimilarSuccess.json" />
|
||||||
<None Include="Resources\TrackApi\TrackGetShouts.json" />
|
<None Include="Resources\TrackApi\TrackGetShouts.json" />
|
||||||
|
5
src/IF.Lastfm.Core.Tests/Resources/Tag/GetInfoError.json
Normal file
5
src/IF.Lastfm.Core.Tests/Resources/Tag/GetInfoError.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"error": 6,
|
||||||
|
"message": "Invalid tag",
|
||||||
|
"links": []
|
||||||
|
}
|
14
src/IF.Lastfm.Core.Tests/Resources/Tag/GetInfoSuccess.json
Normal file
14
src/IF.Lastfm.Core.Tests/Resources/Tag/GetInfoSuccess.json
Normal file
File diff suppressed because one or more lines are too long
@ -1,7 +1,7 @@
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// <auto-generated>
|
// <auto-generated>
|
||||||
// This code was generated by a tool.
|
// This code was generated by a tool.
|
||||||
// Runtime Version:4.0.30319.0
|
// Runtime Version:4.0.30319.42000
|
||||||
//
|
//
|
||||||
// Changes to this file may cause incorrect behavior and will be lost if
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
// the code is regenerated.
|
// the code is regenerated.
|
||||||
@ -60,6 +60,26 @@ internal TagApiResponses() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Byte[].
|
||||||
|
/// </summary>
|
||||||
|
internal static byte[] GetInfoError {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("GetInfoError", resourceCulture);
|
||||||
|
return ((byte[])(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Byte[].
|
||||||
|
/// </summary>
|
||||||
|
internal static byte[] GetInfoSuccess {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("GetInfoSuccess", resourceCulture);
|
||||||
|
return ((byte[])(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized resource of type System.Byte[].
|
/// Looks up a localized resource of type System.Byte[].
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -118,6 +118,12 @@
|
|||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="GetInfoError" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>Tag\GetInfoError.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name="GetInfoSuccess" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>Tag\GetInfoSuccess.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
<data name="GetSimilarError" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="GetSimilarError" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>tag\getsimilarerror.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>tag\getsimilarerror.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
|
48
src/IF.Lastfm.Core/Api/Commands/Tag/GetInfoCommand.cs
Normal file
48
src/IF.Lastfm.Core/Api/Commands/Tag/GetInfoCommand.cs
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
using System.Net.Http;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using IF.Lastfm.Core.Api.Enums;
|
||||||
|
using IF.Lastfm.Core.Api.Helpers;
|
||||||
|
using IF.Lastfm.Core.Objects;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
namespace IF.Lastfm.Core.Api.Commands.Tag
|
||||||
|
{
|
||||||
|
[ApiMethodName("tag.getInfo")]
|
||||||
|
public class GetInfoCommand:GetAsyncCommandBase<LastResponse<LastTag>>
|
||||||
|
{
|
||||||
|
public string TagName { get; set; }
|
||||||
|
|
||||||
|
public GetInfoCommand(ILastAuth auth, string tagName)
|
||||||
|
: base(auth)
|
||||||
|
{
|
||||||
|
TagName = tagName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SetParameters()
|
||||||
|
{
|
||||||
|
Parameters.Add("tag", TagName);
|
||||||
|
|
||||||
|
DisableCaching();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async override Task<LastResponse<LastTag>> HandleResponse(HttpResponseMessage response)
|
||||||
|
{
|
||||||
|
var json = await response.Content.ReadAsStringAsync();
|
||||||
|
|
||||||
|
LastResponseStatus status;
|
||||||
|
if (LastFm.IsResponseValid(json, out status) && response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var jtoken = JsonConvert.DeserializeObject<JToken>(json);
|
||||||
|
var tag = LastTag.ParseJToken(jtoken.SelectToken("tag"));
|
||||||
|
|
||||||
|
return LastResponse<LastTag>.CreateSuccessResponse(tag);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return LastResponse.CreateErrorResponse<LastResponse<LastTag>>(status);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -7,5 +7,6 @@ namespace IF.Lastfm.Core.Api
|
|||||||
public interface ITagApi
|
public interface ITagApi
|
||||||
{
|
{
|
||||||
Task<PageResponse<LastTag>> GetSimilarAsync(string tagName);
|
Task<PageResponse<LastTag>> GetSimilarAsync(string tagName);
|
||||||
|
Task<LastResponse<LastTag>> GetInfoAsync(string tagName);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -26,5 +26,12 @@ public Task<PageResponse<LastTag>> GetSimilarAsync(string tagName)
|
|||||||
|
|
||||||
return command.ExecuteAsync();
|
return command.ExecuteAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<LastResponse<LastTag>> GetInfoAsync(string tagName)
|
||||||
|
{
|
||||||
|
var command=new GetInfoCommand(Auth,tagName);
|
||||||
|
|
||||||
|
return await command.ExecuteAsync();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -63,6 +63,7 @@
|
|||||||
<Compile Include="Api\Commands\Library\GetTracksCommand.cs" />
|
<Compile Include="Api\Commands\Library\GetTracksCommand.cs" />
|
||||||
<Compile Include="Api\Commands\Library\RemoveScrobbleCommand.cs" />
|
<Compile Include="Api\Commands\Library\RemoveScrobbleCommand.cs" />
|
||||||
<Compile Include="Api\Commands\Library\RemoveTrackCommand.cs" />
|
<Compile Include="Api\Commands\Library\RemoveTrackCommand.cs" />
|
||||||
|
<Compile Include="Api\Commands\Tag\GetInfoCommand.cs" />
|
||||||
<Compile Include="Api\Commands\Tag\GetSimilarCommand.cs" />
|
<Compile Include="Api\Commands\Tag\GetSimilarCommand.cs" />
|
||||||
<Compile Include="Api\Commands\Track\ScrobbleCommand.cs" />
|
<Compile Include="Api\Commands\Track\ScrobbleCommand.cs" />
|
||||||
<Compile Include="Api\Commands\Track\UpdateNowPlayingCommand.cs" />
|
<Compile Include="Api\Commands\Track\UpdateNowPlayingCommand.cs" />
|
||||||
|
@ -17,6 +17,11 @@ public class LastTag : ILastfmObject
|
|||||||
|
|
||||||
public bool? Streamable { get; set; }
|
public bool? Streamable { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The number of users that have used this tag
|
||||||
|
/// </summary>
|
||||||
|
public int? Reach { get; set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public LastTag()
|
public LastTag()
|
||||||
@ -36,7 +41,7 @@ internal static LastTag ParseJToken(JToken token, string relatedTag = null)
|
|||||||
var url = token.Value<string>("url");
|
var url = token.Value<string>("url");
|
||||||
|
|
||||||
int? count = null;
|
int? count = null;
|
||||||
var countToken = token.SelectToken("count");
|
var countToken = token.SelectToken("count") ?? token.SelectToken("taggings");
|
||||||
if (countToken != null)
|
if (countToken != null)
|
||||||
{
|
{
|
||||||
count = countToken.ToObject<int?>();
|
count = countToken.ToObject<int?>();
|
||||||
@ -49,10 +54,18 @@ internal static LastTag ParseJToken(JToken token, string relatedTag = null)
|
|||||||
streamable = Convert.ToBoolean(streamableToken.Value<int>());
|
streamable = Convert.ToBoolean(streamableToken.Value<int>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int? reach = null;
|
||||||
|
var reachToken = token.SelectToken("reach");
|
||||||
|
if (reachToken != null)
|
||||||
|
{
|
||||||
|
reach = reachToken.ToObject<int?>();
|
||||||
|
}
|
||||||
|
|
||||||
return new LastTag(name, url, count)
|
return new LastTag(name, url, count)
|
||||||
{
|
{
|
||||||
Streamable = streamable,
|
Streamable = streamable,
|
||||||
RelatedTo = relatedTag
|
RelatedTo = relatedTag,
|
||||||
|
Reach = reach
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user