Retry a failed portrait from the notice with the same scene builder.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
using HSchool.Server.Game;
|
||||
|
||||
namespace HSchool.Server.Tests;
|
||||
|
||||
public class GenerationFailedPosterTests
|
||||
{
|
||||
[Fact]
|
||||
public void SwarmFailure_ShouldPost_SuccessAndNotConfiguredShouldNot()
|
||||
{
|
||||
Assert.True(GenerationFailedPoster.ShouldPost(PortraitGenerationOutcome.Unavailable));
|
||||
Assert.True(GenerationFailedPoster.ShouldPost(PortraitGenerationOutcome.TimedOut));
|
||||
Assert.False(GenerationFailedPoster.ShouldPost(PortraitGenerationOutcome.Succeeded));
|
||||
Assert.False(GenerationFailedPoster.ShouldPost(PortraitGenerationOutcome.NotConfigured));
|
||||
Assert.False(GenerationFailedPoster.ShouldPost(PortraitGenerationOutcome.InvalidPrompt));
|
||||
Assert.False(GenerationFailedPoster.ShouldPost(PortraitGenerationOutcome.UnknownPerson));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task TryEnqueue_WithPerson_PostsGenerationFailed()
|
||||
{
|
||||
var queue = new GameCommandQueue();
|
||||
|
||||
GenerationFailedPoster.TryEnqueue(queue, schoolId: 4, personId: "a0.p0", PortraitKind.Avatar);
|
||||
|
||||
var command = await queue.Reader.ReadAsync(TestContext.Current.CancellationToken);
|
||||
var post = Assert.IsType<GameCommand.PostSchoolNotice>(command);
|
||||
Assert.Equal(4, post.SchoolId);
|
||||
Assert.Equal(GenerationFailedPoster.DefName, post.DefName);
|
||||
Assert.Equal("a0.p0", post.PersonKey);
|
||||
Assert.Equal("avatar", post.Kind);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TryEnqueue_WithoutPerson_DoesNotPost()
|
||||
{
|
||||
var queue = new GameCommandQueue();
|
||||
|
||||
GenerationFailedPoster.TryEnqueue(queue, schoolId: 4, personId: "", PortraitKind.Full);
|
||||
GenerationFailedPoster.TryEnqueue(queue, schoolId: 4, personId: " ", PortraitKind.Full);
|
||||
|
||||
Assert.False(queue.Reader.TryRead(out _));
|
||||
}
|
||||
}
|
||||
@@ -11,12 +11,12 @@ public class NoticeBoardTests
|
||||
{
|
||||
var board = new NoticeBoard(maxSticky: 8);
|
||||
|
||||
Assert.True(board.TryPost(Info(), personId: 0, out var info));
|
||||
Assert.True(board.TryPost(Info(), personKey: "", kind: "", 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(board.TryPost(Pausing(), personKey: "", kind: "", out var warning));
|
||||
Assert.True(warning.Pause);
|
||||
Assert.True(board.HasPausing);
|
||||
Assert.Equal("GenerationFailed", Assert.Single(board.Sticky).DefName);
|
||||
@@ -29,10 +29,10 @@ public class NoticeBoardTests
|
||||
var board = new NoticeBoard(maxSticky: 8);
|
||||
for (var i = 0; i < 8; i++)
|
||||
{
|
||||
Assert.True(board.TryPost(Pausing(), personId: 0, out _));
|
||||
Assert.True(board.TryPost(Pausing(), personKey: "", kind: "", out _));
|
||||
}
|
||||
|
||||
Assert.False(board.TryPost(Pausing(), personId: 0, out var ninth));
|
||||
Assert.False(board.TryPost(Pausing(), personKey: "", kind: "", out var ninth));
|
||||
Assert.Equal(default, ninth);
|
||||
Assert.Equal(8, board.Sticky.Count);
|
||||
}
|
||||
@@ -41,8 +41,8 @@ public class NoticeBoardTests
|
||||
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.TryPost(Pausing(), personKey: "", kind: "", out var first));
|
||||
Assert.True(board.TryPost(Pausing(), personKey: "", kind: "", out var second));
|
||||
|
||||
Assert.True(board.TryDismiss(first.Id));
|
||||
Assert.True(board.HasPausing);
|
||||
@@ -71,6 +71,30 @@ public class NoticeBoardTests
|
||||
Assert.Equal(NoticeSeverity.Error, sticky.Severity);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GenerateImage_WithoutPerson_StillPosts_WirePersonIdIsZero()
|
||||
{
|
||||
var board = new NoticeBoard(maxSticky: 8);
|
||||
|
||||
Assert.True(board.TryPost(Pausing(), personKey: "", kind: "full", out var message));
|
||||
Assert.Equal(0u, message.PersonId);
|
||||
Assert.Equal(EventActions.GenerateImage, message.Action);
|
||||
Assert.Equal("", Assert.Single(board.Sticky).PersonKey);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GenerateImage_WithPerson_StoresKeyAndKind()
|
||||
{
|
||||
var board = new NoticeBoard(maxSticky: 8);
|
||||
|
||||
Assert.True(board.TryPost(Pausing(), personKey: "a0.p0", kind: "avatar", out var message));
|
||||
Assert.Equal(1u, message.PersonId);
|
||||
Assert.Equal(EventActions.GenerateImage, message.Action);
|
||||
var sticky = Assert.Single(board.Sticky);
|
||||
Assert.Equal("a0.p0", sticky.PersonKey);
|
||||
Assert.Equal("avatar", sticky.Kind);
|
||||
}
|
||||
|
||||
private static EventDef Info() => new()
|
||||
{
|
||||
DefName = "DayStarted",
|
||||
@@ -88,6 +112,6 @@ public class NoticeBoardTests
|
||||
Pause = true,
|
||||
TtlMs = 0,
|
||||
Trigger = EventTriggers.GenerationFailed,
|
||||
Action = EventActions.None,
|
||||
Action = EventActions.GenerateImage,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user