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( 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( 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( 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( RetroAchievementsMetadataProvider.ParseDetails(Read("retroachievements-game.json"), Sonic, Genesis, 1)); var progress = Assert.IsType(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)); }