Add soft delete + trash, keyboard-first web overhaul, move chapter tags to bottom
Adds SoftDelete/Trash across characters, chapters, locations, beats with a purge schedule and Trash page. Reworks the web client for keyboard-driven navigation (focus helpers, help overlay, keyboard.md doc). Moves the ChapterPage tag editor to the bottom of the page to match CharacterDetailPage.
This commit is contained in:
@@ -258,7 +258,7 @@ public class CharacterServiceTests : ServiceTestFixture
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Deleting_the_canonical_character_leaves_its_other_identities_alive()
|
||||
public async Task Trashing_the_canonical_character_keeps_the_link_so_restoring_brings_it_back()
|
||||
{
|
||||
var kael = await Characters.CreateAsync(_novelId, new CreateCharacterRequest("Kael"));
|
||||
var stranger = await Characters.CreateAsync(_novelId, new CreateCharacterRequest("The Stranger"));
|
||||
@@ -268,7 +268,13 @@ public class CharacterServiceTests : ServiceTestFixture
|
||||
|
||||
using var verification = Db.CreateContext();
|
||||
var survivor = await verification.Characters.FirstAsync(c => c.Id == stranger.Id);
|
||||
Assert.That(survivor.SameCharacterAsId, Is.Null);
|
||||
var response = (await Characters.GetAsync(stranger.Id))!.ToResponse();
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(survivor.SameCharacterAsId, Is.EqualTo(kael.Id), "the pin survives so restoring Kael restores the identity link");
|
||||
Assert.That(response.SameCharacterAsName, Is.Null, "a trashed canonical identity does not show up while it's in the trash");
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
Reference in New Issue
Block a user