52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
|
// Copyright 2021 Signal Messenger, LLC
|
||
|
// SPDX-License-Identifier: AGPL-3.0-only
|
||
|
|
||
|
import { assert } from 'chai';
|
||
|
import * as sinon from 'sinon';
|
||
|
|
||
|
import { waitForOnline } from '../../util/waitForOnline';
|
||
|
|
||
|
describe('waitForOnline', () => {
|
||
|
function getFakeWindow(): EventTarget {
|
||
|
const result = new EventTarget();
|
||
|
sinon.stub(result, 'addEventListener');
|
||
|
sinon.stub(result, 'removeEventListener');
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
it("resolves immediately if you're online", async () => {
|
||
|
const fakeNavigator = { onLine: true };
|
||
|
const fakeWindow = getFakeWindow();
|
||
|
|
||
|
await waitForOnline(fakeNavigator, fakeWindow);
|
||
|
|
||
|
sinon.assert.notCalled(fakeWindow.addEventListener as sinon.SinonStub);
|
||
|
sinon.assert.notCalled(fakeWindow.removeEventListener as sinon.SinonStub);
|
||
|
});
|
||
|
|
||
|
it("if you're offline, resolves as soon as you're online", async () => {
|
||
|
const fakeNavigator = { onLine: false };
|
||
|
const fakeWindow = getFakeWindow();
|
||
|
|
||
|
(fakeWindow.addEventListener as sinon.SinonStub)
|
||
|
.withArgs('online')
|
||
|
.callsFake((_eventName: string, callback: () => void) => {
|
||
|
setTimeout(callback, 0);
|
||
|
});
|
||
|
|
||
|
let done = false;
|
||
|
const promise = (async () => {
|
||
|
await waitForOnline(fakeNavigator, fakeWindow);
|
||
|
done = true;
|
||
|
})();
|
||
|
|
||
|
assert.isFalse(done);
|
||
|
|
||
|
await promise;
|
||
|
|
||
|
assert.isTrue(done);
|
||
|
sinon.assert.calledOnce(fakeWindow.addEventListener as sinon.SinonStub);
|
||
|
sinon.assert.calledOnce(fakeWindow.removeEventListener as sinon.SinonStub);
|
||
|
});
|
||
|
});
|