UNPKG

1.44 kBPlain TextView Raw
1import {set} from './utilities';
2
3export interface NavigatorWithConnection extends Navigator {
4 connection: {
5 downlink: number;
6 effectiveType: string;
7 onchange: null | Function;
8 rtt: number;
9 saveData: boolean;
10 };
11}
12
13export class Connection {
14 private isUsingMockConnection = false;
15 private originalConnection?: NavigatorWithConnection['connection'];
16
17 mock(timing: Partial<NavigatorWithConnection['connection']> = {}) {
18 const globalNavigator = navigator as NavigatorWithConnection;
19 if (this.isUsingMockConnection) {
20 throw new Error(
21 'You tried to mock navigator.connection when it was already mocked.',
22 );
23 }
24
25 this.originalConnection = globalNavigator.connection;
26
27 const mockConnection: NavigatorWithConnection['connection'] = {
28 downlink: 0,
29 effectiveType: '3g',
30 onchange: null,
31 rtt: 100,
32 saveData: false,
33 ...timing,
34 };
35
36 set(globalNavigator, 'connection', mockConnection);
37 this.isUsingMockConnection = true;
38 }
39
40 restore() {
41 const globalNavigator = navigator as NavigatorWithConnection;
42 if (!this.isUsingMockConnection) {
43 throw new Error(
44 'You tried to restore navigator.connection when it was already restored.',
45 );
46 }
47
48 set(globalNavigator, 'connection', this.originalConnection);
49 this.isUsingMockConnection = false;
50 }
51
52 isMocked() {
53 return this.isUsingMockConnection;
54 }
55}