Fixed Scrobbler tests

This commit is contained in:
Johan Klinge 2018-12-04 11:19:57 +01:00
parent 014cd65654
commit cc0efd1397
2 changed files with 30 additions and 10 deletions

View File

@ -19,10 +19,12 @@
<ItemGroup> <ItemGroup>
<Content Remove="Resources\**\*.json" /> <Content Remove="Resources\**\*.json" />
<Content Remove="Resources\TrackApi\*.txt" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="Resources\**\*.json" /> <EmbeddedResource Include="Resources\**\*.json" />
<EmbeddedResource Include="Resources\TrackApi\*.txt" />
</ItemGroup> </ItemGroup>
<!-- <!--

View File

@ -1,8 +1,10 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Net.Http; using System.Net.Http;
using System.Reflection;
using System.Threading.Tasks; using System.Threading.Tasks;
using IF.Lastfm.Core.Api; using IF.Lastfm.Core.Api;
using IF.Lastfm.Core.Api.Enums; using IF.Lastfm.Core.Api.Enums;
@ -58,8 +60,9 @@ private List<Scrobble> GetTestScrobbles()
return testScrobbles; return testScrobbles;
} }
private HttpRequestMessage GenerateExpectedRequestMessage(string messageBody) private HttpRequestMessage GenerateExpectedRequestMessage(string resource)
{ {
var messageBody = GetFileContents(resource);
var parameters = messageBody.Split('&') var parameters = messageBody.Split('&')
.Select(pair => pair.Split('=')) .Select(pair => pair.Split('='))
.Select(arr => new KeyValuePair<string, string>(arr[0], arr[1])); .Select(arr => new KeyValuePair<string, string>(arr[0], arr[1]));
@ -72,6 +75,21 @@ private HttpRequestMessage GenerateExpectedRequestMessage(string messageBody)
return requestMessage; return requestMessage;
} }
private string GetFileContents(string sampleFile)
{
var asm = Assembly.GetExecutingAssembly();
var resource = string.Format("IF.Lastfm.Core.Tests.Resources.{0}", sampleFile);
using (var stream = asm.GetManifestResourceStream(resource))
{
if (stream != null)
{
var reader = new StreamReader(stream);
return reader.ReadToEnd();
}
}
return string.Empty;
}
[SetUp] [SetUp]
public virtual void Initialise() public virtual void Initialise()
{ {
@ -128,7 +146,7 @@ protected async Task<ScrobbleResponse> ExecuteTestInternal(IEnumerable<Scrobble>
[Test] [Test]
public async Task ScrobbleSingleSuccessful() public async Task ScrobbleSingleSuccessful()
{ {
var requestMessage = GenerateExpectedRequestMessage(TrackApiResponses.TrackScrobbleSingleRequestBody); var requestMessage = GenerateExpectedRequestMessage("TrackApi.TrackScrobbleSingleRequestBody.txt");
var testScrobbles = GetTestScrobbles().Take(1); var testScrobbles = GetTestScrobbles().Take(1);
var responseMessage = TestHelper.CreateResponseMessage(HttpStatusCode.OK, "TrackApi.TrackScrobbleSuccess.json"); var responseMessage = TestHelper.CreateResponseMessage(HttpStatusCode.OK, "TrackApi.TrackScrobbleSuccess.json");
@ -140,10 +158,10 @@ public async Task ScrobbleSingleSuccessful()
[Test] [Test]
public async Task ScrobbleMultipleSuccessful() public async Task ScrobbleMultipleSuccessful()
{ {
var requestMessage = GenerateExpectedRequestMessage(TrackApiResponses.TrackScrobbleMultipleRequestBody); var requestMessage = GenerateExpectedRequestMessage("TrackApi.TrackScrobbleMultipleRequestBody.txt");
var testScrobbles = GetTestScrobbles(); var testScrobbles = GetTestScrobbles();
var responseMessage = TestHelper.CreateResponseMessage(HttpStatusCode.OK, "TrackApi.TrackScrobbleSuccess"); var responseMessage = TestHelper.CreateResponseMessage(HttpStatusCode.OK, "TrackApi.TrackScrobbleSuccess.json");
var scrobbleResponse = await ExecuteTestInternal(testScrobbles, responseMessage, requestMessage); var scrobbleResponse = await ExecuteTestInternal(testScrobbles, responseMessage, requestMessage);
Assert.AreEqual(LastResponseStatus.Successful, scrobbleResponse.Status); Assert.AreEqual(LastResponseStatus.Successful, scrobbleResponse.Status);
@ -155,7 +173,7 @@ public async Task ScrobblesExistingCachedTracks()
var testScrobbles = GetTestScrobbles(); var testScrobbles = GetTestScrobbles();
// first request fails so something goes into the cache // first request fails so something goes into the cache
var responseMessage1 = TestHelper.CreateResponseMessage(HttpStatusCode.Forbidden, "TrackApi.TrackScrobbleBadAuthError"); var responseMessage1 = TestHelper.CreateResponseMessage(HttpStatusCode.Forbidden, "TrackApi.TrackScrobbleBadAuthError.json");
var scrobblesToCache = testScrobbles.Take(1); var scrobblesToCache = testScrobbles.Take(1);
var scrobbleResponse1 = await ExecuteTestInternal(scrobblesToCache, responseMessage1); var scrobbleResponse1 = await ExecuteTestInternal(scrobblesToCache, responseMessage1);
@ -168,8 +186,8 @@ public async Task ScrobblesExistingCachedTracks()
var scrobblesToSend = testScrobbles.Skip(1).Take(1); var scrobblesToSend = testScrobbles.Skip(1).Take(1);
var requestMessage2 = GenerateExpectedRequestMessage(TrackApiResponses.TrackScrobbleTwoRequestBody); var requestMessage2 = GenerateExpectedRequestMessage("TrackApi.TrackScrobbleTwoRequestBody.txt");
var responseMessage2 = TestHelper.CreateResponseMessage(HttpStatusCode.OK, "TrackApi.TrackScrobbleSuccess2"); var responseMessage2 = TestHelper.CreateResponseMessage(HttpStatusCode.OK, "TrackApi.TrackScrobbleSuccess2.json");
var scrobbleResponse2 = await ExecuteTestInternal(scrobblesToSend, responseMessage2, requestMessage2); var scrobbleResponse2 = await ExecuteTestInternal(scrobblesToSend, responseMessage2, requestMessage2);
Assert.IsTrue(scrobbleResponse2.Success); Assert.IsTrue(scrobbleResponse2.Success);
@ -184,10 +202,10 @@ public async Task ScrobblesExistingCachedTracks()
[Test] [Test]
public async Task CorrectResponseWithBadAuth() public async Task CorrectResponseWithBadAuth()
{ {
var requestMessage = GenerateExpectedRequestMessage(TrackApiResponses.TrackScrobbleMultipleRequestBody); var requestMessage = GenerateExpectedRequestMessage("TrackApi.TrackScrobbleMultipleRequestBody.txt");
var testScrobbles = GetTestScrobbles(); var testScrobbles = GetTestScrobbles();
var responseMessage = TestHelper.CreateResponseMessage(HttpStatusCode.Forbidden, "TrackApi.TrackScrobbleBadAuthError"); var responseMessage = TestHelper.CreateResponseMessage(HttpStatusCode.Forbidden, "TrackApi.TrackScrobbleBadAuthError.json");
var scrobbleResponse = await ExecuteTestInternal(testScrobbles, responseMessage, requestMessage); var scrobbleResponse = await ExecuteTestInternal(testScrobbles, responseMessage, requestMessage);
Assert.AreEqual(LastResponseStatus.Cached, scrobbleResponse.Status); Assert.AreEqual(LastResponseStatus.Cached, scrobbleResponse.Status);
@ -200,7 +218,7 @@ public async Task CorrectResponseWithBadAuth()
[Test] [Test]
public async Task CorrectResponseWhenRequestFailed() public async Task CorrectResponseWhenRequestFailed()
{ {
var requestMessage = GenerateExpectedRequestMessage("TrackApi.TrackScrobbleMultipleRequestBody"); var requestMessage = GenerateExpectedRequestMessage("TrackApi.TrackScrobbleMultipleRequestBody.txt");
var testScrobbles = GetTestScrobbles(); var testScrobbles = GetTestScrobbles();
var responseMessage = TestHelper.CreateResponseMessage(HttpStatusCode.RequestTimeout, ""); var responseMessage = TestHelper.CreateResponseMessage(HttpStatusCode.RequestTimeout, "");