fix: validate favorite folder removal
This commit is contained in:
@@ -107,6 +107,11 @@ export function createFavoritesRepository(options: {
|
||||
},
|
||||
async removeCreatorFromFolder(authorId, folderId) {
|
||||
await mutate((state) => {
|
||||
const folder = state.folders.find((item) => item.id === folderId);
|
||||
if (!folder) {
|
||||
throw new Error(`收藏夹不存在: ${folderId}`);
|
||||
}
|
||||
|
||||
state.memberships = state.memberships.filter(
|
||||
(membership) =>
|
||||
membership.authorId !== authorId || membership.folderId !== folderId
|
||||
|
||||
@@ -136,6 +136,21 @@ describe("favorites-store", () => {
|
||||
});
|
||||
});
|
||||
|
||||
test("rejects removal from an unknown folder without changing state", async () => {
|
||||
const { repository } = createRepository();
|
||||
const folder = await repository.createFolder("合作");
|
||||
await repository.setCreatorFolderIds(
|
||||
{ authorId: "author-1", authorName: "Alice" },
|
||||
[folder.id]
|
||||
);
|
||||
const beforeRemoval = await repository.read();
|
||||
|
||||
await expect(
|
||||
repository.removeCreatorFromFolder("author-1", "missing")
|
||||
).rejects.toThrow("收藏夹不存在");
|
||||
await expect(repository.read()).resolves.toEqual(beforeRemoval);
|
||||
});
|
||||
|
||||
test("recovers from malformed, duplicate, and dangling stored values", async () => {
|
||||
const { repository } = createRepository(
|
||||
createMemoryStorage({
|
||||
|
||||
Reference in New Issue
Block a user