import test, { ExecutionContext } from "ava";
|
|
import { Helpers } from "@mathcoach-ide-api";
|
import { MathCoach } from "@mathcoach-ide-api";
|
|
|
test("Helpers.contextFileToExerciseFile works as expected", t => {
|
t.deepEqual(
|
Helpers.contextFileToExerciseFile({ owner: "demo", part: "vfs", path: "/a/b/aufgabe.tool.json" }),
|
{ owner: "demo", part: "vfs", path: "/a/b/aufgabe.groovy" } as MathCoach.File
|
);
|
t.deepEqual(
|
Helpers.contextFileToExerciseFile({ owner: "demo", part: "vfs", path: "/a/b/aufgabe.json" }),
|
{ owner: "demo", part: "vfs", path: "/a/b/aufgabe.groovy" } as MathCoach.File
|
);
|
t.deepEqual(
|
Helpers.contextFileToExerciseFile({ owner: "demo", part: "vfs", path: "/aufgabe.tool.json" }),
|
{ owner: "demo", part: "vfs", path: "/aufgabe.groovy" } as MathCoach.File
|
);
|
t.deepEqual(
|
Helpers.contextFileToExerciseFile({ owner: "demo", part: "vfs", path: "/aufgabe.json" }),
|
{ owner: "demo", part: "vfs", path: "/aufgabe.groovy" } as MathCoach.File
|
);
|
})
|
|
test("Helpers.contextFileToExerciseFile check params", t => {
|
const expected = { message: "no valid file reference given, expected object like {owner:'demo', part:'vfs'|'www', path: '/...'}" }
|
t.throws(() => Helpers.contextFileToExerciseFile(null as any), expected);
|
t.throws(() => Helpers.contextFileToExerciseFile("null" as any), expected);
|
t.throws(() => Helpers.contextFileToExerciseFile({ owner: 1, part: 2, path: 3 } as any), expected);
|
t.throws(() => Helpers.contextFileToExerciseFile({ owner: "", part: "vfs", path: "/aufgabe.tool.json" } as any), expected);
|
t.throws(() => Helpers.contextFileToExerciseFile({ owner: "demo", part: "xxx", path: "/aufgabe.tool.json" } as any), expected);
|
t.throws(() => Helpers.contextFileToExerciseFile({ owner: "demo", part: "vfs", path: "notAbsolute.tool.json" } as any), expected);
|
})
|
|
test("Helpers.isFile", t => {
|
t.true(Helpers.isFile({ owner: "demo1", part: "vfs", path: "/aufgabe.json" }))
|
t.true(Helpers.isFile({ owner: "demo2", part: "www", path: "/b/aufgabe.json" }))
|
t.true(Helpers.isFile({ owner: "demo3", part: "vfs", path: "/" }))
|
|
t.false(Helpers.isFile(undefined))
|
t.false(Helpers.isFile({}))
|
t.false(Helpers.isFile("test"))
|
|
t.false(Helpers.isFile({ owner: "demo", part: "xxx", path: "/aufgabe.json" })) // bad part
|
t.false(Helpers.isFile({ owner: "demo", part: 42, path: "/aufgabe.json" })) // bad part
|
t.false(Helpers.isFile({ owner: "demo", path: "/aufgabe.json" })) // bad part
|
|
|
t.false(Helpers.isFile({ owner: "demo", part: "www", path: "noAbsolutePath.json" })) // bad path
|
t.false(Helpers.isFile({ owner: "demo", part: "www", path: "" })) // bad path
|
t.false(Helpers.isFile({ owner: "demo", part: "www", path: 42 })) // bad path
|
t.false(Helpers.isFile({ owner: "demo", part: "www" })) // bad path
|
|
t.false(Helpers.isFile({ owner: undefined, part: "vfs", path: "/" })) // bad owner
|
t.false(Helpers.isFile({ owner: 42, part: "vfs", path: "/" })) // bad owner
|
t.false(Helpers.isFile({ part: "vfs", path: "/" })) // bad owner
|
})
|
|
|
test("Helpers.createStorageBasedApi() MC.isReady", async t => {
|
const MC = Helpers.createStorageBasedApi();
|
t.true(await MC.isReady());
|
})
|
|
test("Helpers.createStorageBasedApi() MC.ide.getContextFile", async t => {
|
const MC = Helpers.createStorageBasedApi();
|
const contextFile = await MC.ide.getContextFile()
|
t.true(Helpers.isFile(contextFile));
|
t.is(contextFile.owner, "jdoe");
|
t.is(contextFile.part, "vfs");
|
t.is(contextFile.path, "/file.dummy.json");
|
})
|
|
test("Helpers.createStorageBasedApi() MC.ide.getUserName", async t => {
|
const MC = Helpers.createStorageBasedApi();
|
t.is(await MC.ide.getUserName(), "jdoe");
|
})
|
|
async function expectThrows(t: ExecutionContext, callback: () => Promise<any>) {
|
try {
|
await callback();
|
t.fail()
|
} catch (error) {
|
t.pass()
|
}
|
}
|
|
test("Helpers.createStorageBasedApi() MC.ide.fs readFile+writeFile", async t => {
|
const MC = Helpers.createStorageBasedApi(); // expect InMemory Storage
|
const contextFile = await MC.ide.getContextFile();
|
const exerciseFile = Helpers.contextFileToExerciseFile(contextFile);
|
|
t.is(await MC.ide.fs.readFile(contextFile), "");
|
t.is(await MC.ide.fs.readFile(exerciseFile), "");
|
|
await MC.ide.fs.writeFile(contextFile, "123");
|
await MC.ide.fs.writeFile(exerciseFile, "456");
|
|
t.is(await MC.ide.fs.readFile(contextFile), "123");
|
t.is(await MC.ide.fs.readFile(exerciseFile), "456");
|
|
expectThrows(t, () => MC.ide.fs.writeFile({} as any, ""));
|
expectThrows(t, () => MC.ide.fs.writeFile(exerciseFile, 42 as any));
|
expectThrows(t, () => MC.ide.fs.writeFile(null as any, null as any));
|
})
|
|
test("Helpers.createStorageBasedApi() MC.ide.navigator", async t => {
|
const MC = Helpers.createStorageBasedApi();
|
const contextFile = await MC.ide.getContextFile();
|
const exerciseFile = Helpers.contextFileToExerciseFile(contextFile);
|
|
MC.ide.navigator.navigateTo("www.google.de");
|
MC.ide.navigator.navigateToExercise(exerciseFile);
|
MC.ide.navigator.navigateTo("www.google.de", true);
|
MC.ide.navigator.navigateToExercise(exerciseFile, true);
|
MC.ide.navigator.navigateTo("www.google.de", false);
|
MC.ide.navigator.navigateToExercise(exerciseFile, false);
|
|
expectThrows(t, () => MC.ide.navigator.navigateTo(null as any));
|
expectThrows(t, () => MC.ide.navigator.navigateTo(42 as any));
|
expectThrows(t, () => MC.ide.navigator.navigateTo("www.google.de", 42 as any));
|
|
t.pass();
|
})
|