Summary: The device.devicePlugins collection was not updated if new plugins were registered after creating a device. This diff fixes that. Reviewed By: jknoxville Differential Revision: D19536777 fbshipit-source-id: 11ed3c3383ae692ce74fd7a21704332fb319b9c4
122 lines
2.9 KiB
TypeScript
122 lines
2.9 KiB
TypeScript
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @format
|
|
*/
|
|
|
|
import reducer from '../connections';
|
|
import {State} from '../connections';
|
|
import BaseDevice from '../../devices/BaseDevice';
|
|
import MacDevice from '../../devices/MacDevice';
|
|
import {FlipperDevicePlugin} from '../../plugin';
|
|
|
|
test('REGISTER_DEVICE doesnt remove error', () => {
|
|
const initialState: State = reducer(undefined, {
|
|
type: 'SERVER_ERROR',
|
|
payload: {message: 'something went wrong'},
|
|
});
|
|
|
|
// Precondition
|
|
expect(initialState.errors).toEqual([
|
|
{message: 'something went wrong', occurrences: 1},
|
|
]);
|
|
|
|
const endState = reducer(initialState, {
|
|
type: 'REGISTER_DEVICE',
|
|
payload: new BaseDevice('serial', 'physical', 'title', 'Android'),
|
|
});
|
|
|
|
expect(endState.errors).toEqual([
|
|
{message: 'something went wrong', occurrences: 1},
|
|
]);
|
|
});
|
|
|
|
test('triggering REGISTER_DEVICE before REGISTER_PLUGINS still registers device plugins', () => {
|
|
class TestDevicePlugin extends FlipperDevicePlugin<any, any, any> {
|
|
static id = 'test';
|
|
static supportsDevice() {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
const stateWithDevice = reducer(undefined, {
|
|
type: 'REGISTER_DEVICE',
|
|
payload: new MacDevice(),
|
|
});
|
|
|
|
const endState = reducer(stateWithDevice, {
|
|
type: 'REGISTER_PLUGINS',
|
|
payload: [TestDevicePlugin],
|
|
});
|
|
|
|
expect(endState.devices[0].devicePlugins).toEqual(['test']);
|
|
});
|
|
|
|
test('errors are collected on a by name basis', () => {
|
|
const initialState: State = reducer(undefined, {
|
|
type: 'SERVER_ERROR',
|
|
payload: {
|
|
message: 'error1',
|
|
error: 'stack1',
|
|
},
|
|
});
|
|
|
|
expect(initialState.errors).toMatchInlineSnapshot(`
|
|
Array [
|
|
Object {
|
|
"error": "stack1",
|
|
"message": "error1",
|
|
"occurrences": 1,
|
|
},
|
|
]
|
|
`);
|
|
|
|
const state2: State = reducer(initialState, {
|
|
type: 'SERVER_ERROR',
|
|
payload: {
|
|
message: 'error2',
|
|
error: 'stack2',
|
|
},
|
|
});
|
|
// There are now two errors
|
|
expect(state2.errors).toMatchInlineSnapshot(`
|
|
Array [
|
|
Object {
|
|
"error": "stack1",
|
|
"message": "error1",
|
|
"occurrences": 1,
|
|
},
|
|
Object {
|
|
"error": "stack2",
|
|
"message": "error2",
|
|
"occurrences": 1,
|
|
},
|
|
]
|
|
`);
|
|
const state3: State = reducer(state2, {
|
|
type: 'SERVER_ERROR',
|
|
payload: {
|
|
message: 'error1',
|
|
error: 'stack3',
|
|
},
|
|
});
|
|
// Still two errors, but error1 has been updated and occurrences increased
|
|
expect(state3.errors).toMatchInlineSnapshot(`
|
|
Array [
|
|
Object {
|
|
"error": "stack3",
|
|
"message": "error1",
|
|
"occurrences": 2,
|
|
},
|
|
Object {
|
|
"error": "stack2",
|
|
"message": "error2",
|
|
"occurrences": 1,
|
|
},
|
|
]
|
|
`);
|
|
});
|