undo-redo-vuex
Version:
A Vuex plugin for module namespaced undo and redo functionality. This plugin takes inspiration from and extends the work of [vuex-undo-redo](https://github.com/anthonygore/vuex-undo-redo).
100 lines (85 loc) • 2.79 kB
text/typescript
import store from "../store-non-namespaced";
import { undo, redo } from "./utils-test";
const state: any = store.state;
const item = (id: number, label: string) => ({ id, label });
const firstGroupItems = [
item(0, "First group item one"),
item(1, "First group item two")
];
const itemWithoutGroup = item(2, "Item without group");
const secondGroupItems = [
item(3, "Second group item one"),
item(4, "Second group item two"),
item(5, "Second group item three")
];
describe("Testing more advanced combinations of grouped mutations", () => {
it("Add all items", async () => {
// Commit the items with action groups to the store and assert
await store.commit("addItem", {
item: firstGroupItems[0],
actionGroup: "firstGroup"
});
await store.commit("addItem", {
item: firstGroupItems[1],
actionGroup: "firstGroup"
});
await store.commit("addItem", { item: itemWithoutGroup }); // no group here
await store.commit("addItem", {
item: secondGroupItems[0],
actionGroup: "secondGroup"
});
await store.commit("addItem", {
item: secondGroupItems[1],
actionGroup: "secondGroup"
});
await store.commit("addItem", {
item: secondGroupItems[2],
actionGroup: "secondGroup"
});
expect(state.list).toEqual([
...firstGroupItems,
itemWithoutGroup,
...secondGroupItems
]);
});
it("Undo secondGroup should remove all secondGroup items", async () => {
await undo(store)();
expect(state.list).toEqual([...firstGroupItems, itemWithoutGroup]);
});
it("Redo secondGroup should restore full list", async () => {
await redo(store)();
expect(state.list).toEqual([
...firstGroupItems,
itemWithoutGroup,
...secondGroupItems
]);
});
it("Undo secondGroup", async () => {
await undo(store)();
expect(state.list).toEqual([...firstGroupItems, itemWithoutGroup]);
});
it("Undo secondGroup and mutation without group", async () => {
await undo(store)();
expect(state.list).toEqual(firstGroupItems);
});
it("Undo firstGroup as well should leave list empty", async () => {
await undo(store)();
expect(state.list).toEqual([]);
});
it("Redo firstGroup should restore items from firstGroup", async () => {
await redo(store)();
expect(state.list).toEqual(firstGroupItems);
});
it("Redo mutation without group should restore that item", async () => {
await redo(store)();
expect(state.list).toEqual([...firstGroupItems, itemWithoutGroup]);
});
it("Redo secondGroup should restore full list again", async () => {
await redo(store)();
expect(state.list).toEqual([
...firstGroupItems,
itemWithoutGroup,
...secondGroupItems
]);
});
});