import test from "ava"; import { Helpers } from "../src/Helpers"; 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 expectedErrorMessage = "no valid file reference given, expected object like {owner:'demo', part:'vfs'|'www', path: '/...'}" t.throws(() => Helpers.contextFileToExerciseFile(null as any), expectedErrorMessage); t.throws(() => Helpers.contextFileToExerciseFile("null" as any), expectedErrorMessage); t.throws(() => Helpers.contextFileToExerciseFile({ owner: 1, part: 2, path: 3 } as any), expectedErrorMessage); t.throws(() => Helpers.contextFileToExerciseFile({ owner: "", part: "vfs", path: "/aufgabe.tool.json" } as any), expectedErrorMessage); t.throws(() => Helpers.contextFileToExerciseFile({ owner: "demo", part: "xxx", path: "/aufgabe.tool.json" } as any), expectedErrorMessage); t.throws(() => Helpers.contextFileToExerciseFile({ owner: "demo", part: "vfs", path: "notAbsolute.tool.json" } as any), expectedErrorMessage); }) 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.createLocalStorageBasedApi() MC.isReady", async t => { const MC = Helpers.createStorageBasedApi(); t.true(await MC.isReady()); }) test("Helpers.createLocalStorageBasedApi() 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.createLocalStorageBasedApi() MC.ide.getUserName", async t => { const MC = Helpers.createStorageBasedApi(); t.is(await MC.ide.getUserName(), "jdoe"); }) test("Helpers.createLocalStorageBasedApi() MC.ide.fs readFile+writeFile", async t => { const MC = Helpers.createStorageBasedApi(); 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"); }) test("Helpers.createLocalStorageBasedApi() 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", true); MC.ide.navigator.navigateToExercise(exerciseFile, true); t.pass(); })