import { Component } from "../../src/component/component"; import { QWeb } from "../../src/qweb/index"; import { Router, RouterEnv } from "../../src/router/Router"; import { makeTestEnv, makeTestFixture, nextTick } from "../helpers"; describe("router directive t-routecomponent", () => { let fixture: HTMLElement; let env: RouterEnv; beforeEach(() => { fixture = makeTestFixture(); env = makeTestEnv(); delete QWeb.DIRECTIVE_NAMES.routecomponent; QWeb.DIRECTIVES = QWeb.DIRECTIVES.filter(d => d.name !== "routecomponent"); for (let key in QWeb.components) { delete QWeb.components[key]; } }); afterEach(() => { fixture.remove(); }); test("can render simple cases", async () => { env.qweb.addTemplates(`
About Users
`); class About extends Component {} class Users extends Component {} class App extends Component { components = { About, Users }; } const routes = [ { name: "about", path: "/about", component: About }, { name: "users", path: "/users", component: Users } ]; const router = new Router(env,routes, {mode: 'history'}) router.navigate({ route: "about" }); const app = new App(env); await app.mount(fixture); expect(fixture.innerHTML).toBe("
About
"); router.navigate({ route: "users" }); await nextTick(); expect(fixture.innerHTML).toBe("
Users
"); expect(env.qweb.templates.App.fn.toString()).toMatchSnapshot(); }); test("can render parameterized route", async () => { env.qweb.addTemplates(`
Book
`); class Book extends Component {} class App extends Component { components = { Book }; } const routes = [{ name: "book", path: "/book/{{title}}", component: Book }]; const router = new Router(env,routes, {mode: 'history'}) router.navigate({ route: "book", params: { title: "1984" } }); const app = new App(env); await app.mount(fixture); expect(fixture.innerHTML).toBe("
Book 1984
"); expect(env.qweb.templates.App.fn.toString()).toMatchSnapshot(); }); test("can render parameterized route with suffixes", async () => { env.qweb.addTemplates(`
Book |
`); class Book extends Component { get incVal() { return this.props.val + 1; } } class App extends Component { components = { Book }; } const routes = [{ name: "book", path: "/book/{{title}}/{{val.number}}", component: Book }]; const router = new Router(env,routes, {mode: 'history'}) router.navigate({ route: "book", params: { title: "1984", val: "123" } }); const app = new App(env); await app.mount(fixture); expect(fixture.innerHTML).toBe("
Book 1984|124
"); expect(env.qweb.templates.App.fn.toString()).toMatchSnapshot(); }); });