127 lines
4.0 KiB
TypeScript
127 lines
4.0 KiB
TypeScript
|
// Copyright: Ankitects Pty Ltd and contributors
|
||
|
// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||
|
|
||
|
/* eslint
|
||
|
@typescript-eslint/no-explicit-any: "off",
|
||
|
*/
|
||
|
|
||
|
import * as pb from "lib/backend_proto";
|
||
|
import { ChangeNotetypeState, negativeOneToNull, MapContext } from "./lib";
|
||
|
import { get } from "svelte/store";
|
||
|
|
||
|
const exampleNames = {
|
||
|
entries: [
|
||
|
{
|
||
|
id: "1623289129847",
|
||
|
name: "Basic",
|
||
|
},
|
||
|
{
|
||
|
id: "1623289129848",
|
||
|
name: "Basic (and reversed card)",
|
||
|
},
|
||
|
{
|
||
|
id: "1623289129849",
|
||
|
name: "Basic (optional reversed card)",
|
||
|
},
|
||
|
{
|
||
|
id: "1623289129850",
|
||
|
name: "Basic (type in the answer)",
|
||
|
},
|
||
|
{
|
||
|
id: "1623289129851",
|
||
|
name: "Cloze",
|
||
|
},
|
||
|
],
|
||
|
};
|
||
|
|
||
|
const exampleInfoDifferent = {
|
||
|
oldFieldNames: ["Front", "Back"],
|
||
|
oldTemplateNames: ["Card 1"],
|
||
|
newFieldNames: ["Front", "Back", "Add Reverse"],
|
||
|
newTemplateNames: ["Card 1", "Card 2"],
|
||
|
input: {
|
||
|
newFields: [0, 1, -1],
|
||
|
newTemplates: [0, -1],
|
||
|
oldNotetypeId: "1623289129847",
|
||
|
newNotetypeId: "1623289129849",
|
||
|
currentSchema: "1623302002316",
|
||
|
},
|
||
|
};
|
||
|
|
||
|
const exampleInfoSame = {
|
||
|
oldFieldNames: ["Front", "Back"],
|
||
|
oldTemplateNames: ["Card 1"],
|
||
|
newFieldNames: ["Front", "Back"],
|
||
|
newTemplateNames: ["Card 1"],
|
||
|
input: {
|
||
|
newFields: [0, 1],
|
||
|
newTemplates: [0],
|
||
|
oldNotetypeId: "1623289129847",
|
||
|
newNotetypeId: "1623289129847",
|
||
|
currentSchema: "1623302002316",
|
||
|
},
|
||
|
};
|
||
|
|
||
|
function differentState(): ChangeNotetypeState {
|
||
|
return new ChangeNotetypeState(
|
||
|
pb.BackendProto.NotetypeNames.fromObject(exampleNames),
|
||
|
pb.BackendProto.ChangeNotetypeInfo.fromObject(exampleInfoDifferent)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
function sameState(): ChangeNotetypeState {
|
||
|
return new ChangeNotetypeState(
|
||
|
pb.BackendProto.NotetypeNames.fromObject(exampleNames),
|
||
|
pb.BackendProto.ChangeNotetypeInfo.fromObject(exampleInfoSame)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
test("proto conversion", () => {
|
||
|
const state = differentState();
|
||
|
expect(get(state.info).fields).toStrictEqual([0, 1, null]);
|
||
|
expect(negativeOneToNull(state.dataForSaving().newFields)).toStrictEqual([
|
||
|
0,
|
||
|
1,
|
||
|
null,
|
||
|
]);
|
||
|
});
|
||
|
|
||
|
test("mapping", () => {
|
||
|
const state = differentState();
|
||
|
expect(get(state.info).getNewName(MapContext.Field, 0)).toBe("Front");
|
||
|
expect(get(state.info).getNewName(MapContext.Field, 1)).toBe("Back");
|
||
|
expect(get(state.info).getNewName(MapContext.Field, 2)).toBe("Add Reverse");
|
||
|
expect(get(state.info).getOldNamesIncludingNothing(MapContext.Field)).toStrictEqual(
|
||
|
["Front", "Back", "(Nothing)"]
|
||
|
);
|
||
|
expect(get(state.info).getOldIndex(MapContext.Field, 0)).toBe(0);
|
||
|
expect(get(state.info).getOldIndex(MapContext.Field, 1)).toBe(1);
|
||
|
expect(get(state.info).getOldIndex(MapContext.Field, 2)).toBe(2);
|
||
|
state.setOldIndex(MapContext.Field, 2, 0);
|
||
|
expect(get(state.info).getOldIndex(MapContext.Field, 2)).toBe(0);
|
||
|
|
||
|
// the same template shouldn't be mappable twice
|
||
|
expect(
|
||
|
get(state.info).getOldNamesIncludingNothing(MapContext.Template)
|
||
|
).toStrictEqual(["Card 1", "(Nothing)"]);
|
||
|
expect(get(state.info).getOldIndex(MapContext.Template, 0)).toBe(0);
|
||
|
expect(get(state.info).getOldIndex(MapContext.Template, 1)).toBe(1);
|
||
|
state.setOldIndex(MapContext.Template, 1, 0);
|
||
|
expect(get(state.info).getOldIndex(MapContext.Template, 0)).toBe(1);
|
||
|
expect(get(state.info).getOldIndex(MapContext.Template, 1)).toBe(0);
|
||
|
});
|
||
|
|
||
|
test("unused", () => {
|
||
|
const state = differentState();
|
||
|
expect(get(state.info).unusedItems(MapContext.Field)).toStrictEqual([]);
|
||
|
state.setOldIndex(MapContext.Field, 0, 2);
|
||
|
expect(get(state.info).unusedItems(MapContext.Field)).toStrictEqual(["Front"]);
|
||
|
});
|
||
|
|
||
|
test("unchanged", () => {
|
||
|
let state = differentState();
|
||
|
expect(get(state.info).unchanged()).toBe(false);
|
||
|
state = sameState();
|
||
|
expect(get(state.info).unchanged()).toBe(true);
|
||
|
});
|