feat: add telegram-style resource stream
This commit is contained in:
53
src/components/messageStream/hooks/useGroupedByDay.test.ts
Normal file
53
src/components/messageStream/hooks/useGroupedByDay.test.ts
Normal file
@@ -0,0 +1,53 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { renderHook } from "@testing-library/react";
|
||||
import { useGroupedByDay } from "./useGroupedByDay";
|
||||
import type { Post } from "../../../types/post";
|
||||
|
||||
function makePost(id: string, isoDate: string): Post {
|
||||
return {
|
||||
id,
|
||||
categoryId: 1,
|
||||
categorySlug: "x",
|
||||
language: "zh-CN",
|
||||
attachments: [],
|
||||
isRecommended: false,
|
||||
publishedAt: isoDate,
|
||||
updatedAt: isoDate,
|
||||
text: id,
|
||||
};
|
||||
}
|
||||
|
||||
describe("useGroupedByDay", () => {
|
||||
it("groups posts by local date", () => {
|
||||
const posts: Post[] = [
|
||||
makePost("a", "2026-02-27T10:00:00.000Z"),
|
||||
makePost("b", "2026-02-27T23:00:00.000Z"),
|
||||
makePost("c", "2026-02-28T01:00:00.000Z"),
|
||||
makePost("d", "2026-05-16T12:00:00.000Z"),
|
||||
];
|
||||
const { result } = renderHook(() => useGroupedByDay(posts, "zh-CN"));
|
||||
expect(result.current.length).toBeGreaterThanOrEqual(2);
|
||||
const allIds = result.current.flatMap((g) => g.items.map((p) => p.id));
|
||||
expect(allIds).toEqual(["a", "b", "c", "d"]);
|
||||
});
|
||||
|
||||
it("preserves input order within groups", () => {
|
||||
const posts: Post[] = [
|
||||
makePost("first", "2026-03-01T10:00:00.000Z"),
|
||||
makePost("second", "2026-03-01T11:00:00.000Z"),
|
||||
makePost("third", "2026-03-01T12:00:00.000Z"),
|
||||
];
|
||||
const { result } = renderHook(() => useGroupedByDay(posts, "en"));
|
||||
expect(result.current).toHaveLength(1);
|
||||
expect(result.current[0].items.map((p) => p.id)).toEqual([
|
||||
"first",
|
||||
"second",
|
||||
"third",
|
||||
]);
|
||||
});
|
||||
|
||||
it("returns empty array for empty input", () => {
|
||||
const { result } = renderHook(() => useGroupedByDay([], "zh-CN"));
|
||||
expect(result.current).toEqual([]);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user