From 82d8ca9da87cb87457c885d4d544fd51fb166b86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Wed, 6 Feb 2019 16:17:32 +0100 Subject: [PATCH] make ajax configurable --- web/static/src/ts/init.ts | 8 +++++++- web/static/src/ts/services/ajax.ts | 12 +++++++++--- web/static/tests/helpers.ts | 11 +++++------ 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/web/static/src/ts/init.ts b/web/static/src/ts/init.ts index 1413f270..62ed92a5 100644 --- a/web/static/src/ts/init.ts +++ b/web/static/src/ts/init.ts @@ -31,7 +31,7 @@ export const init = memoize(async function(): Promise { // services const qweb = new QWeb(); const router = new Router(); - const ajax = new Ajax(); + const ajax = new Ajax(ajaxFetch); const actionManager = new ActionManager(actionRegistry, ajax); const notifications = new NotificationManager(); @@ -65,6 +65,12 @@ export const init = memoize(async function(): Promise { // Adapters //------------------------------------------------------------------------------ +function ajaxFetch(route: string, params: any): Promise { + console.log("RPC", route, params); + const delay = Math.random() * 150; + return new Promise(resolve => setTimeout(resolve, delay)); +} + /** * Load xml templates as a string. */ diff --git a/web/static/src/ts/services/ajax.ts b/web/static/src/ts/services/ajax.ts index 75be25cf..d2ebe59a 100644 --- a/web/static/src/ts/services/ajax.ts +++ b/web/static/src/ts/services/ajax.ts @@ -26,16 +26,22 @@ interface RequestParameters { params: { [key: string]: any }; } +export type FetchMethod = (route: string, params: any) => Promise; + //------------------------------------------------------------------------------ // Ajax //------------------------------------------------------------------------------ export class Ajax implements IAjax { + fetch: FetchMethod; + + constructor(fetch: FetchMethod) { + this.fetch = fetch; + } + rpc(rpc: RPCQuery): Promise { const request = this.prepareRequest(rpc); - console.log("RPC", request.route, request.params); - const delay = Math.random() * 150; - return new Promise(resolve => setTimeout(resolve, delay)); + return this.fetch(request.route, request.params); } private prepareRequest(query: RPCQuery): RequestParameters { diff --git a/web/static/tests/helpers.ts b/web/static/tests/helpers.ts index e10c6c05..28320517 100644 --- a/web/static/tests/helpers.ts +++ b/web/static/tests/helpers.ts @@ -1,5 +1,5 @@ import { readFile } from "fs"; -import { IAjax, RPCQuery } from "../src/ts/services/ajax"; +import { Ajax, RPCQuery } from "../src/ts/services/ajax"; import { WEnv } from "../src/ts/core/component"; import { Callback } from "../src/ts/core/event_bus"; import { NotificationManager } from "../src/ts/core/notifications"; @@ -30,7 +30,7 @@ export interface MockEnv extends Env { } export function makeTestEnv(): MockEnv { - const ajax = new MockAjax(); + const ajax = new MockAjax(mockFetch); const actionManager = new ActionManager(actionRegistry, ajax); const router = new MockRouter(); const notifications = new NotificationManager(); @@ -49,11 +49,10 @@ export function makeTestEnv(): MockEnv { }; } -class MockAjax implements IAjax { - async rpc(rpc: RPCQuery) { - return true; - } +function mockFetch(route: string, params: any): Promise { + return Promise.resolve(true); } +class MockAjax extends Ajax {} class MockRouter implements IRouter { currentQuery: Query = {};