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) { 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(); })