Chessistics/chessistics-tests/Loading/Campaign01Tests.cs

82 lines
2.7 KiB
C#
Raw Permalink Normal View History

using System.IO;
using Chessistics.Engine.Loading;
using Chessistics.Engine.Model;
using Xunit;
namespace Chessistics.Tests.Loading;
public class Campaign01Tests
{
private static CampaignDef LoadRealCampaign()
{
var repoRoot = Path.Combine(AppContext.BaseDirectory, "..", "..", "..", "..");
var path = Path.GetFullPath(Path.Combine(repoRoot, "Data", "campaigns", "campaign_01.json"));
return CampaignLoader.Load(File.ReadAllText(path));
}
[Fact]
public void Campaign_HasExpectedStructure()
{
var c = LoadRealCampaign();
Assert.Equal(9, c.Missions.Count);
Assert.Equal(4, c.InitialWidth);
Assert.Equal(4, c.InitialHeight);
}
[Fact]
public void Mission8_AddsTwoTransformersAndExpandsTo12x10()
{
var c = LoadRealCampaign();
var m8 = c.Missions[7];
Assert.Equal("L'Expansion Finale", m8.Name);
Assert.Equal(12, m8.TerrainPatch.NewWidth);
Assert.Equal(10, m8.TerrainPatch.NewHeight);
var transformers = m8.TerrainPatch.Cells.Where(p => p.Type == CellType.Transformer).ToList();
Assert.Equal(2, transformers.Count);
Assert.Contains(transformers, t => t.Transformer!.Name == "Forge Est");
Assert.Contains(transformers, t => t.Transformer!.Name == "Armurerie Est");
}
[Fact]
public void Mission9_CathedralDemandsAllThreeCargoTypes()
{
var c = LoadRealCampaign();
var m9 = c.Missions[8];
Assert.Equal("Le Couronnement", m9.Name);
Assert.Equal(12, m9.TerrainPatch.NewWidth);
Assert.Equal(12, m9.TerrainPatch.NewHeight);
var demands = m9.TerrainPatch.Cells.Where(p => p.Type == CellType.Demand).ToList();
Assert.Equal(3, demands.Count);
var types = demands.Select(d => d.Demand!.Cargo).ToHashSet();
Assert.Contains(CargoType.Tools, types);
Assert.Contains(CargoType.Arms, types);
Assert.Contains(CargoType.Gold, types);
}
[Fact]
public void Mission7_RenamedToComptoir()
{
var c = LoadRealCampaign();
var m7 = c.Missions[6];
Assert.Equal("Le Comptoir", m7.Name);
}
[Fact]
public void AllTerrainPatchesAreNonRegressive()
{
// Subsequent missions must only grow the board, never shrink it.
var c = LoadRealCampaign();
int w = c.InitialWidth, h = c.InitialHeight;
for (int i = 0; i < c.Missions.Count; i++)
{
var tp = c.Missions[i].TerrainPatch;
Assert.True(tp.NewWidth >= w, $"Mission {i}: width shrunk from {w} to {tp.NewWidth}");
Assert.True(tp.NewHeight >= h, $"Mission {i}: height shrunk from {h} to {tp.NewHeight}");
w = tp.NewWidth;
h = tp.NewHeight;
}
}
}