mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
add test helpers, add navbar tests
This commit is contained in:
+1
-1
@@ -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"]
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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(() => {
|
||||
|
||||
@@ -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, "");
|
||||
}
|
||||
@@ -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>`)
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user