57 lines
2.6 KiB
C#
57 lines
2.6 KiB
C#
using Ludarium.Domain;
|
|
using Ludarium.Infrastructure;
|
|
|
|
namespace Ludarium.IntegrationTests;
|
|
|
|
public sealed class NativeProviderFixtureTests
|
|
{
|
|
private static readonly Game Sonic = new(Guid.Parse("d2e86fb8-2184-4d2d-bce7-cb3156f0b9b2"),
|
|
"Sonic the Hedgehog", DateTimeOffset.UnixEpoch);
|
|
private static readonly Release Genesis = new(Guid.Parse("dc2ad40a-0d30-4eeb-8f32-25a273c14833"),
|
|
Sonic.Id, Sonic.Title, "genesis", "world", null, DateTimeOffset.UnixEpoch);
|
|
|
|
[Fact]
|
|
public void IgdbFixtureProducesProvenancedMetadataAndArtwork()
|
|
{
|
|
var result = Assert.IsType<Ludarium.Application.ProviderGameResult>(
|
|
IgdbMetadataProvider.Parse(Read("igdb-game.json"), Sonic, Genesis));
|
|
Assert.Equal("1074", result.ExternalId);
|
|
Assert.Contains(result.Fields, item => item.Field == "developer" && item.Value == "Sonic Team");
|
|
Assert.Contains(result.Artwork, item => item.Url.StartsWith("https://images.igdb.com/", StringComparison.Ordinal));
|
|
}
|
|
|
|
[Fact]
|
|
public void MobyGamesFixtureRequiresAnExactTitleAndReturnsHttpsArtwork()
|
|
{
|
|
var result = Assert.IsType<Ludarium.Application.ProviderGameResult>(
|
|
MobyGamesMetadataProvider.Parse(Read("mobygames-game.json"), Sonic, Genesis));
|
|
Assert.Equal("6225", result.ExternalId);
|
|
Assert.All(result.Artwork, item => Assert.StartsWith("https://", item.Url, StringComparison.Ordinal));
|
|
Assert.Null(MobyGamesMetadataProvider.Parse(Read("mobygames-game.json"),
|
|
Sonic with { Title = "Sonic 2" }, Genesis));
|
|
}
|
|
|
|
[Fact]
|
|
public void ScreenScraperFixtureIsParsedWithoutExternalEntities()
|
|
{
|
|
var result = Assert.IsType<Ludarium.Application.ProviderGameResult>(
|
|
ScreenScraperMetadataProvider.Parse(Read("screenscraper-game.xml"), Sonic, Genesis));
|
|
Assert.Equal("1", result.ExternalId);
|
|
Assert.Contains(result.Fields, item => item.Field == "players" && item.Value == "2");
|
|
}
|
|
|
|
[Fact]
|
|
public void RetroAchievementsFixturePreservesUnlockStateAndDefinitions()
|
|
{
|
|
var result = Assert.IsType<Ludarium.Application.ProviderGameResult>(
|
|
RetroAchievementsMetadataProvider.ParseDetails(Read("retroachievements-game.json"), Sonic, Genesis, 1));
|
|
var progress = Assert.IsType<GameAchievementProgress>(result.AchievementProgress);
|
|
Assert.Equal(2, progress.Total);
|
|
Assert.Equal(1, progress.Earned);
|
|
Assert.Single(progress.Achievements, item => item.Unlocked);
|
|
}
|
|
|
|
private static string Read(string name) => File.ReadAllText(Path.Combine(AppContext.BaseDirectory,
|
|
"fixtures", "providers", name));
|
|
}
|