This repository has no description
0

Configure Feed

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

core / web / src / lib / components / repo / BlobHeader.stories.svelte
2.8 kB 88 lines
1<script module lang="ts"> 2 import { defineMeta, type StoryContext } from "@storybook/addon-svelte-csf"; 3 import { expect } from "storybook/test"; 4 import BlobHeader from "./BlobHeader.svelte"; 5 6 type PlayContext = Pick< 7 StoryContext<Record<string, unknown>>, 8 "canvas" | "canvasElement" | "userEvent" 9 >; 10 11 const copiesContents = async ({ canvas, userEvent }: PlayContext) => { 12 const written: string[] = []; 13 Object.defineProperty(navigator, "clipboard", { 14 value: { writeText: async (text: string) => written.push(text) }, 15 configurable: true 16 }); 17 await userEvent.click(canvas.getByRole("button", { name: "Copy contents" })); 18 await expect(written).toEqual(["export const answer = 42;\n"]); 19 20 await expect(canvas.getByRole("link", { name: "View raw" })).toHaveAttribute( 21 "href", 22 "/dawn/tangled/raw/main/web/src/lib/components/repo/BlobView.svelte" 23 ); 24 const download = canvas.getByRole("link", { name: "Download" }); 25 await expect(download).toHaveAttribute("download", "BlobView.svelte"); 26 }; 27 28 const showsLanguageChip = async ({ canvas, canvasElement }: PlayContext) => { 29 await expect(canvas.getByText("Svelte")).toBeVisible(); 30 await expect(canvasElement.querySelector(".size-2.rounded-full")).not.toBeNull(); 31 }; 32 33 const flipsView = async ({ canvas, userEvent }: PlayContext) => { 34 await userEvent.click(canvas.getByRole("button", { name: "View code" })); 35 await expect(canvas.getByRole("button", { name: "View rendered" })).toBeVisible(); 36 }; 37 38 const { Story } = defineMeta({ 39 title: "Repo/BlobHeader", 40 component: BlobHeader, 41 tags: ["autodocs"], 42 args: { 43 ownerHandle: "dawn", 44 repoName: "tangled", 45 ref: "main", 46 path: "web/src/lib/components/repo/BlobView.svelte", 47 kind: "code", 48 sizeLabel: "4.2 kB", 49 lines: 87, 50 copyText: "export const answer = 42;\n" 51 } 52 }); 53</script> 54 55<Story name="Code file" play={copiesContents} /> 56 57<Story 58 name="Language chip" 59 args={{ path: "web/src/App.svelte", language: "Svelte" }} 60 play={showsLanguageChip} 61/> 62 63<Story 64 name="Markdown rendered" 65 args={{ kind: "markup", path: "docs/guide.md", view: "rendered" }} 66 play={flipsView} 67/> 68 69<Story 70 name="Wrap toggle" 71 args={{ showWrap: true }} 72 play={async ({ canvas, userEvent }: PlayContext) => { 73 const toggle = canvas.getByRole("checkbox", { name: "Wrap" }); 74 await expect(toggle).not.toBeChecked(); 75 await userEvent.click(toggle); 76 await expect(toggle).toBeChecked(); 77 }} 78/> 79 80<Story 81 name="Submodule" 82 args={{ kind: "submodule", path: "vendor/spindle", sizeLabel: null, lines: null, copyText: null }} 83 play={async ({ canvas }: PlayContext) => { 84 await expect(canvas.getByText("spindle")).toBeVisible(); 85 await expect(canvas.queryByRole("link", { name: "View raw" })).toBeNull(); 86 await expect(canvas.queryByRole("button", { name: "Download" })).toBeNull(); 87 }} 88/>