Skip to content

Commit 108141c

Browse files
authored
tests(ourlogs): Add basic tests for ourlogs in replays (#97516)
Some basic tests for ourlogs in replays. Without the `LogsQueryParamsProvider`, this test will fail starting in #97497.
1 parent 1225b43 commit 108141c

File tree

1 file changed

+106
-0
lines changed

1 file changed

+106
-0
lines changed
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
import type {ReactNode} from 'react';
2+
import {ReplayRecordFixture} from 'sentry-fixture/replayRecord';
3+
4+
import {render, screen} from 'sentry-test/reactTestingLibrary';
5+
6+
import {Provider as ReplayContextProvider} from 'sentry/components/replays/replayContext';
7+
import {ReplayReaderProvider} from 'sentry/utils/replays/playback/providers/replayReaderProvider';
8+
import ReplayReader from 'sentry/utils/replays/replayReader';
9+
import OurLogs from 'sentry/views/replays/detail/ourlogs';
10+
import {useReplayTraces} from 'sentry/views/replays/detail/trace/useReplayTraces';
11+
12+
jest.mock('sentry/views/replays/detail/trace/useReplayTraces');
13+
14+
function Wrappers({
15+
children,
16+
replay = null,
17+
}: {
18+
children: ReactNode;
19+
replay?: ReplayReader | null;
20+
}) {
21+
return (
22+
<ReplayReaderProvider replay={replay}>
23+
<ReplayContextProvider analyticsContext="" isFetching={false} replay={replay}>
24+
{children}
25+
</ReplayContextProvider>
26+
</ReplayReaderProvider>
27+
);
28+
}
29+
30+
const mockReplay = ReplayReader.factory({
31+
replayRecord: ReplayRecordFixture({
32+
browser: {
33+
name: 'Chrome',
34+
version: '110.0.0',
35+
},
36+
tags: {
37+
foo: ['bar', 'baz'],
38+
my_custom_tag: ['a wordy value'],
39+
},
40+
}),
41+
errors: [],
42+
fetching: false,
43+
attachments: [],
44+
});
45+
46+
describe('OurLogs', function () {
47+
beforeEach(function () {
48+
// Seeing this error: <tbody> cannot be a child of <div>.
49+
jest.spyOn(console, 'error').mockImplementation();
50+
});
51+
52+
afterEach(function () {
53+
jest.clearAllMocks();
54+
});
55+
56+
it("should show a placeholder if there's no replay record", function () {
57+
jest.mocked(useReplayTraces).mockReturnValue({
58+
replayTraces: [],
59+
indexComplete: true,
60+
indexError: undefined,
61+
} as any);
62+
63+
render(
64+
<Wrappers>
65+
<OurLogs />
66+
</Wrappers>
67+
);
68+
69+
expect(screen.getByTestId('loading-indicator')).toBeInTheDocument();
70+
});
71+
72+
it("shows empty if there's no replay traces", function () {
73+
jest.mocked(useReplayTraces).mockReturnValue({
74+
replayTraces: [],
75+
indexComplete: true,
76+
indexError: undefined,
77+
} as any);
78+
79+
render(
80+
<Wrappers replay={mockReplay}>
81+
<OurLogs />
82+
</Wrappers>
83+
);
84+
85+
expect(screen.getByText(/No logs found/)).toBeInTheDocument();
86+
});
87+
88+
it("shows logs table if there's replay traces", function () {
89+
jest.mocked(useReplayTraces).mockReturnValue({
90+
replayTraces: [
91+
{timestamp: undefined, traceSlug: 'trace1'},
92+
{timestamp: undefined, traceSlug: 'trace2'},
93+
],
94+
indexComplete: true,
95+
indexError: undefined,
96+
} as any);
97+
98+
render(
99+
<Wrappers replay={mockReplay}>
100+
<OurLogs />
101+
</Wrappers>
102+
);
103+
104+
expect(screen.getByTestId('loading-placeholder')).toBeInTheDocument();
105+
});
106+
});

0 commit comments

Comments
 (0)