Signal-Desktop/ts/test-mock/network/serverAlerts_test.ts

94 lines
2.6 KiB
TypeScript

// Copyright 2025 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import createDebug from 'debug';
import type { Page } from 'playwright';
import type { App } from '../playwright';
import { Bootstrap } from '../bootstrap';
import {
assertAppWasUsingLibsignalWebsockets,
getLeftPane,
setupAppToUseLibsignalWebsockets,
} from '../helpers';
import { MINUTE } from '../../util/durations';
export const debug = createDebug('mock:test:serverAlerts');
describe('serverAlerts', function (this: Mocha.Suite) {
this.timeout(MINUTE);
let bootstrap: Bootstrap;
let app: App;
beforeEach(async () => {
bootstrap = new Bootstrap();
await bootstrap.init();
});
afterEach(async function (this: Mocha.Context) {
if (!bootstrap) {
return;
}
await bootstrap.maybeSaveLogs(this.currentTest, app);
await app.close();
await bootstrap.teardown();
});
const TEST_CASES = [
{
name: 'shows critical idle primary device alert',
headers: {
'X-Signal-Alert': 'critical-idle-primary-device',
},
test: async (window: Page) => {
await getLeftPane(window)
.getByText('Your account will be deleted soon')
.waitFor();
},
},
{
name: 'handles different ordering of response values',
headers: {
'X-Signal-Alert':
'idle-primary-device, unknown-alert, critical-idle-primary-device',
},
test: async (window: Page) => {
await getLeftPane(window)
.getByText('Your account will be deleted soon')
.waitFor();
},
},
{
name: 'shows idle primary device warning',
headers: {
'X-Signal-Alert': 'idle-primary-device',
},
test: async (window: Page) => {
await getLeftPane(window)
.getByText('Open signal on your phone to keep your account active')
.waitFor();
},
},
] as const;
for (const testCase of TEST_CASES) {
for (const transport of ['classic', 'libsignal']) {
// eslint-disable-next-line no-loop-func
it(`${testCase.name}: ${transport} socket`, async () => {
bootstrap.server.setWebsocketUpgradeResponseHeaders(testCase.headers);
app =
transport === 'classic'
? await bootstrap.link()
: await setupAppToUseLibsignalWebsockets(bootstrap);
const window = await app.getWindow();
await testCase.test(window);
if (transport === 'libsignal') {
debug('confirming that app was actually using libsignal');
await assertAppWasUsingLibsignalWebsockets(app);
}
});
}
}
});