Files
flipper/desktop/plugins/public/flipper-messages/__tests__/flipper_messages.node.tsx
Pascal Hartig dcc7e06afc Add test for flipper-messages
Summary: Some non-UI tests. Couldn't quite figure out how to make the renderer aware of changes in the old ManagedTable. Given that I've got a task for migrating, I didn't think it was worth digging into it more.

Reviewed By: mweststrate

Differential Revision: D28001651

fbshipit-source-id: 034b3d71bff2513c946b9f84525f3344b7879df9
2021-04-27 09:06:10 -07:00

159 lines
3.8 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 {TestUtils} from 'flipper-plugin';
import * as Plugin from '../';
import {MessageRow} from '../';
const fixRowTimestamps = (r: MessageRow): MessageRow => ({
...r,
columns: {
...r.columns,
time: {value: '00:13:37'},
},
timestamp: 0,
});
test('It can store rows', () => {
const {instance, ...plugin} = TestUtils.startPlugin(Plugin);
expect(instance.state.get().messageRows).toEqual([]);
expect(instance.highlightedRow.get()).toBeUndefined();
plugin.sendEvent('newMessage', {
app: 'Flipper',
direction: 'toFlipper',
});
plugin.sendEvent('newMessage', {
app: 'FB4A',
direction: 'toClient',
device: 'Android Phone',
payload: {hello: 'world'},
});
const newRows = instance.state.get().messageRows.map(fixRowTimestamps);
expect(newRows).toMatchInlineSnapshot(`
Array [
Object {
"columns": Object {
"app": Object {
"isFilterable": true,
"value": "Flipper",
},
"device": Object {
"isFilterable": true,
"value": undefined,
},
"direction": Object {
"isFilterable": true,
"value": "toFlipper",
},
"internalMethod": Object {
"isFilterable": true,
"value": undefined,
},
"plugin": Object {
"isFilterable": true,
"value": undefined,
},
"pluginMethod": Object {
"isFilterable": true,
"value": undefined,
},
"time": Object {
"value": "00:13:37",
},
},
"key": "0",
"payload": undefined,
"timestamp": 0,
},
Object {
"columns": Object {
"app": Object {
"isFilterable": true,
"value": "FB4A",
},
"device": Object {
"isFilterable": true,
"value": "Android Phone",
},
"direction": Object {
"isFilterable": true,
"value": "toClient",
},
"internalMethod": Object {
"isFilterable": true,
"value": undefined,
},
"plugin": Object {
"isFilterable": true,
"value": undefined,
},
"pluginMethod": Object {
"isFilterable": true,
"value": undefined,
},
"time": Object {
"value": "00:13:37",
},
},
"key": "1",
"payload": Object {
"hello": "world",
},
"timestamp": 0,
},
]
`);
});
test('It can clear', () => {
const {instance, ...plugin} = TestUtils.startPlugin(Plugin);
expect(instance.state.get().messageRows).toEqual([]);
expect(instance.highlightedRow.get()).toBeUndefined();
plugin.sendEvent('newMessage', {
app: 'Flipper',
direction: 'toFlipper',
});
instance.clear();
const newRows = instance.state.get().messageRows.map(fixRowTimestamps);
expect(newRows).toEqual([]);
});
test('It can highlight a row', () => {
const {instance, ...plugin} = TestUtils.startPlugin(Plugin);
plugin.sendEvent('newMessage', {
app: 'Flipper',
direction: 'toFlipper',
});
instance.setHighlightedRow(['0', '1', '2']);
expect(instance.highlightedRow.get()).toEqual('0');
});
test('It can render empty', async () => {
const {renderer} = TestUtils.renderPlugin(Plugin);
// Default message without any highlighted rows.
expect(
await renderer.findByText('Select a message to view details'),
).not.toBeNull();
});
// TODO(T82512981): Can't test much more right now until UI conversion has happened.