62 lines
3.4 KiB
C#
62 lines
3.4 KiB
C#
using System.Text;
|
|
using Ludarium.Application;
|
|
using Ludarium.Domain;
|
|
|
|
namespace Ludarium.UnitTests;
|
|
|
|
public sealed class BrowserGameDataPolicyTests
|
|
{
|
|
[Fact]
|
|
public void VerifiedBindingMatchesOnlyTheExactArtifactRevisionAndCore()
|
|
{
|
|
var gameId = Guid.NewGuid();
|
|
var artifactId = Guid.NewGuid();
|
|
var sha256 = new string('a', 64);
|
|
var artifact = Artifact(artifactId, version: 4, sha256: sha256);
|
|
var session = Session(gameId, artifactId, "fceumm");
|
|
var sourceId = BrowserGameDataPolicy.EncodeBinding(artifactId, artifact.Version, session.Core, sha256);
|
|
|
|
Assert.True(BrowserGameDataPolicy.Matches(BrowserGameDataPolicy.SourceType, sourceId, session, artifact));
|
|
Assert.False(BrowserGameDataPolicy.Matches("ManualUpload", sourceId, session, artifact));
|
|
Assert.False(BrowserGameDataPolicy.Matches(BrowserGameDataPolicy.SourceType, "not-base64", session, artifact));
|
|
Assert.False(BrowserGameDataPolicy.Matches(BrowserGameDataPolicy.SourceType, sourceId,
|
|
session with { Core = "mgba" }, artifact));
|
|
Assert.False(BrowserGameDataPolicy.Matches(BrowserGameDataPolicy.SourceType, sourceId, session,
|
|
artifact with { Version = artifact.Version + 1 }));
|
|
Assert.False(BrowserGameDataPolicy.Matches(BrowserGameDataPolicy.SourceType, sourceId, session,
|
|
artifact with { Sha256 = new string('b', 64) }));
|
|
}
|
|
|
|
[Fact]
|
|
public void RestoreScopeIsFixtureVerifiedAndStableAcrossCoreCasing()
|
|
{
|
|
var gameId = Guid.NewGuid();
|
|
|
|
Assert.True(BrowserGameDataPolicy.SupportsAutomaticRestore("FCEUMM"));
|
|
Assert.True(BrowserGameDataPolicy.SupportsAutomaticRestore("mgba"));
|
|
Assert.True(BrowserGameDataPolicy.SupportsAutomaticRestore("gambatte"));
|
|
Assert.True(BrowserGameDataPolicy.SupportsAutomaticRestore("snes9x"));
|
|
Assert.True(BrowserGameDataPolicy.SupportsAutomaticRestore("melonds"));
|
|
Assert.True(BrowserGameDataPolicy.SupportsAutomaticRestore("ppsspp"));
|
|
Assert.True(BrowserGameDataPolicy.SupportsAutomaticRestore("pcsx_rearmed"));
|
|
Assert.True(BrowserGameDataPolicy.SupportsAutomaticRestore("n64wasm"));
|
|
Assert.False(BrowserGameDataPolicy.SupportsAutomaticRestore("mupen64plus_next"));
|
|
Assert.Equal(BrowserGameDataPolicy.StableEntryId(gameId, "fceumm", GameDataKind.Save),
|
|
BrowserGameDataPolicy.StableEntryId(gameId, "FCEUMM", GameDataKind.Save));
|
|
Assert.NotEqual(BrowserGameDataPolicy.StableEntryId(gameId, "fceumm", GameDataKind.Save),
|
|
BrowserGameDataPolicy.StableEntryId(gameId, "fceumm", GameDataKind.SaveState));
|
|
Assert.Throws<ArgumentException>(() =>
|
|
BrowserGameDataPolicy.EncodeBinding(Guid.NewGuid(), 1, "mupen64plus_next", null));
|
|
}
|
|
|
|
private static Artifact Artifact(Guid id, long version, string sha256) =>
|
|
new(id, Guid.NewGuid(), "roms/nes/synthetic.nes", 16, DateTimeOffset.UnixEpoch,
|
|
ArtifactState.Present, MediaType.Rom, Confidence.High, null, DateTimeOffset.UnixEpoch,
|
|
DateTimeOffset.UnixEpoch, "ines", "nes", version, sha256);
|
|
|
|
private static BrowserPlaySession Session(Guid gameId, Guid artifactId, string core) =>
|
|
new(Guid.NewGuid(), gameId, artifactId, PlaySessionState.Ready, "nes", "Ludarium EmulatorJS",
|
|
core, "/player.html", Convert.ToHexString(Encoding.UTF8.GetBytes("token")),
|
|
DateTimeOffset.UnixEpoch, DateTimeOffset.UnixEpoch.AddHours(1));
|
|
}
|