Files
h-school/tests/HSchool.Server.Tests/NoticeBoardTests.cs
T

94 lines
2.9 KiB
C#

using HSchool.Content;
using HSchool.Protocol;
using HSchool.Server.Game;
namespace HSchool.Server.Tests;
public class NoticeBoardTests
{
[Fact]
public void PausingPost_IsSticky_InfoIsNot()
{
var board = new NoticeBoard(maxSticky: 8);
Assert.True(board.TryPost(Info(), personId: 0, out var info));
Assert.False(info.Pause);
Assert.False(board.HasPausing);
Assert.Empty(board.Sticky);
Assert.True(board.TryPost(Pausing(), personId: 0, out var warning));
Assert.True(warning.Pause);
Assert.True(board.HasPausing);
Assert.Equal("GenerationFailed", Assert.Single(board.Sticky).DefName);
Assert.DoesNotContain(board.ToSave(), row => row.DefName == "DayStarted");
}
[Fact]
public void NinthSticky_IsNotPosted()
{
var board = new NoticeBoard(maxSticky: 8);
for (var i = 0; i < 8; i++)
{
Assert.True(board.TryPost(Pausing(), personId: 0, out _));
}
Assert.False(board.TryPost(Pausing(), personId: 0, out var ninth));
Assert.Equal(default, ninth);
Assert.Equal(8, board.Sticky.Count);
}
[Fact]
public void Dismiss_RemovesSticky_DoesNotClearTheBoardUntilTheLast()
{
var board = new NoticeBoard(maxSticky: 8);
Assert.True(board.TryPost(Pausing(), personId: 0, out var first));
Assert.True(board.TryPost(Pausing(), personId: 0, out var second));
Assert.True(board.TryDismiss(first.Id));
Assert.True(board.HasPausing);
Assert.Equal(second.Id, Assert.Single(board.Sticky).Id);
Assert.True(board.TryDismiss(second.Id));
Assert.False(board.HasPausing);
Assert.False(board.TryDismiss(second.Id));
}
[Fact]
public void Load_RestoresSticky_SkipsInfoRows()
{
var saved = new StickyNoticeSave[]
{
new() { Id = 3, DefName = "DayStarted", Severity = NoticeSeverity.Info, Pause = false, TtlMs = 8000 },
new() { Id = 4, DefName = "GenerationFailed", Severity = NoticeSeverity.Error, Pause = true, TtlMs = 0 },
};
var board = new NoticeBoard(maxSticky: 8, saved);
Assert.True(board.HasPausing);
var sticky = Assert.Single(board.Sticky);
Assert.Equal(4u, sticky.Id);
Assert.Equal("GenerationFailed", sticky.DefName);
Assert.Equal(NoticeSeverity.Error, sticky.Severity);
}
private static EventDef Info() => new()
{
DefName = "DayStarted",
Severity = EventSeverities.Info,
Pause = false,
TtlMs = 8000,
Trigger = EventTriggers.DayStart,
Action = EventActions.None,
};
private static EventDef Pausing() => new()
{
DefName = "GenerationFailed",
Severity = EventSeverities.Error,
Pause = true,
TtlMs = 0,
Trigger = EventTriggers.GenerationFailed,
Action = EventActions.None,
};
}