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>
<Content Remove="Resources\**\*.json" />
<Content Remove="Resources\TrackApi\*.txt" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources\**\*.json" />
<EmbeddedResource Include="Resources\TrackApi\*.txt" />
</ItemGroup>
<!--

View File

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