Skip to content

Commit 68cb064

Browse files
committed
feature(reset): add reset button to vxmark and vxscan superadmin screens so it's easy to quit kiosk-browser in vxdev.
1 parent b97d38c commit 68cb064

File tree

4 files changed

+76
-1
lines changed

4 files changed

+76
-1
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import React from 'react';
2+
import { fireEvent, screen } from '@testing-library/react';
3+
import { fakeKiosk } from '@votingworks/test-utils';
4+
5+
import { usbstick } from '@votingworks/utils';
6+
7+
import { Logger, LogSource } from '@votingworks/logging';
8+
import { render } from '../../test/test_utils';
9+
10+
import { SuperAdminScreen } from './superadmin_screen';
11+
12+
const logger = new Logger(LogSource.VxBallotMarkingDeviceService);
13+
14+
it('the right buttons and reset calls quit', () => {
15+
render(
16+
<SuperAdminScreen
17+
usbDriveStatus={usbstick.UsbDriveStatus.absent}
18+
useEffectToggleLargeDisplay={jest.fn()}
19+
logger={logger}
20+
/>
21+
);
22+
screen.getByText('Reboot from USB');
23+
screen.getByText('Reset');
24+
25+
// test without kiosk
26+
fireEvent.click(screen.getByText('Reset'));
27+
28+
// test with kiosk
29+
window.kiosk = fakeKiosk();
30+
fireEvent.click(screen.getByText('Reset'));
31+
32+
expect(window.kiosk.quit).toHaveBeenCalledTimes(1);
33+
});

frontends/bmd/src/pages/superadmin_screen.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { useEffect } from 'react';
22

3-
import { Main, RebootFromUsbButton, Screen } from '@votingworks/ui';
3+
import { Main, RebootFromUsbButton, Screen, Button } from '@votingworks/ui';
44

55
import { usbstick } from '@votingworks/utils';
66
import { Logger } from '@votingworks/logging';
@@ -25,6 +25,8 @@ export function SuperAdminScreen({
2525
<Screen white>
2626
<Main padded centerChild>
2727
<RebootFromUsbButton usbDriveStatus={usbDriveStatus} logger={logger} />
28+
<br />
29+
<Button onPress={() => window.kiosk?.quit()}>Reset</Button>
2830
</Main>
2931
</Screen>
3032
);

frontends/precinct-scanner/src/app.test.tsx

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
advanceTimersAndPromises,
2525
makePollWorkerCard,
2626
makeAdminCard,
27+
makeSuperadminCard,
2728
getZeroCompressedTally,
2829
} from '@votingworks/test-utils';
2930
import { join } from 'path';
@@ -1381,3 +1382,38 @@ test('no printer: open polls, scan ballot, close polls, export results', async (
13811382
card.removeCard();
13821383
await screen.findByText('Polls Closed');
13831384
});
1385+
1386+
test('superadmin card', async () => {
1387+
const card = new MemoryCard();
1388+
const storage = new MemoryStorage();
1389+
const hardware = MemoryHardware.buildStandard();
1390+
hardware.setCardReaderConnected(true);
1391+
1392+
const kiosk = fakeKiosk();
1393+
kiosk.getUsbDrives.mockResolvedValue([fakeUsbDrive()]);
1394+
window.kiosk = kiosk;
1395+
1396+
fetchMock
1397+
.get('/machine-config', { body: getMachineConfigBody })
1398+
.get('/config/election', { body: electionSampleDefinition })
1399+
.get('/config/testMode', { body: getTestModeConfigTrueResponseBody })
1400+
.get('/config/precinct', { body: getPrecinctConfigNoPrecinctResponseBody })
1401+
.get('/scan/status', { body: scanStatusWaitingForPaperResponseBody });
1402+
render(<App card={card} storage={storage} hardware={hardware} />);
1403+
1404+
const superadmincard = makeSuperadminCard();
1405+
1406+
await act(async () => {
1407+
card.insertCard(superadmincard);
1408+
await advanceTimersAndPromises(1);
1409+
await advanceTimersAndPromises(1);
1410+
});
1411+
1412+
screen.getByText('Reboot from USB');
1413+
screen.getByText('Reset');
1414+
fireEvent.click(screen.getByText('Reset'));
1415+
1416+
expect(kiosk.quit).toHaveBeenCalledTimes(1);
1417+
1418+
card.removeCard();
1419+
});

frontends/precinct-scanner/src/app_root.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
useUserSession,
2121
useDevices,
2222
RebootFromUsbButton,
23+
Button,
2324
} from '@votingworks/ui';
2425
import {
2526
assert,
@@ -722,6 +723,9 @@ export function AppRoot({
722723
usbDriveStatus={usbDriveDisplayStatus}
723724
logger={logger}
724725
/>
726+
<br />
727+
<br />
728+
<Button onPress={() => window.kiosk?.quit()}>Reset</Button>
725729
</CenteredLargeProse>
726730
</ScreenMainCenterChild>
727731
);

0 commit comments

Comments
 (0)