mirror of
https://github.com/Sarsoo/IF.Lastfm.git
synced 2024-10-16 23:13:07 +01:00
GetAlbumShoutsCommandTests, fix timezone issue with Shout.TimePosted
This commit is contained in:
parent
f4ea6ca238
commit
c7cafb45d6
@ -0,0 +1,85 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using IF.Lastfm.Core.Api.Commands.AlbumApi;
|
||||
using IF.Lastfm.Core.Api.Enums;
|
||||
using IF.Lastfm.Core.Objects;
|
||||
using IF.Lastfm.Core.Tests.Resources;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace IF.Lastfm.Core.Tests.Api.Commands.AlbumApi
|
||||
{
|
||||
[TestClass]
|
||||
public class GetAlbumShoutsCommandTests : CommandTestsBase
|
||||
{
|
||||
private GetAlbumShoutsCommand _command;
|
||||
|
||||
public GetAlbumShoutsCommandTests()
|
||||
{
|
||||
_command = new GetAlbumShoutsCommand(MAuth.Object, "Visions", "Grimes");
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task HandleSuccessResponse()
|
||||
{
|
||||
var response = CreateResponseMessage(Encoding.UTF8.GetString(AlbumApiResponses.AlbumGetShoutsMultiple));
|
||||
|
||||
var parsed = await _command.HandleResponse(response);
|
||||
|
||||
Assert.IsTrue(parsed.Success);
|
||||
Assert.IsNotNull(parsed.Content);
|
||||
|
||||
var expectedShouts = new List<Shout>
|
||||
{
|
||||
new Shout("uhIgor", "Nunca vou cansar disso.", "Thu, 23 Oct 2014 02:20:30"),
|
||||
new Shout("Zachary-K",
|
||||
"Oblivion is the best song on whole album. Maybe i dig it but i don't want to really. Or i'm not in the right mood for it.",
|
||||
"Wed, 17 Sep 2014 21:04:36")
|
||||
};
|
||||
|
||||
var expectedJson = JsonConvert.SerializeObject(expectedShouts, Formatting.Indented);
|
||||
var actualJson = JsonConvert.SerializeObject(parsed.Content, Formatting.Indented);
|
||||
|
||||
Assert.AreEqual(expectedJson, actualJson, expectedJson.DifferencesTo(actualJson));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task HandleResponseSingle()
|
||||
{
|
||||
var response = CreateResponseMessage(Encoding.UTF8.GetString(AlbumApiResponses.AlbumGetShoutsSingle));
|
||||
|
||||
var parsed = await _command.HandleResponse(response);
|
||||
|
||||
Assert.IsTrue(parsed.Success);
|
||||
Assert.IsNotNull(parsed.Content);
|
||||
Assert.IsTrue(parsed.Content.Count() == 1);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task HandleEmptyResponse()
|
||||
{
|
||||
var response = CreateResponseMessage(Encoding.UTF8.GetString(AlbumApiResponses.AlbumGetShoutsEmpty));
|
||||
|
||||
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.AlbumGetShoutsAlbumMissing));
|
||||
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +1,4 @@
|
||||
using IF.Lastfm.Core.Api.Commands.AlbumApi;
|
||||
using IF.Lastfm.Core.Api.Commands.TrackApi;
|
||||
using IF.Lastfm.Core.Api.Enums;
|
||||
using IF.Lastfm.Core.Tests.Resources;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
@ -69,6 +69,7 @@
|
||||
</Choose>
|
||||
<ItemGroup>
|
||||
<Compile Include="Api\Commands\AlbumApi\GetAlbumInfoCommandTests.cs" />
|
||||
<Compile Include="Api\Commands\AlbumApi\GetAlbumShoutsCommandTests.cs" />
|
||||
<Compile Include="Api\Commands\AlbumApi\SearchAlbumsCommandTests.cs" />
|
||||
<Compile Include="Api\Commands\CommandTestsBase.cs" />
|
||||
<Compile Include="Api\Commands\TrackApi\GetTrackShoutsCommandTests.cs" />
|
||||
@ -97,6 +98,10 @@
|
||||
<None Include="packages.config" />
|
||||
<None Include="Resources\AlbumApi\AlbumGetInfoMissing.json" />
|
||||
<None Include="Resources\AlbumApi\AlbumGetInfoSuccess.json" />
|
||||
<None Include="Resources\AlbumApi\AlbumGetShoutsAlbumMissing.json" />
|
||||
<None Include="Resources\AlbumApi\AlbumGetShoutsEmpty.json" />
|
||||
<None Include="Resources\AlbumApi\AlbumGetShoutsMultiple.json" />
|
||||
<None Include="Resources\AlbumApi\AlbumGetShoutsSingle.json" />
|
||||
<None Include="Resources\AlbumApi\AlbumSearch.json" />
|
||||
<None Include="Resources\AlbumApi\AlbumSearchEmpty.json" />
|
||||
<None Include="Resources\AlbumApi\AlbumSearchError.json" />
|
||||
|
@ -0,0 +1,5 @@
|
||||
{
|
||||
"error": 6,
|
||||
"message": "Album not found",
|
||||
"links": []
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
{
|
||||
"shouts": {
|
||||
"#text": "\n",
|
||||
"artist": "Solar Fields",
|
||||
"album": "[ Origin #01 ]",
|
||||
"page": "0",
|
||||
"perPage": "1",
|
||||
"totalPages": "0",
|
||||
"total": "0"
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
{
|
||||
"shouts": {
|
||||
"shout": [
|
||||
{
|
||||
"body": "Nunca vou cansar disso.",
|
||||
"author": "uhIgor",
|
||||
"date": "Thu, 23 Oct 2014 02:20:30"
|
||||
},
|
||||
{
|
||||
"body": "Oblivion is the best song on whole album. Maybe i dig it but i don't want to really. Or i'm not in the right mood for it.",
|
||||
"author": "Zachary-K",
|
||||
"date": "Wed, 17 Sep 2014 21:04:36"
|
||||
}
|
||||
],
|
||||
"@attr": {
|
||||
"artist": "Grimes",
|
||||
"album": "Visions",
|
||||
"page": "0",
|
||||
"perPage": "2",
|
||||
"totalPages": "78",
|
||||
"total": "155"
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
{
|
||||
"shouts": {
|
||||
"shout": {
|
||||
"body": "Nunca vou cansar disso.",
|
||||
"author": "uhIgor",
|
||||
"date": "Thu, 23 Oct 2014 02:20:30"
|
||||
},
|
||||
"@attr": {
|
||||
"artist": "Grimes",
|
||||
"album": "Visions",
|
||||
"page": "0",
|
||||
"perPage": "1",
|
||||
"totalPages": "155",
|
||||
"total": "155"
|
||||
}
|
||||
}
|
||||
}
|
@ -80,6 +80,46 @@ internal static byte[] AlbumGetInfoSuccess {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Byte[].
|
||||
/// </summary>
|
||||
internal static byte[] AlbumGetShoutsAlbumMissing {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("AlbumGetShoutsAlbumMissing", resourceCulture);
|
||||
return ((byte[])(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Byte[].
|
||||
/// </summary>
|
||||
internal static byte[] AlbumGetShoutsEmpty {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("AlbumGetShoutsEmpty", resourceCulture);
|
||||
return ((byte[])(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Byte[].
|
||||
/// </summary>
|
||||
internal static byte[] AlbumGetShoutsMultiple {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("AlbumGetShoutsMultiple", resourceCulture);
|
||||
return ((byte[])(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Byte[].
|
||||
/// </summary>
|
||||
internal static byte[] AlbumGetShoutsSingle {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("AlbumGetShoutsSingle", resourceCulture);
|
||||
return ((byte[])(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Byte[].
|
||||
/// </summary>
|
||||
|
@ -124,6 +124,18 @@
|
||||
<data name="AlbumGetInfoSuccess" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>AlbumApi\AlbumGetInfoSuccess.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="AlbumGetShoutsAlbumMissing" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>albumapi\albumgetshoutsalbummissing.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="AlbumGetShoutsEmpty" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>AlbumApi\AlbumGetShoutsEmpty.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="AlbumGetShoutsMultiple" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>albumapi\albumgetshoutsmultiple.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="AlbumGetShoutsSingle" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>albumapi\albumgetshoutssingle.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="AlbumSearch" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>AlbumApi\AlbumSearch.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
|
@ -17,10 +17,8 @@ public AlbumApi(ILastAuth auth)
|
||||
|
||||
public async Task<LastResponse<LastAlbum>> GetAlbumInfoAsync(string artistname, string albumname, bool autocorrect = false)
|
||||
{
|
||||
var command = new GetAlbumInfoCommand(Auth)
|
||||
var command = new GetAlbumInfoCommand(Auth, albumname, artistname)
|
||||
{
|
||||
ArtistName = artistname,
|
||||
AlbumName = albumname,
|
||||
Autocorrect = autocorrect
|
||||
};
|
||||
|
||||
|
@ -25,6 +25,13 @@ public GetAlbumInfoCommand(ILastAuth auth)
|
||||
Method = "album.getInfo";
|
||||
}
|
||||
|
||||
public GetAlbumInfoCommand(ILastAuth auth, string album, string artist)
|
||||
: this(auth)
|
||||
{
|
||||
AlbumName = album;
|
||||
ArtistName = artist;
|
||||
}
|
||||
|
||||
public override void SetParameters()
|
||||
{
|
||||
if (AlbumMbid != null)
|
||||
|
@ -1,9 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using IF.Lastfm.Core.Api.Helpers;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System;
|
||||
|
||||
namespace IF.Lastfm.Core.Objects
|
||||
{
|
||||
@ -12,29 +8,36 @@ public class Shout : ILastfmObject
|
||||
#region Properties
|
||||
|
||||
public string Body { get; set; }
|
||||
|
||||
public string Author { get; set; }
|
||||
public DateTime TimePosted { get; set; }
|
||||
|
||||
public DateTimeOffset TimePosted { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
public Shout()
|
||||
{
|
||||
}
|
||||
|
||||
public Shout(string author, string body, string time)
|
||||
{
|
||||
Author = author;
|
||||
Body = body;
|
||||
TimePosted = DateTime.Parse(time);
|
||||
}
|
||||
|
||||
public static Shout ParseJToken(JToken token)
|
||||
{
|
||||
var s = new Shout();
|
||||
|
||||
s.Body = token.Value<string>("body");
|
||||
s.Author = token.Value<string>("author");
|
||||
|
||||
|
||||
var provider = CultureInfo.InvariantCulture;
|
||||
|
||||
|
||||
var date = token.Value<string>("date");
|
||||
DateTime time;
|
||||
// Tue, 18 Jun 2013 17:39:50
|
||||
var success = DateTime.TryParseExact(date, "ddd, dd MMM yyyy HH:mm:ss", provider, DateTimeStyles.AssumeUniversal, out time);
|
||||
|
||||
if (success)
|
||||
DateTimeOffset postedAt;
|
||||
if (DateTimeOffset.TryParse(date, out postedAt))
|
||||
{
|
||||
s.TimePosted = time;
|
||||
s.TimePosted = postedAt;
|
||||
}
|
||||
|
||||
return s;
|
||||
|
Loading…
Reference in New Issue
Block a user