BlueSky & more on desktop lazurite.stormlightlabs.org/
tauri rust typescript bluesky appview atproto solid
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 85 lines 2.9 kB view raw
1import { fireEvent, render, screen, waitFor } from "@solidjs/testing-library"; 2import { beforeEach, describe, expect, it, vi } from "vitest"; 3import { AddColumnPanel } from "../AddColumnPanel"; 4 5const getFeedGeneratorsMock = vi.hoisted(() => vi.fn()); 6const getPreferencesMock = vi.hoisted(() => vi.fn()); 7 8vi.mock( 9 "$/lib/api/feeds", 10 () => ({ FeedController: { getFeedGenerators: getFeedGeneratorsMock, getPreferences: getPreferencesMock } }), 11); 12vi.mock("@tauri-apps/plugin-log", () => ({ error: vi.fn(), info: vi.fn(), warn: vi.fn() })); 13 14describe("AddColumnPanel", () => { 15 beforeEach(() => { 16 vi.resetAllMocks(); 17 getFeedGeneratorsMock.mockResolvedValue({ feeds: [] }); 18 getPreferencesMock.mockResolvedValue({ 19 feedViewPrefs: [], 20 savedFeeds: [{ id: "following", pinned: true, type: "timeline", value: "following" }], 21 }); 22 }); 23 24 it("renders the picker when open", async () => { 25 render(() => <AddColumnPanel open={true} onAdd={vi.fn()} onClose={vi.fn()} />); 26 27 expect(await screen.findByRole("dialog")).toBeInTheDocument(); 28 expect(await screen.findByText("Add column")).toBeInTheDocument(); 29 expect(await screen.findByText("Following")).toBeInTheDocument(); 30 }); 31 32 it("submits the selected feed as a deck column", async () => { 33 const onAdd = vi.fn(); 34 35 render(() => <AddColumnPanel open={true} onAdd={onAdd} onClose={vi.fn()} />); 36 37 fireEvent.click(await screen.findByRole("button", { name: /timeline/i })); 38 39 await waitFor(() => 40 expect(onAdd).toHaveBeenCalledWith( 41 "feed", 42 JSON.stringify({ feedType: "timeline", feedUri: "following", title: "Following" }), 43 ) 44 ); 45 }); 46 47 it("hydrates feed generator labels in the picker and submission config", async () => { 48 const onAdd = vi.fn(); 49 getPreferencesMock.mockResolvedValue({ 50 feedViewPrefs: [], 51 savedFeeds: [{ 52 id: "at://did:plc:alice/app.bsky.feed.generator/for-you", 53 pinned: true, 54 type: "feed", 55 value: "at://did:plc:alice/app.bsky.feed.generator/for-you", 56 }], 57 }); 58 getFeedGeneratorsMock.mockResolvedValue({ 59 feeds: [{ 60 avatar: "https://cdn.example.com/for-you.png", 61 did: "did:plc:alice", 62 displayName: "For You", 63 uri: "at://did:plc:alice/app.bsky.feed.generator/for-you", 64 }], 65 }); 66 67 render(() => <AddColumnPanel open={true} onAdd={onAdd} onClose={vi.fn()} />); 68 69 expect(await screen.findByText("For You")).toBeInTheDocument(); 70 expect(document.querySelector("img[src=\"https://cdn.example.com/for-you.png\"]")).toBeTruthy(); 71 72 fireEvent.click(await screen.findByRole("button", { name: /for you/i })); 73 74 await waitFor(() => 75 expect(onAdd).toHaveBeenCalledWith( 76 "feed", 77 JSON.stringify({ 78 feedType: "feed", 79 feedUri: "at://did:plc:alice/app.bsky.feed.generator/for-you", 80 title: "For You", 81 }), 82 ) 83 ); 84 }); 85});