From 4e5a42bfb82aacfcc6d2d1be24aaceb73b4b154d Mon Sep 17 00:00:00 2001 From: crupest Date: Fri, 31 Jul 2020 00:25:50 +0800 Subject: Add mock network latency. --- Timeline/ClientApp/src/app/http/mock/common.ts | 28 ++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'Timeline/ClientApp/src') diff --git a/Timeline/ClientApp/src/app/http/mock/common.ts b/Timeline/ClientApp/src/app/http/mock/common.ts index 11939c2b..a3ad08ee 100644 --- a/Timeline/ClientApp/src/app/http/mock/common.ts +++ b/Timeline/ClientApp/src/app/http/mock/common.ts @@ -22,10 +22,16 @@ export async function sha1(data: Blob): Promise { } const disableNetworkKey = 'mockServer.disableNetwork'; +const networkLatencyKey = 'mockServer.networkLatency'; let disableNetwork: boolean = localStorage.getItem(disableNetworkKey) === 'true' ? true : false; +const savedNetworkLatency = localStorage.getItem(networkLatencyKey); + +let networkLatency: number | null = + savedNetworkLatency != null ? Number(savedNetworkLatency) : null; + Object.defineProperty(window, 'disableNetwork', { get: () => disableNetwork, set: (value) => { @@ -39,10 +45,32 @@ Object.defineProperty(window, 'disableNetwork', { }, }); +Object.defineProperty(window, 'networkLatency', { + get: () => networkLatency, + set: (value) => { + if (typeof value === 'number') { + networkLatency = value; + localStorage.setItem(networkLatencyKey, value.toString()); + } else if (value == null) { + networkLatency = null; + localStorage.removeItem(networkLatencyKey); + } + }, +}); + export async function mockPrepare(): Promise { if (disableNetwork) { console.warn('Network is disabled for mock server.'); throw new HttpNetworkError(); } + if (networkLatency != null) { + await new Promise((resolve) => { + window.setTimeout(() => { + resolve(); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + }, networkLatency! * 1000); + }); + } + await Promise.resolve(); } -- cgit v1.2.3