ble/actions: drop fail to connect reason

This is not longer used and can be removed.
This commit is contained in:
David Lechner
2022-07-18 14:51:42 -05:00
parent c0215aa3ec
commit cabd53ac49
4 changed files with 33 additions and 199 deletions
+3 -52
View File
@@ -20,61 +20,12 @@ export const bleDidConnectPybricks = createAction((id: string, name: string) =>
name,
}));
export enum BleDeviceFailToConnectReasonType {
NoWebBluetooth = 'ble.device.didFailToConnect.noWebBluetooth',
NoBluetooth = 'ble.device.didFailToConnect.noBluetooth',
Canceled = 'ble.device.didFailToConnect.canceled',
NoGatt = 'ble.device.didFailToConnect.noGatt',
NoDeviceInfoService = 'ble.device.didFailToConnect.noDeviceInfoService',
NoPybricksService = 'ble.device.didFailToConnect.noPybricksService',
Unknown = 'ble.device.didFailToConnect.unknown',
}
type Reason<T extends BleDeviceFailToConnectReasonType> = {
reason: T;
};
export type BleDeviceFailToConnectNoWebBluetoothReason =
Reason<BleDeviceFailToConnectReasonType.NoWebBluetooth>;
export type BleDeviceFailToConnectNoBluetoothReason =
Reason<BleDeviceFailToConnectReasonType.NoBluetooth>;
export type BleDeviceFailToConnectCanceledReason =
Reason<BleDeviceFailToConnectReasonType.Canceled>;
export type BleDeviceFailToConnectNoGattReason =
Reason<BleDeviceFailToConnectReasonType.NoGatt>;
export type BleDeviceFailToConnectNoDeviceInfoServiceReason =
Reason<BleDeviceFailToConnectReasonType.NoDeviceInfoService>;
export type BleDeviceFailToConnectNoPybricksServiceReason =
Reason<BleDeviceFailToConnectReasonType.NoPybricksService>;
export type BleDeviceFailToConnectUnknownReason =
Reason<BleDeviceFailToConnectReasonType.Unknown> & {
err: Error;
};
export type BleDeviceDidFailToConnectReason =
| BleDeviceFailToConnectNoWebBluetoothReason
| BleDeviceFailToConnectNoBluetoothReason
| BleDeviceFailToConnectCanceledReason
| BleDeviceFailToConnectNoGattReason
| BleDeviceFailToConnectNoDeviceInfoServiceReason
| BleDeviceFailToConnectNoPybricksServiceReason
| BleDeviceFailToConnectUnknownReason;
/**
* Response that indicates {@link bleConnectPybricks} failed.
*/
export const bleDidFailToConnectPybricks = createAction(
(reason: BleDeviceDidFailToConnectReason) => ({
type: 'ble.action.didFailToConnectPybricks',
...reason,
}),
);
export const bleDidFailToConnectPybricks = createAction(() => ({
type: 'ble.action.didFailToConnectPybricks',
}));
/**
* Creates an action to request disconnecting a hub running Pybricks firmware.
+1 -2
View File
@@ -11,7 +11,6 @@ import { HubType, LegoCompanyId } from '../ble-lwp3-service/protocol';
import { didReceiveStatusReport } from '../ble-pybricks-service/actions';
import { Status, statusToFlag } from '../ble-pybricks-service/protocol';
import {
BleDeviceDidFailToConnectReason,
bleConnectPybricks,
bleDidConnectPybricks,
bleDidDisconnectPybricks,
@@ -52,7 +51,7 @@ test('connection', () => {
expect(
reducers(
{ connection: BleConnectionState.Connecting } as State,
bleDidFailToConnectPybricks({} as BleDeviceDidFailToConnectReason),
bleDidFailToConnectPybricks(),
).connection,
).toBe(BleConnectionState.Disconnected);
expect(
+21 -121
View File
@@ -27,7 +27,6 @@ import {
pybricksServiceUUID,
} from '../ble-pybricks-service/protocol';
import {
BleDeviceFailToConnectReasonType,
bleConnectPybricks,
bleDidConnectPybricks,
bleDidDisconnectPybricks,
@@ -247,11 +246,7 @@ describe('connect action is dispatched', () => {
await expect(saga.take()).resolves.toEqual(
alertsShowAlert('ble', 'noWebBluetooth'),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.NoWebBluetooth,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
});
describe('has web bluetooth', () => {
@@ -269,11 +264,7 @@ describe('connect action is dispatched', () => {
await expect(saga.take()).resolves.toEqual(
alertsShowAlert('ble', 'bluetoothNotAvailable'),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.NoBluetooth,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
});
it('should fail if user canceled requestDevice', async () => {
@@ -283,11 +274,7 @@ describe('connect action is dispatched', () => {
await runConnectUntil(saga, ConnectRunPoint.Connect);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.Canceled,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
});
it('should fail on other exception in requestDevice', async () => {
@@ -301,12 +288,7 @@ describe('connect action is dispatched', () => {
await expect(saga.take()).resolves.toEqual(
alertsShowAlert('alerts', 'unexpectedError', { error: testError }),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.Unknown,
err: testError,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
});
it('should fail if device has no gatt property', async () => {
@@ -317,11 +299,7 @@ describe('connect action is dispatched', () => {
await expect(saga.take()).resolves.toEqual(
alertsShowAlert('ble', 'noGatt'),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.NoGatt,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
});
it('should fail if gatt connect fails', async () => {
@@ -333,12 +311,7 @@ describe('connect action is dispatched', () => {
await expect(saga.take()).resolves.toEqual(
alertsShowAlert('alerts', 'unexpectedError', { error: testError }),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.Unknown,
err: testError,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
});
it('should fail if device does not have device info service', async () => {
@@ -355,11 +328,7 @@ describe('connect action is dispatched', () => {
hubName: 'test name',
}),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.NoDeviceInfoService,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
expect(mocks.gatt.disconnect).toHaveBeenCalled();
});
@@ -375,12 +344,7 @@ describe('connect action is dispatched', () => {
await expect(saga.take()).resolves.toEqual(
alertsShowAlert('alerts', 'unexpectedError', { error: testError }),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.Unknown,
err: testError,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
expect(mocks.gatt.disconnect).toHaveBeenCalled();
});
@@ -394,12 +358,7 @@ describe('connect action is dispatched', () => {
await expect(saga.take()).resolves.toEqual(
alertsShowAlert('alerts', 'unexpectedError', { error: testError }),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.Unknown,
err: testError,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
expect(mocks.gatt.disconnect).toHaveBeenCalled();
});
@@ -415,12 +374,7 @@ describe('connect action is dispatched', () => {
await expect(saga.take()).resolves.toEqual(
alertsShowAlert('alerts', 'unexpectedError', { error: testError }),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.Unknown,
err: testError,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
expect(mocks.gatt.disconnect).toHaveBeenCalled();
});
@@ -434,12 +388,7 @@ describe('connect action is dispatched', () => {
await expect(saga.take()).resolves.toEqual(
alertsShowAlert('alerts', 'unexpectedError', { error: testError }),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.Unknown,
err: testError,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
expect(mocks.gatt.disconnect).toHaveBeenCalled();
});
@@ -466,12 +415,7 @@ describe('connect action is dispatched', () => {
await expect(saga.take()).resolves.toEqual(
alertsShowAlert('alerts', 'unexpectedError', { error: testError }),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.Unknown,
err: testError,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
expect(mocks.gatt.disconnect).toHaveBeenCalled();
});
@@ -490,11 +434,7 @@ describe('connect action is dispatched', () => {
hubName: 'test name',
}),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.NoPybricksService,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
expect(mocks.gatt.disconnect).toHaveBeenCalled();
});
@@ -510,12 +450,7 @@ describe('connect action is dispatched', () => {
await expect(saga.take()).resolves.toEqual(
alertsShowAlert('alerts', 'unexpectedError', { error: testError }),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.Unknown,
err: testError,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
expect(mocks.gatt.disconnect).toHaveBeenCalled();
});
@@ -529,12 +464,7 @@ describe('connect action is dispatched', () => {
await expect(saga.take()).resolves.toEqual(
alertsShowAlert('alerts', 'unexpectedError', { error: testError }),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.Unknown,
err: testError,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
expect(mocks.gatt.disconnect).toHaveBeenCalled();
});
@@ -548,12 +478,7 @@ describe('connect action is dispatched', () => {
await expect(saga.take()).resolves.toEqual(
alertsShowAlert('alerts', 'unexpectedError', { error: testError }),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.Unknown,
err: testError,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
expect(mocks.gatt.disconnect).toHaveBeenCalled();
});
@@ -572,12 +497,7 @@ describe('connect action is dispatched', () => {
hubName: 'test name',
}),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
// FIXME: this is wrong error
reason: BleDeviceFailToConnectReasonType.NoPybricksService,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
expect(mocks.gatt.disconnect).toHaveBeenCalled();
});
@@ -593,12 +513,7 @@ describe('connect action is dispatched', () => {
await expect(saga.take()).resolves.toEqual(
alertsShowAlert('alerts', 'unexpectedError', { error: testError }),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.Unknown,
err: testError,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
expect(mocks.gatt.disconnect).toHaveBeenCalled();
});
@@ -614,12 +529,7 @@ describe('connect action is dispatched', () => {
await expect(saga.take()).resolves.toEqual(
alertsShowAlert('alerts', 'unexpectedError', { error: testError }),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.Unknown,
err: testError,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
expect(mocks.gatt.disconnect).toHaveBeenCalled();
});
@@ -633,12 +543,7 @@ describe('connect action is dispatched', () => {
await expect(saga.take()).resolves.toEqual(
alertsShowAlert('alerts', 'unexpectedError', { error: testError }),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.Unknown,
err: testError,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
expect(mocks.gatt.disconnect).toHaveBeenCalled();
});
@@ -652,12 +557,7 @@ describe('connect action is dispatched', () => {
await expect(saga.take()).resolves.toEqual(
alertsShowAlert('alerts', 'unexpectedError', { error: testError }),
);
await expect(saga.take()).resolves.toEqual(
bleDidFailToConnectPybricks({
reason: BleDeviceFailToConnectReasonType.Unknown,
err: testError,
}),
);
await expect(saga.take()).resolves.toEqual(bleDidFailToConnectPybricks());
expect(mocks.gatt.disconnect).toHaveBeenCalled();
});
+8 -24
View File
@@ -54,7 +54,6 @@ import {
import { RootState } from '../reducers';
import { ensureError } from '../utils';
import {
BleDeviceFailToConnectReasonType as Reason,
bleConnectPybricks as bleConnectPybricks,
bleDidConnectPybricks,
bleDidDisconnectPybricks,
@@ -101,14 +100,14 @@ function* handleWriteUart(
function* handleBleConnectPybricks(): Generator {
if (navigator.bluetooth === undefined) {
yield* put(alertsShowAlert('ble', 'noWebBluetooth'));
yield* put(bleDidFailToConnectPybricks({ reason: Reason.NoWebBluetooth }));
yield* put(bleDidFailToConnectPybricks());
return;
}
const available = yield* call(() => navigator.bluetooth.getAvailability());
if (!available) {
yield* put(alertsShowAlert('ble', 'bluetoothNotAvailable'));
yield* put(bleDidFailToConnectPybricks({ reason: Reason.NoBluetooth }));
yield* put(bleDidFailToConnectPybricks());
return;
}
@@ -142,7 +141,7 @@ function* handleBleConnectPybricks(): Generator {
);
if (!device) {
yield* put(bleDidFailToConnectPybricks({ reason: Reason.Canceled }));
yield* put(bleDidFailToConnectPybricks());
return;
}
@@ -150,7 +149,7 @@ function* handleBleConnectPybricks(): Generator {
if (!gatt) {
yield* put(alertsShowAlert('ble', 'noGatt'));
yield* put(bleDidFailToConnectPybricks({ reason: Reason.NoGatt }));
yield* put(bleDidFailToConnectPybricks());
return;
}
@@ -192,9 +191,7 @@ function* handleBleConnectPybricks(): Generator {
hubName: device.name || 'Pybricks Hub',
}),
);
yield* put(
bleDidFailToConnectPybricks({ reason: Reason.NoDeviceInfoService }),
);
yield* put(bleDidFailToConnectPybricks());
return;
}
@@ -261,11 +258,7 @@ function* handleBleConnectPybricks(): Generator {
hubName: device.name || 'Pybricks Hub',
}),
);
yield* put(
bleDidFailToConnectPybricks({
reason: Reason.NoPybricksService,
}),
);
yield* put(bleDidFailToConnectPybricks());
return;
}
@@ -330,11 +323,7 @@ function* handleBleConnectPybricks(): Generator {
hubName: device.name || 'Pybricks Hub',
}),
);
yield* put(
bleDidFailToConnectPybricks({
reason: Reason.NoPybricksService,
}),
);
yield* put(bleDidFailToConnectPybricks());
return;
}
@@ -396,12 +385,7 @@ function* handleBleConnectPybricks(): Generator {
error: ensureError(err),
}),
);
yield* put(
bleDidFailToConnectPybricks({
reason: Reason.Unknown,
err: ensureError(err),
}),
);
yield* put(bleDidFailToConnectPybricks());
} finally {
yield* cancel(tasks);