fix: validate favorite folder removal
This commit is contained in:
@@ -107,6 +107,11 @@ export function createFavoritesRepository(options: {
|
|||||||
},
|
},
|
||||||
async removeCreatorFromFolder(authorId, folderId) {
|
async removeCreatorFromFolder(authorId, folderId) {
|
||||||
await mutate((state) => {
|
await mutate((state) => {
|
||||||
|
const folder = state.folders.find((item) => item.id === folderId);
|
||||||
|
if (!folder) {
|
||||||
|
throw new Error(`收藏夹不存在: ${folderId}`);
|
||||||
|
}
|
||||||
|
|
||||||
state.memberships = state.memberships.filter(
|
state.memberships = state.memberships.filter(
|
||||||
(membership) =>
|
(membership) =>
|
||||||
membership.authorId !== authorId || membership.folderId !== folderId
|
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 () => {
|
test("recovers from malformed, duplicate, and dangling stored values", async () => {
|
||||||
const { repository } = createRepository(
|
const { repository } = createRepository(
|
||||||
createMemoryStorage({
|
createMemoryStorage({
|
||||||
|
|||||||
Reference in New Issue
Block a user