add test helpers, add navbar tests

This commit is contained in:
Géry Debongnie
2019-01-29 10:46:01 +01:00
parent b024ce3183
commit dd75a17448
5 changed files with 126 additions and 10 deletions
+1 -1
View File
@@ -3,6 +3,6 @@ module.exports = {
transform: {
"^.+\\.ts?$": "ts-jest"
},
testRegex: "(/tests/.*|(\\.|/)(test|spec))\\.(ts|js)x?$",
testRegex: "(/tests/.*(test|spec))\\.ts?$",
moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"]
};
+1 -1
View File
@@ -9,7 +9,7 @@ function clearSlashes(s: string): string {
return s.replace(/\/$/, "").replace(/^\//, "");
}
type RouterEvent = "query_changed";
export type RouterEvent = "query_changed";
export interface IRouter {
navigate(query: Query): void;
+3 -8
View File
@@ -1,6 +1,5 @@
import { QWeb } from "../../src/ts/core/qweb_vdom";
import { idGenerator } from "../../src/ts/core/utils";
import { WEnv, Widget } from "../../src/ts/core/widget";
import { makeTestWEnv, makeTestFixture } from "../helpers";
//------------------------------------------------------------------------------
// Setup and helpers
@@ -15,12 +14,8 @@ let fixture: HTMLElement;
let env: WEnv;
beforeEach(() => {
fixture = document.createElement("div");
document.body.appendChild(fixture);
env = {
qweb: new QWeb(),
getID: idGenerator()
};
fixture = makeTestFixture();
env = makeTestWEnv();
});
afterEach(() => {
+71
View File
@@ -0,0 +1,71 @@
import { QWeb } from "../src/ts/core/qweb_vdom";
import { idGenerator } from "../src/ts/core/utils";
import { WEnv } from "../src/ts/core/widget";
import { Env } from "../src/ts/env";
import { IAjax, RPC } from "../src/ts/services/ajax";
import {
IActionManager,
ActionEvent,
ActionWidget
} from "../src/ts/services/action_manager";
import { Callback } from "../src/ts/core/event_bus";
import { IRouter, Query, RouterEvent } from "../src/ts/services/router";
export function makeTestFixture() {
let fixture = document.createElement("div");
document.body.appendChild(fixture);
return fixture;
}
export function makeTestWEnv(): WEnv {
return {
qweb: new QWeb(),
getID: idGenerator()
};
}
export function makeTestEnv(): Env {
const ajax = new MockAjax();
const actionManager = new MockActionManager();
const router = new MockRouter();
let { qweb, getID } = makeTestWEnv();
return {
qweb,
getID,
ajax,
actionManager,
router,
rpc: ajax.rpc,
debug: false,
menus: []
};
}
class MockAjax implements IAjax {
async rpc(rpc: RPC) {
return true;
}
}
class MockActionManager implements IActionManager {
doAction(actionID: number) {}
on(event: ActionEvent, owner: any, callback: Callback) {}
getCurrentAction(): ActionWidget | null {
return null;
}
}
class MockRouter implements IRouter {
navigate(query: Query) {}
on(event: RouterEvent, owner: any, callback: Callback) {}
getQuery(): Query {
return {};
}
formatURL(path: string, query: Query): string {
return "";
}
}
export function normalize(str: string): string {
return str.replace(/\s+/g, "");
}
+50
View File
@@ -0,0 +1,50 @@
import { Env } from "../../src/ts/env";
import { makeTestEnv, makeTestFixture, normalize } from "../helpers";
import { Navbar } from "../../src/ts/widgets/navbar";
//------------------------------------------------------------------------------
// Setup and helpers
//------------------------------------------------------------------------------
let fixture: HTMLElement;
let env: Env;
beforeEach(() => {
fixture = makeTestFixture();
env = makeTestEnv();
});
afterEach(() => {
fixture.remove();
});
//------------------------------------------------------------------------------
// Tests
//------------------------------------------------------------------------------
test("can be rendered", async () => {
const navbar = new Navbar(env);
await navbar.mount(fixture);
expect(normalize(fixture.innerHTML)).toBe(
normalize(`
<div class=\"o_navbar\">
<span class=\"title\">Odoo</span>
<ul></ul>
</div>`)
);
});
test("can render one menu item", async () => {
env.menus.push({ title: "menu", actionID: 4 });
const navbar = new Navbar(env);
await navbar.mount(fixture);
expect(normalize(fixture.innerHTML)).toBe(
normalize(`
<div class=\"o_navbar\">
<span class=\"title\">Odoo</span>
<ul>
<li><ahref=\"\">menu</a></li>
</ul>
</div>`)
);
});