diff --git a/src/features/packets/PacketExpansion.tsx b/src/features/packets/PacketExpansion.tsx
index ee196a6..a412870 100644
--- a/src/features/packets/PacketExpansion.tsx
+++ b/src/features/packets/PacketExpansion.tsx
@@ -46,7 +46,14 @@ export function PacketExpansion({ packet, onOpenAnalyzer, onViewPath, selectedOb
- {noObservations ? (
+ {isError ? (
+
+ Failed to load observations
+
+
+ ) : noObservations ? (
emptyState
) : isLoading ? (
@@ -58,13 +65,6 @@ export function PacketExpansion({ packet, onOpenAnalyzer, onViewPath, selectedOb
/>
))}
- ) : isError ? (
-
- Failed to load observations
-
-
) : data && data.observations.length === 0 ? (
emptyState
) : data ? (
diff --git a/tests/features/packets/PacketExpansion.test.tsx b/tests/features/packets/PacketExpansion.test.tsx
index b1b9074..db7a6cf 100644
--- a/tests/features/packets/PacketExpansion.test.tsx
+++ b/tests/features/packets/PacketExpansion.test.tsx
@@ -47,6 +47,14 @@ describe("PacketExpansion", () => {
expect(screen.getByRole("button", { name: /retry/i })).toBeInTheDocument();
});
+ it("shows error state even when summary count is zero", () => {
+ usePacketDetail.mockReturnValue({ isError: true, refetch: vi.fn() });
+ render(
);
+ expect(screen.getByText("Failed to load observations")).toBeInTheDocument();
+ expect(screen.getByRole("button", { name: /retry/i })).toBeInTheDocument();
+ expect(screen.queryByText("No observations")).not.toBeInTheDocument();
+ });
+
it("calls refetch when retry is clicked", () => {
const refetch = vi.fn();
usePacketDetail.mockReturnValue({ isError: true, refetch });