fix(runtime): isolate Campaign LA7b delete state
This commit is contained in:
parent
1b9e7e41f9
commit
ff40656293
2 changed files with 139 additions and 4 deletions
|
|
@ -530,6 +530,127 @@ public sealed class LiveSessionControllerTests
|
|||
Assert.False(controller.IsInWorld);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(false)]
|
||||
[InlineData(true)]
|
||||
public void RestoreCompletionDuringConfirmedDelete_PreservesDeleteUntilAck(
|
||||
bool acknowledgeBeforeCompletion)
|
||||
{
|
||||
var calls = new List<string>();
|
||||
var operations = new TestOperations(calls);
|
||||
var host = new TestHost(calls);
|
||||
var controller = new LiveSessionController(operations);
|
||||
Assert.Equal(
|
||||
LiveSessionStartStatus.AwaitingCharacterSelection,
|
||||
controller.Start(LiveOptions(awaitSelection: true), host).Status);
|
||||
RuntimeGenerationToken generation = controller.Generation;
|
||||
|
||||
Assert.True(controller.Highlight(generation, 0x50000001u).Accepted);
|
||||
Assert.True(controller.Restore(generation).Accepted);
|
||||
Assert.True(controller.Highlight(generation, 0x50000002u).Accepted);
|
||||
Assert.True(controller.RequestDelete(generation).Accepted);
|
||||
Assert.True(controller.ConfirmDelete(generation).Accepted);
|
||||
Assert.Equal([("Canonical", 1)], operations.DeleteRequests);
|
||||
Assert.Equal(
|
||||
RuntimeCharacterSelectionOperation.DeleteRequested,
|
||||
controller.CharacterSelection.Snapshot.Operation);
|
||||
Assert.Equal(
|
||||
RuntimeCharacterSelectionButtons.None,
|
||||
controller.CharacterSelection.Snapshot.Buttons);
|
||||
|
||||
if (acknowledgeBeforeCompletion)
|
||||
controller.CharacterSelectionState.ApplyDeleteAcknowledged();
|
||||
|
||||
controller.CharacterSelectionState.ApplyRestore(
|
||||
new CharacterRestore.Parsed(
|
||||
VerificationFlag: 1u,
|
||||
Guid: 0x50000001u,
|
||||
Name: "Restored",
|
||||
SecondsGreyedOut: 0u));
|
||||
|
||||
Assert.Equal(
|
||||
acknowledgeBeforeCompletion
|
||||
? RuntimeCharacterSelectionOperation.DeleteAcknowledged
|
||||
: RuntimeCharacterSelectionOperation.DeleteRequested,
|
||||
controller.CharacterSelection.Snapshot.Operation);
|
||||
Assert.Equal(
|
||||
RuntimeCharacterSelectionButtons.None,
|
||||
controller.CharacterSelection.Snapshot.Buttons);
|
||||
Assert.True(controller.CharacterSelection.TryGet(
|
||||
0x50000001u,
|
||||
out RuntimeCharacterSelectionEntry restored));
|
||||
Assert.False(restored.IsPendingDelete);
|
||||
Assert.Equal(
|
||||
RuntimeCommandStatus.Rejected,
|
||||
controller.ConfirmDelete(generation).Status);
|
||||
Assert.Equal([("Canonical", 1)], operations.DeleteRequests);
|
||||
|
||||
if (!acknowledgeBeforeCompletion)
|
||||
controller.CharacterSelectionState.ApplyDeleteAcknowledged();
|
||||
|
||||
Assert.Equal(
|
||||
RuntimeCharacterSelectionOperation.DeleteAcknowledged,
|
||||
controller.CharacterSelection.Snapshot.Operation);
|
||||
Assert.Equal(
|
||||
RuntimeCharacterSelectionButtons.None,
|
||||
controller.CharacterSelection.Snapshot.Buttons);
|
||||
Assert.Equal([("Canonical", 1)], operations.DeleteRequests);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(false)]
|
||||
[InlineData(true)]
|
||||
public void RestoreTimeoutDuringConfirmedDelete_PreservesDeleteUntilAck(
|
||||
bool acknowledgeBeforeTimeout)
|
||||
{
|
||||
var calls = new List<string>();
|
||||
var operations = new TestOperations(calls);
|
||||
var host = new TestHost(calls);
|
||||
var time = new ManualTimeProvider();
|
||||
var controller = new LiveSessionController(operations, time);
|
||||
Assert.Equal(
|
||||
LiveSessionStartStatus.AwaitingCharacterSelection,
|
||||
controller.Start(LiveOptions(awaitSelection: true), host).Status);
|
||||
RuntimeGenerationToken generation = controller.Generation;
|
||||
|
||||
Assert.True(controller.Highlight(generation, 0x50000001u).Accepted);
|
||||
Assert.True(controller.Restore(generation).Accepted);
|
||||
Assert.True(controller.Highlight(generation, 0x50000002u).Accepted);
|
||||
Assert.True(controller.RequestDelete(generation).Accepted);
|
||||
Assert.True(controller.ConfirmDelete(generation).Accepted);
|
||||
Assert.Equal([("Canonical", 1)], operations.DeleteRequests);
|
||||
|
||||
if (acknowledgeBeforeTimeout)
|
||||
controller.CharacterSelectionState.ApplyDeleteAcknowledged();
|
||||
|
||||
time.Advance(RuntimeCharacterSelectionState.RestoreCorrelationTimeout);
|
||||
controller.Tick();
|
||||
|
||||
Assert.Equal(
|
||||
acknowledgeBeforeTimeout
|
||||
? RuntimeCharacterSelectionOperation.DeleteAcknowledged
|
||||
: RuntimeCharacterSelectionOperation.DeleteRequested,
|
||||
controller.CharacterSelection.Snapshot.Operation);
|
||||
Assert.Equal(
|
||||
RuntimeCharacterSelectionButtons.None,
|
||||
controller.CharacterSelection.Snapshot.Buttons);
|
||||
Assert.Equal(
|
||||
RuntimeCommandStatus.Rejected,
|
||||
controller.ConfirmDelete(generation).Status);
|
||||
Assert.Equal([("Canonical", 1)], operations.DeleteRequests);
|
||||
|
||||
if (!acknowledgeBeforeTimeout)
|
||||
controller.CharacterSelectionState.ApplyDeleteAcknowledged();
|
||||
|
||||
Assert.Equal(
|
||||
RuntimeCharacterSelectionOperation.DeleteAcknowledged,
|
||||
controller.CharacterSelection.Snapshot.Operation);
|
||||
Assert.Equal(
|
||||
RuntimeCharacterSelectionButtons.None,
|
||||
controller.CharacterSelection.Snapshot.Buttons);
|
||||
Assert.Equal([("Canonical", 1)], operations.DeleteRequests);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CharacterCommands_AreGenerationGatedAcrossReconnectAndStop()
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue