mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-12-13 13:55:23 -05:00
Co-authored-by: David Schinkel <david@zollsoft.de> Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
import { describe, expect, test, vi } from "vitest";
|
|
import { ref } from "vue";
|
|
import { useStoreActions } from "./use-actions-factory";
|
|
import type { BaseCRUDAPI } from "~/lib/api/base/base-clients";
|
|
|
|
describe("useStoreActions", () => {
|
|
const mockApi = {
|
|
getAll: vi.fn(),
|
|
createOne: vi.fn(),
|
|
updateOne: vi.fn(),
|
|
deleteOne: vi.fn(),
|
|
} as unknown as BaseCRUDAPI<unknown, unknown, unknown>;
|
|
|
|
const mockStore = ref([]);
|
|
const mockLoading = ref(false);
|
|
|
|
test("deleteMany calls deleteOne for each ID and refreshes once", async () => {
|
|
const actions = useStoreActions("test-store", mockApi, mockStore, mockLoading);
|
|
|
|
mockApi.deleteOne = vi.fn().mockResolvedValue({ response: { data: {} } });
|
|
mockApi.getAll = vi.fn().mockResolvedValue({ data: { items: [] } });
|
|
|
|
const ids = ["1", "2", "3"];
|
|
await actions.deleteMany(ids);
|
|
|
|
expect(mockApi.deleteOne).toHaveBeenCalledTimes(3);
|
|
expect(mockApi.deleteOne).toHaveBeenCalledWith("1");
|
|
expect(mockApi.deleteOne).toHaveBeenCalledWith("2");
|
|
expect(mockApi.deleteOne).toHaveBeenCalledWith("3");
|
|
|
|
expect(mockApi.getAll).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
test("deleteMany handles empty array", async () => {
|
|
const actions = useStoreActions("test-store", mockApi, mockStore, mockLoading);
|
|
|
|
mockApi.deleteOne = vi.fn();
|
|
mockApi.getAll = vi.fn().mockResolvedValue({ data: { items: [] } });
|
|
|
|
await actions.deleteMany([]);
|
|
|
|
expect(mockApi.deleteOne).not.toHaveBeenCalled();
|
|
expect(mockApi.getAll).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
test("deleteMany sets loading state", async () => {
|
|
const actions = useStoreActions("test-store", mockApi, mockStore, mockLoading);
|
|
|
|
mockApi.deleteOne = vi.fn().mockResolvedValue({});
|
|
mockApi.getAll = vi.fn().mockResolvedValue({ data: { items: [] } });
|
|
|
|
const promise = actions.deleteMany(["1"]);
|
|
expect(mockLoading.value).toBe(true);
|
|
|
|
await promise;
|
|
expect(mockLoading.value).toBe(false);
|
|
});
|
|
});
|