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: {
|
transform: {
|
||||||
"^.+\\.ts?$": "ts-jest"
|
"^.+\\.ts?$": "ts-jest"
|
||||||
},
|
},
|
||||||
testRegex: "(/tests/.*|(\\.|/)(test|spec))\\.(ts|js)x?$",
|
testRegex: "(/tests/.*(test|spec))\\.ts?$",
|
||||||
moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"]
|
moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"]
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ function clearSlashes(s: string): string {
|
|||||||
return s.replace(/\/$/, "").replace(/^\//, "");
|
return s.replace(/\/$/, "").replace(/^\//, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
type RouterEvent = "query_changed";
|
export type RouterEvent = "query_changed";
|
||||||
|
|
||||||
export interface IRouter {
|
export interface IRouter {
|
||||||
navigate(query: Query): void;
|
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 { WEnv, Widget } from "../../src/ts/core/widget";
|
||||||
|
import { makeTestWEnv, makeTestFixture } from "../helpers";
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// Setup and helpers
|
// Setup and helpers
|
||||||
@@ -15,12 +14,8 @@ let fixture: HTMLElement;
|
|||||||
let env: WEnv;
|
let env: WEnv;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
fixture = document.createElement("div");
|
fixture = makeTestFixture();
|
||||||
document.body.appendChild(fixture);
|
env = makeTestWEnv();
|
||||||
env = {
|
|
||||||
qweb: new QWeb(),
|
|
||||||
getID: idGenerator()
|
|
||||||
};
|
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
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