Files
flipper/desktop/plugins/public/logs/__tests__/logs.node.tsx
Luke De Feo 4ada8b9322 Summary:
Make as manything as inferred enum as possible

changelog: [Logs] Improve power search config to populate dropdown for level, PID & Tag

Reviewed By: aigoncharov

Differential Revision: D51199644

fbshipit-source-id: 383b61abca5d91a8e318bbfb1aac7d3852074167
2023-11-13 04:43:05 -08:00

179 lines
3.7 KiB
TypeScript

/**
* Copyright (c) Meta Platforms, Inc. and 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 {sleep, TestUtils} from 'flipper-plugin';
import * as LogsPlugin from '../index';
const entry1 = {
date: new Date(1611854112859),
message: 'test1',
pid: 0,
tag: 'test',
tid: 1,
type: 'error',
app: 'X',
} as const;
const entry2 = {
date: new Date(1611854117859),
message: 'test2',
pid: 2,
tag: 'test',
tid: 3,
type: 'warn',
app: 'Y',
} as const;
const entry3 = {
date: new Date(1611854112859),
message: 'test3',
pid: 0,
tag: 'test',
tid: 1,
type: 'error',
app: 'X',
} as const;
test('it will merge equal rows', () => {
const {instance, sendLogEntry} = TestUtils.startDevicePlugin(LogsPlugin);
sendLogEntry(entry1);
sendLogEntry(entry2);
sendLogEntry({
...entry2,
date: new Date(1611954117859),
});
sendLogEntry(entry3);
expect(instance.rows.records()).toMatchInlineSnapshot(`
[
{
"app": "X",
"count": 1,
"date": 2021-01-28T17:15:12.859Z,
"message": "test1",
"pid": 0,
"pidStr": "0",
"tag": "test",
"tid": 1,
"type": "error",
},
{
"app": "Y",
"count": 2,
"date": 2021-01-28T17:15:17.859Z,
"message": "test2",
"pid": 2,
"pidStr": "2",
"tag": "test",
"tid": 3,
"type": "warn",
},
{
"app": "X",
"count": 1,
"date": 2021-01-28T17:15:12.859Z,
"message": "test3",
"pid": 0,
"pidStr": "0",
"tag": "test",
"tid": 1,
"type": "error",
},
]
`);
});
test('it supports deeplink and select nodes + navigating to bottom', async () => {
const {instance, sendLogEntry, triggerDeepLink, act, triggerMenuEntry} =
TestUtils.renderDevicePlugin(LogsPlugin);
sendLogEntry(entry1);
sendLogEntry(entry2);
sendLogEntry(entry3);
expect(instance.tableManagerRef).not.toBeUndefined();
expect(instance.tableManagerRef.current).not.toBeNull();
expect(instance.tableManagerRef.current?.getSelectedItems()).toEqual([]);
act(() => {
triggerDeepLink('test2');
});
await sleep(1000);
const current = instance.tableManagerRef.current;
console.error('ref', current);
expect(current?.getSelectedItems()).toEqual([
{
...entry2,
pidStr: '2',
count: 1,
},
]);
act(() => {
triggerMenuEntry('goToBottom');
});
expect(instance.tableManagerRef.current?.getSelectedItems()).toEqual([
{
...entry3,
pidStr: '0',
count: 1,
},
]);
});
test('export / import plugin does work', async () => {
const {instance, exportStateAsync, sendLogEntry} =
TestUtils.startDevicePlugin(LogsPlugin);
sendLogEntry(entry1);
sendLogEntry(entry2);
const data = await exportStateAsync();
expect(data).toMatchInlineSnapshot(`
{
"logs": [
{
"app": "X",
"count": 1,
"date": 2021-01-28T17:15:12.859Z,
"message": "test1",
"pid": 0,
"pidStr": "0",
"tag": "test",
"tid": 1,
"type": "error",
},
{
"app": "Y",
"count": 1,
"date": 2021-01-28T17:15:17.859Z,
"message": "test2",
"pid": 2,
"pidStr": "2",
"tag": "test",
"tid": 3,
"type": "warn",
},
],
}
`);
expect(instance.rows.size).toBe(2);
// Run a second import
{
const {exportStateAsync} = TestUtils.startDevicePlugin(LogsPlugin, {
initialState: data,
});
expect(await exportStateAsync()).toEqual(data);
}
});