From cf6e14ed8b5572eafe18fca396c5860f3433fb82 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 2 Jun 2021 12:32:19 +0200 Subject: [PATCH] utility for homeserver api mocking --- src/mocks/HomeServer.js | 62 +++++++++++++++++++++++++++++++++++++++++ src/mocks/Request.js | 15 ++++++++-- 2 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 src/mocks/HomeServer.js diff --git a/src/mocks/HomeServer.js b/src/mocks/HomeServer.js new file mode 100644 index 00000000..072344ef --- /dev/null +++ b/src/mocks/HomeServer.js @@ -0,0 +1,62 @@ +/* +Copyright 2021 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import {BaseRequest} from "./Request.js"; + +// a request as returned by the HomeServerApi +class HomeServerRequest extends BaseRequest { + constructor(args) { + super(); + this.arguments = args; + } + + respond(body) { + return this._respond(body); + } +} + +class Target { + constructor() { + this.requests = {}; + } +} + +function handleMethod(target, name, ...args) { + let requests = target.requests[name] + if (!requests) { + target.requests[name] = requests = []; + } + const request = new HomeServerRequest(args); + requests.push(request); + return request; +} + +class Handler { + get(target, prop) { + return handleMethod.bind(null, target, prop); + } +} + +export class HomeServer { + constructor() { + this._target = new Target(); + this.api = new Proxy(this._target, new Handler()); + } + + get requests() { + return this._target.requests; + } +} \ No newline at end of file diff --git a/src/mocks/Request.js b/src/mocks/Request.js index da8693b1..1984f06f 100644 --- a/src/mocks/Request.js +++ b/src/mocks/Request.js @@ -16,17 +16,19 @@ limitations under the License. import {AbortError} from "../utils/error.js"; -export class Request { +export class BaseRequest { constructor() { this._responsePromise = new Promise((resolve, reject) => { this.resolve = resolve; this.reject = reject; }); + this.responded = false; this.aborted = false; } - respond(status, body) { - this.resolve({status, body}); + _respond(value) { + this.responded = true; + this.resolve(value); return this; } @@ -39,3 +41,10 @@ export class Request { return this._responsePromise; } } + +// this is a NetworkRequest as used by HomeServerApi +export class Request extends BaseRequest { + respond(status, body) { + return this._respond({status, body}); + } +}