Skip to content

Commit bc3d095

Browse files
committed
fix: get all tests passing
1 parent e11fefd commit bc3d095

File tree

2 files changed

+36
-11
lines changed

2 files changed

+36
-11
lines changed

site/src/modules/resources/useAgentLogs.test.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
} from "testHelpers/websockets";
88
import { OneWayWebSocket } from "utils/OneWayWebSocket";
99
import { createUseAgentLogs } from "./useAgentLogs";
10+
import { act } from "react";
1011

1112
const millisecondsInOneMinute = 60_000;
1213

@@ -82,14 +83,15 @@ describe("useAgentLogs", () => {
8283
it("Automatically sorts logs that are received out of order", async () => {
8384
const { hookResult, publisherResult } = mountHook();
8485
const logs = generateMockLogs(10, new Date("september 9, 1999"));
85-
const reversed = logs.toReversed();
8686

87-
for (const log of reversed) {
88-
publisherResult.current.publishMessage(
89-
new MessageEvent<string>("message", {
90-
data: JSON.stringify(log),
91-
}),
92-
)
87+
for (const log of logs.toReversed()) {
88+
act(() => {
89+
publisherResult.current.publishMessage(
90+
new MessageEvent<string>("message", {
91+
data: JSON.stringify([log]),
92+
}),
93+
)
94+
})
9395
}
9496
await waitFor(() => expect(hookResult.current).toEqual(logs));
9597
});
@@ -111,7 +113,7 @@ describe("useAgentLogs", () => {
111113
const initialEvent = new MessageEvent<string>("message", {
112114
data: JSON.stringify(initialLogs),
113115
});
114-
publisherResult.current.publishMessage(initialEvent);
116+
act(() => publisherResult.current.publishMessage(initialEvent));
115117
await waitFor(() => expect(hookResult.current).toEqual(initialLogs));
116118

117119
// Disable the hook (and have the hook close the connection behind the
@@ -126,7 +128,7 @@ describe("useAgentLogs", () => {
126128
const newEvent = new MessageEvent<string>("message", {
127129
data: JSON.stringify(newLogs),
128130
});
129-
publisherResult.current.publishMessage(newEvent);
131+
act(() => publisherResult.current.publishMessage(newEvent));
130132
await waitFor(() => expect(hookResult.current).toEqual(newLogs));
131133
});
132134
});

site/src/modules/resources/useAgentLogs.ts

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,42 @@ export function createUseAgentLogs(createSocket: CreateSocket) {
3434
// Always fetch the logs from the beginning. We may want to optimize
3535
// this in the future, but it would add some complexity in the code
3636
// that might not be worth it.
37+
const createdAtMap = new Map<string, number>();
3738
const socket = createSocket(agent.id, { after: 0 });
3839
socket.addEventListener("message", (e) => {
3940
if (e.parseError) {
4041
console.warn("Error parsing agent log: ", e.parseError);
4142
return;
4243
}
43-
setLogs((logs) => [...logs, ...e.parsedMessage]);
44+
45+
if (e.parsedMessage.length === 0) {
46+
return;
47+
}
48+
49+
setLogs((logs) => {
50+
const newLogs = [...logs, ...e.parsedMessage];
51+
newLogs.sort((l1, l2) => {
52+
let d1 = createdAtMap.get(l1.created_at);
53+
if (d1 === undefined) {
54+
d1 = (new Date(l1.created_at)).getTime();
55+
createdAtMap.set(l1.created_at, d1);
56+
}
57+
let d2 = createdAtMap.get(l2.created_at);
58+
if (d2 === undefined) {
59+
d2 = (new Date(l2.created_at)).getTime();
60+
createdAtMap.set(l2.created_at, d2);
61+
}
62+
return d1 - d2;
63+
});
64+
65+
return newLogs;
66+
});
4467
});
4568

4669
socket.addEventListener("error", (e) => {
4770
console.error("Error in agent log socket: ", e);
4871
displayError(
49-
"Unable to watch the agent logs",
72+
"Unable to watch agent logs",
5073
"Please try refreshing the browser",
5174
);
5275
socket.close();

0 commit comments

Comments
 (0)