GetAlbumShoutsCommandTests, fix timezone issue with Shout.TimePosted

This commit is contained in:
Rikki Tooley 2014-11-16 20:58:14 +00:00
parent f4ea6ca238
commit c7cafb45d6
12 changed files with 227 additions and 21 deletions

View File

@ -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());
}
}
}

View File

@ -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;

View File

@ -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" />

View File

@ -0,0 +1,5 @@
{
"error": 6,
"message": "Album not found",
"links": []
}

View File

@ -0,0 +1,11 @@
{
"shouts": {
"#text": "\n",
"artist": "Solar Fields",
"album": "[ Origin #01 ]",
"page": "0",
"perPage": "1",
"totalPages": "0",
"total": "0"
}
}

View File

@ -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"
}
}
}

View File

@ -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"
}
}
}

View File

@ -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>

View File

@ -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>

View File

@ -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
};

View File

@ -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)

View File

@ -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;