PkmnLib.NET/PkmnLib.Tests/Integration/Models/IntegrationTestAction.cs

76 lines
2.5 KiB
C#
Raw Normal View History

2024-08-23 09:15:53 +00:00
using System.Text.Json.Nodes;
using System.Text.Json.Serialization;
using CSPath;
using PkmnLib.Dynamic.Models;
using PkmnLib.Dynamic.Models.Choices;
using JsonSerializer = System.Text.Json.JsonSerializer;
namespace PkmnLib.Tests.Integration.Models;
2025-03-02 16:19:57 +00:00
[JsonDerivedType(typeof(SetPokemonAction), "setPokemon"), JsonDerivedType(typeof(SetMoveChoiceAction), "setMoveChoice"),
JsonDerivedType(typeof(SetPassChoiceAction), "setPassChoice"), JsonDerivedType(typeof(AssertAction), "assert")]
2024-08-23 09:15:53 +00:00
public abstract class IntegrationTestAction
{
2024-12-27 13:30:22 +00:00
public abstract Task Execute(IBattle battle);
2024-08-23 09:15:53 +00:00
}
public class SetPokemonAction : IntegrationTestAction
{
public List<byte> Place { get; set; } = null!;
public List<byte> FromParty { get; set; } = null!;
2024-12-27 13:30:22 +00:00
public override Task Execute(IBattle battle)
2024-08-23 09:15:53 +00:00
{
var mon = battle.Parties[FromParty[0]].Party[FromParty[1]];
battle.Sides[Place[0]].SwapPokemon(Place[1], mon);
2024-12-27 13:30:22 +00:00
return Task.CompletedTask;
2024-08-23 09:15:53 +00:00
}
}
public class SetMoveChoiceAction : IntegrationTestAction
{
public List<byte> Place { get; set; } = null!;
public string Move { get; set; } = null!;
public List<byte> Target { get; set; } = null!;
/// <inheritdoc />
2024-12-27 13:30:22 +00:00
public override async Task Execute(IBattle battle)
2024-08-23 09:15:53 +00:00
{
var user = battle.Sides[Place[0]].Pokemon[Place[1]];
2024-12-27 13:30:22 +00:00
await Assert.That(user).IsNotNull();
2024-08-23 09:15:53 +00:00
var move = user.Moves.First(m => m?.MoveData.Name == Move);
2024-12-27 13:30:22 +00:00
await Assert.That(move).IsNotNull();
2024-08-23 09:15:53 +00:00
var res = battle.TrySetChoice(new MoveChoice(user, move, Target[0], Target[1]));
2024-12-27 13:30:22 +00:00
await Assert.That(res).IsTrue();
2024-08-23 09:15:53 +00:00
}
}
public class SetPassChoiceAction : IntegrationTestAction
{
public List<byte> Place { get; set; } = null!;
/// <inheritdoc />
2024-12-27 13:30:22 +00:00
public override async Task Execute(IBattle battle)
2024-08-23 09:15:53 +00:00
{
var user = battle.Sides[Place[0]].Pokemon[Place[1]];
2024-12-27 13:30:22 +00:00
await Assert.That(user).IsNotNull();
2024-08-23 09:15:53 +00:00
var res = battle.TrySetChoice(new PassChoice(user));
2024-12-27 13:30:22 +00:00
await Assert.That(res).IsTrue();
2024-08-23 09:15:53 +00:00
}
}
public class AssertAction : IntegrationTestAction
{
public string Value { get; set; } = null!;
public JsonNode Expected { get; set; } = null!;
/// <inheritdoc />
2024-12-27 13:30:22 +00:00
public override async Task Execute(IBattle battle)
2024-08-23 09:15:53 +00:00
{
var list = battle.Path(Value).ToList();
var value = list.Count == 1 ? list[0] : list;
2025-03-02 16:19:57 +00:00
2024-08-23 09:15:53 +00:00
var serialized = JsonSerializer.Serialize(value);
2024-12-27 13:30:22 +00:00
await Assert.That(serialized).IsEqualTo(Expected.ToJsonString());
2024-08-23 09:15:53 +00:00
}
}