From 1e6aa46f49e0cce94c5243f6f31e9acbf7ff67a8 Mon Sep 17 00:00:00 2001 From: Rikki Tooley Date: Sun, 12 Oct 2014 16:30:17 +0100 Subject: [PATCH] Reorganising test resources and GetTrackShoutsCommandTests --- .../Api/Commands/CommandTestsBase.cs | 10 +- .../TrackApi/GetTrackShoutsCommandTests.cs | 47 +++++-- .../IF.Lastfm.Core.Tests.csproj | 31 ++-- .../Objects/AlbumTests.cs | 13 +- .../{ => AlbumApi}/AlbumGetInfo.json | 0 .../Resources/AlbumApiResponses.Designer.cs | 73 ++++++++++ .../AlbumApiResponses.resx} | 8 +- .../{ => TrackApi}/TrackGetShouts.json | 0 .../TrackApi/TrackGetShoutsEmpty.json | 11 ++ .../TrackApi/TrackGetShoutsError.json | 5 + .../{ => TrackApi}/TrackGetShoutsSingle.json | 0 .../TrackApiResponses.Designer.cs} | 28 ++-- .../Resources/TrackApiResponses.resx | 133 ++++++++++++++++++ .../Api/Helpers/PageResponse.cs | 17 ++- 14 files changed, 318 insertions(+), 58 deletions(-) rename src/IF.Lastfm.Core.Tests/Resources/{ => AlbumApi}/AlbumGetInfo.json (100%) create mode 100644 src/IF.Lastfm.Core.Tests/Resources/AlbumApiResponses.Designer.cs rename src/IF.Lastfm.Core.Tests/{TestData.resx => Resources/AlbumApiResponses.resx} (90%) rename src/IF.Lastfm.Core.Tests/Resources/{ => TrackApi}/TrackGetShouts.json (100%) create mode 100644 src/IF.Lastfm.Core.Tests/Resources/TrackApi/TrackGetShoutsEmpty.json create mode 100644 src/IF.Lastfm.Core.Tests/Resources/TrackApi/TrackGetShoutsError.json rename src/IF.Lastfm.Core.Tests/Resources/{ => TrackApi}/TrackGetShoutsSingle.json (100%) rename src/IF.Lastfm.Core.Tests/{TestData.Designer.cs => Resources/TrackApiResponses.Designer.cs} (82%) create mode 100644 src/IF.Lastfm.Core.Tests/Resources/TrackApiResponses.resx diff --git a/src/IF.Lastfm.Core.Tests/Api/Commands/CommandTestsBase.cs b/src/IF.Lastfm.Core.Tests/Api/Commands/CommandTestsBase.cs index 514d52b..6f45b35 100644 --- a/src/IF.Lastfm.Core.Tests/Api/Commands/CommandTestsBase.cs +++ b/src/IF.Lastfm.Core.Tests/Api/Commands/CommandTestsBase.cs @@ -1,12 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using IF.Lastfm.Core.Api; +using Moq; using System.Net; using System.Net.Http; using System.Text; using System.Threading.Tasks; -using IF.Lastfm.Core.Api; -using Moq; namespace IF.Lastfm.Core.Tests.Api.Commands { @@ -21,6 +18,9 @@ protected CommandTestsBase() public abstract void Constructor(); public abstract Task HandleSuccessResponse(); + public abstract Task HandleResponseSingle(); + public abstract Task HandleEmptyResponse(); + public abstract Task HandleErrorResponse(); protected HttpResponseMessage CreateResponseMessage(string message) { diff --git a/src/IF.Lastfm.Core.Tests/Api/Commands/TrackApi/GetTrackShoutsCommandTests.cs b/src/IF.Lastfm.Core.Tests/Api/Commands/TrackApi/GetTrackShoutsCommandTests.cs index d5c139c..930a84b 100644 --- a/src/IF.Lastfm.Core.Tests/Api/Commands/TrackApi/GetTrackShoutsCommandTests.cs +++ b/src/IF.Lastfm.Core.Tests/Api/Commands/TrackApi/GetTrackShoutsCommandTests.cs @@ -1,8 +1,9 @@ -using System.Linq; +using IF.Lastfm.Core.Api.Commands.TrackApi; +using IF.Lastfm.Core.Tests.Resources; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System.Linq; using System.Text; using System.Threading.Tasks; -using IF.Lastfm.Core.Api.Commands.TrackApi; -using Microsoft.VisualStudio.TestTools.UnitTesting; namespace IF.Lastfm.Core.Tests.Api.Commands.TrackApi { @@ -32,26 +33,50 @@ public override void Constructor() [TestMethod] public async override Task HandleSuccessResponse() { - var response = CreateResponseMessage(Encoding.UTF8.GetString(TestData.TrackGetShouts)); + var response = CreateResponseMessage(Encoding.UTF8.GetString(TrackApiResponses.TrackGetShouts)); var parsed = await _command.HandleResponse(response); - + + Assert.IsTrue(parsed.Success); + Assert.IsNotNull(parsed.Content); Assert.IsTrue(parsed.Page == 5); Assert.IsTrue(parsed.Content.Count() == 7); } - /// - /// The shouts API uses a different schema when there's only one shout in the page - /// - /// [TestMethod] - public async Task HandleResponseSingle() + public async override Task HandleResponseSingle() { - var response = CreateResponseMessage(Encoding.UTF8.GetString(TestData.TrackGetShoutsSingle)); + var response = CreateResponseMessage(Encoding.UTF8.GetString(TrackApiResponses.TrackGetShoutsSingle)); var parsed = await _command.HandleResponse(response); + Assert.IsTrue(parsed.Success); + Assert.IsNotNull(parsed.Content); Assert.IsTrue(parsed.Content.Count() == 1); } + + [TestMethod] + public async override Task HandleEmptyResponse() + { + var response = CreateResponseMessage(Encoding.UTF8.GetString(TrackApiResponses.TrackGetShoutsEmpty)); + + var parsed = await _command.HandleResponse(response); + + Assert.IsTrue(parsed.Success); + Assert.IsNotNull(parsed.Content); + Assert.IsTrue(!parsed.Content.Any()); + } + + [TestMethod] + public async override Task HandleErrorResponse() + { + var response = CreateResponseMessage(Encoding.UTF8.GetString(TrackApiResponses.TrackGetShoutsError)); + + var parsed = await _command.HandleResponse(response); + + Assert.IsFalse(parsed.Success); + 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 5e589d6..e7bdcd7 100644 --- a/src/IF.Lastfm.Core.Tests/IF.Lastfm.Core.Tests.csproj +++ b/src/IF.Lastfm.Core.Tests/IF.Lastfm.Core.Tests.csproj @@ -76,10 +76,15 @@ - + True True - TestData.resx + AlbumApiResponses.resx + + + True + True + TrackApiResponses.resx @@ -87,17 +92,22 @@ Designer - - + + + + + - + ResXFileCodeGenerator - TestData.Designer.cs + Designer + AlbumApiResponses.Designer.cs + + + ResXFileCodeGenerator + TrackApiResponses.Designer.cs - - - @@ -105,6 +115,9 @@ IF.Lastfm.Core + + + diff --git a/src/IF.Lastfm.Core.Tests/Objects/AlbumTests.cs b/src/IF.Lastfm.Core.Tests/Objects/AlbumTests.cs index f094015..ef8b540 100644 --- a/src/IF.Lastfm.Core.Tests/Objects/AlbumTests.cs +++ b/src/IF.Lastfm.Core.Tests/Objects/AlbumTests.cs @@ -1,12 +1,9 @@ -using System; +using IF.Lastfm.Core.Objects; +using IF.Lastfm.Core.Tests.Resources; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; using System.Collections.Generic; using System.Text; -using IF.Lastfm.Core.Api; -using IF.Lastfm.Core.Objects; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using Moq; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; namespace IF.Lastfm.Core.Tests.Objects { @@ -15,7 +12,7 @@ public class AlbumTests { public void AlbumParsesValidJson() { - var jo = ResourceManager.LoadResource(Encoding.UTF8.GetString(TestData.AlbumGetInfo)); + var jo = ResourceManager.LoadResource(Encoding.UTF8.GetString(AlbumApiResponses.AlbumGetInfo)); var parsed = LastAlbum.ParseJToken(jo.SelectToken("album")); diff --git a/src/IF.Lastfm.Core.Tests/Resources/AlbumGetInfo.json b/src/IF.Lastfm.Core.Tests/Resources/AlbumApi/AlbumGetInfo.json similarity index 100% rename from src/IF.Lastfm.Core.Tests/Resources/AlbumGetInfo.json rename to src/IF.Lastfm.Core.Tests/Resources/AlbumApi/AlbumGetInfo.json diff --git a/src/IF.Lastfm.Core.Tests/Resources/AlbumApiResponses.Designer.cs b/src/IF.Lastfm.Core.Tests/Resources/AlbumApiResponses.Designer.cs new file mode 100644 index 0000000..5dca036 --- /dev/null +++ b/src/IF.Lastfm.Core.Tests/Resources/AlbumApiResponses.Designer.cs @@ -0,0 +1,73 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.34014 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IF.Lastfm.Core.Tests.Resources { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class AlbumApiResponses { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal AlbumApiResponses() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IF.Lastfm.Core.Tests.Resources.AlbumApiResponses", typeof(AlbumApiResponses).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] AlbumGetInfo { + get { + object obj = ResourceManager.GetObject("AlbumGetInfo", resourceCulture); + return ((byte[])(obj)); + } + } + } +} diff --git a/src/IF.Lastfm.Core.Tests/TestData.resx b/src/IF.Lastfm.Core.Tests/Resources/AlbumApiResponses.resx similarity index 90% rename from src/IF.Lastfm.Core.Tests/TestData.resx rename to src/IF.Lastfm.Core.Tests/Resources/AlbumApiResponses.resx index c583852..33c90eb 100644 --- a/src/IF.Lastfm.Core.Tests/TestData.resx +++ b/src/IF.Lastfm.Core.Tests/Resources/AlbumApiResponses.resx @@ -119,12 +119,6 @@ - resources\albumgetinfo.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - resources\trackgetshouts.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - resources\trackgetshoutssingle.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + AlbumApi\AlbumGetInfo.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 \ No newline at end of file diff --git a/src/IF.Lastfm.Core.Tests/Resources/TrackGetShouts.json b/src/IF.Lastfm.Core.Tests/Resources/TrackApi/TrackGetShouts.json similarity index 100% rename from src/IF.Lastfm.Core.Tests/Resources/TrackGetShouts.json rename to src/IF.Lastfm.Core.Tests/Resources/TrackApi/TrackGetShouts.json diff --git a/src/IF.Lastfm.Core.Tests/Resources/TrackApi/TrackGetShoutsEmpty.json b/src/IF.Lastfm.Core.Tests/Resources/TrackApi/TrackGetShoutsEmpty.json new file mode 100644 index 0000000..fabef15 --- /dev/null +++ b/src/IF.Lastfm.Core.Tests/Resources/TrackApi/TrackGetShoutsEmpty.json @@ -0,0 +1,11 @@ +{ + "shouts": { + "#text": "\n", + "artist": "Cristobal Tapia de Veer", + "track": "The Experiment", + "page": "0", + "perPage": "50", + "totalPages": "0", + "total": "0" + } +} diff --git a/src/IF.Lastfm.Core.Tests/Resources/TrackApi/TrackGetShoutsError.json b/src/IF.Lastfm.Core.Tests/Resources/TrackApi/TrackGetShoutsError.json new file mode 100644 index 0000000..e16363f --- /dev/null +++ b/src/IF.Lastfm.Core.Tests/Resources/TrackApi/TrackGetShoutsError.json @@ -0,0 +1,5 @@ +{ + "error": 6, + "message": "Artist not found", + "links": [] +} diff --git a/src/IF.Lastfm.Core.Tests/Resources/TrackGetShoutsSingle.json b/src/IF.Lastfm.Core.Tests/Resources/TrackApi/TrackGetShoutsSingle.json similarity index 100% rename from src/IF.Lastfm.Core.Tests/Resources/TrackGetShoutsSingle.json rename to src/IF.Lastfm.Core.Tests/Resources/TrackApi/TrackGetShoutsSingle.json diff --git a/src/IF.Lastfm.Core.Tests/TestData.Designer.cs b/src/IF.Lastfm.Core.Tests/Resources/TrackApiResponses.Designer.cs similarity index 82% rename from src/IF.Lastfm.Core.Tests/TestData.Designer.cs rename to src/IF.Lastfm.Core.Tests/Resources/TrackApiResponses.Designer.cs index 0e27c92..32e086d 100644 --- a/src/IF.Lastfm.Core.Tests/TestData.Designer.cs +++ b/src/IF.Lastfm.Core.Tests/Resources/TrackApiResponses.Designer.cs @@ -1,14 +1,14 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.32559 +// Runtime Version:4.0.30319.34014 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ -namespace IF.Lastfm.Core.Tests { +namespace IF.Lastfm.Core.Tests.Resources { using System; @@ -22,14 +22,14 @@ namespace IF.Lastfm.Core.Tests { [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class TestData { + internal class TrackApiResponses { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal TestData() { + internal TrackApiResponses() { } /// @@ -39,7 +39,7 @@ internal TestData() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IF.Lastfm.Core.Tests.TestData", typeof(TestData).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IF.Lastfm.Core.Tests.Resources.TrackApiResponses", typeof(TrackApiResponses).Assembly); resourceMan = temp; } return resourceMan; @@ -63,9 +63,9 @@ internal TestData() { /// /// Looks up a localized resource of type System.Byte[]. /// - internal static byte[] AlbumGetInfo { + internal static byte[] TrackGetShouts { get { - object obj = ResourceManager.GetObject("AlbumGetInfo", resourceCulture); + object obj = ResourceManager.GetObject("TrackGetShouts", resourceCulture); return ((byte[])(obj)); } } @@ -73,9 +73,19 @@ internal static byte[] AlbumGetInfo { /// /// Looks up a localized resource of type System.Byte[]. /// - internal static byte[] TrackGetShouts { + internal static byte[] TrackGetShoutsEmpty { get { - object obj = ResourceManager.GetObject("TrackGetShouts", resourceCulture); + object obj = ResourceManager.GetObject("TrackGetShoutsEmpty", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] TrackGetShoutsError { + get { + object obj = ResourceManager.GetObject("TrackGetShoutsError", resourceCulture); return ((byte[])(obj)); } } diff --git a/src/IF.Lastfm.Core.Tests/Resources/TrackApiResponses.resx b/src/IF.Lastfm.Core.Tests/Resources/TrackApiResponses.resx new file mode 100644 index 0000000..373f487 --- /dev/null +++ b/src/IF.Lastfm.Core.Tests/Resources/TrackApiResponses.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + TrackApi\TrackGetShouts.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + TrackApi\TrackGetShoutsEmpty.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + TrackApi\TrackGetShoutsError.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + TrackApi\TrackGetShoutsSingle.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/src/IF.Lastfm.Core/Api/Helpers/PageResponse.cs b/src/IF.Lastfm.Core/Api/Helpers/PageResponse.cs index 13d0347..5cda4f7 100644 --- a/src/IF.Lastfm.Core/Api/Helpers/PageResponse.cs +++ b/src/IF.Lastfm.Core/Api/Helpers/PageResponse.cs @@ -17,11 +17,12 @@ public PageResponse() { Page = 1; TotalPages = 1; + Content = new List(); } #region Properties - public IEnumerable Content { get; internal set; } + public List Content { get; internal set; } public int Page { get; internal set; } @@ -87,31 +88,31 @@ public static PageResponse CreateSuccessResponse(IEnumerable content) { var r = new PageResponse { - Content = content, Success = true, Error = LastFmApiError.None }; + r.Content.AddRange(content); + return r; } public static PageResponse CreateSuccessResponse(JToken itemsToken, JToken pageInfoToken, Func parseToken, bool isOpenQueryToken = false) { var pageresponse = CreateSuccessResponse(); - var content = new List(); - if (itemsToken.Children().Any()) + if (itemsToken != null && itemsToken.Children().Any()) { // array notation isn't used on the api when only one object is available if (itemsToken.Type != JTokenType.Array) { var item = parseToken(itemsToken); - content.Add(item); + pageresponse.Content.Add(item); } else { var items = itemsToken.Children().Select(parseToken); - content.AddRange(items); + pageresponse.Content.AddRange(items); } } @@ -128,11 +129,9 @@ public static PageResponse CreateSuccessResponse(JToken itemsToken, JToken pa } else { - pageresponse.AddDefaultPageInfo(content.Count); + pageresponse.AddDefaultPageInfo(pageresponse.Content.Count); } - pageresponse.Content = content; - return pageresponse; }