github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/web/src/SidebarKeyboardShortcuts.test.tsx (about) 1 import { render, RenderResult } from "@testing-library/react" 2 import userEvent from "@testing-library/user-event" 3 import React from "react" 4 import { MemoryRouter } from "react-router" 5 import LogStore from "./LogStore" 6 import { ResourceNavContextProvider } from "./ResourceNav" 7 import SidebarItem from "./SidebarItem" 8 import SidebarKeyboardShortcuts from "./SidebarKeyboardShortcuts" 9 import { nResourceView } from "./testdata" 10 import { ResourceView } from "./types" 11 12 describe("SidebarKeyboardShortcuts", () => { 13 const logStore = new LogStore() 14 const items = nResourceView(2).uiResources.map( 15 (r) => new SidebarItem(r, logStore) 16 ) 17 let rerender: RenderResult["rerender"] 18 let openResourceSpy: jest.Mock 19 let onStartBuildSpy: jest.Mock 20 21 beforeEach(() => { 22 openResourceSpy = jest.fn() 23 onStartBuildSpy = jest.fn() 24 25 const resourceNavValue = { 26 selectedResource: "", 27 invalidResource: "", 28 openResource: openResourceSpy, 29 } 30 31 rerender = render( 32 <SidebarKeyboardShortcuts 33 items={items} 34 selected="" 35 resourceView={ResourceView.Log} 36 onStartBuild={onStartBuildSpy} 37 />, 38 { 39 wrapper: ({ children }) => ( 40 <MemoryRouter initialEntries={["/init"]}> 41 <ResourceNavContextProvider value={resourceNavValue}> 42 {children} 43 </ResourceNavContextProvider> 44 </MemoryRouter> 45 ), 46 } 47 ).rerender 48 }) 49 50 it("navigates forwards on 'j'", () => { 51 expect(openResourceSpy).not.toHaveBeenCalled() 52 53 userEvent.keyboard("j") 54 55 expect(openResourceSpy).toHaveBeenCalledWith(items[0].name) 56 }) 57 58 it("navigates forwards on 'j' without wrapping", () => { 59 // Select the last resource item 60 rerender( 61 <SidebarKeyboardShortcuts 62 items={items} 63 selected={items[1].name} 64 resourceView={ResourceView.Log} 65 onStartBuild={onStartBuildSpy} 66 /> 67 ) 68 69 userEvent.keyboard("j") 70 71 expect(openResourceSpy).not.toHaveBeenCalled() 72 }) 73 74 it("navigates backward on 'k'", () => { 75 // Select the last resource item 76 rerender( 77 <SidebarKeyboardShortcuts 78 items={items} 79 selected={items[1].name} 80 resourceView={ResourceView.Log} 81 onStartBuild={onStartBuildSpy} 82 /> 83 ) 84 85 userEvent.keyboard("k") 86 87 expect(openResourceSpy).toHaveBeenCalledWith(items[0].name) 88 }) 89 90 it("navigates backward on 'k' without wrapping", () => { 91 userEvent.keyboard("k") 92 93 expect(openResourceSpy).not.toHaveBeenCalled() 94 }) 95 96 it("triggers update on 'r'", () => { 97 expect(onStartBuildSpy).not.toHaveBeenCalled() 98 99 userEvent.keyboard("r") 100 101 expect(onStartBuildSpy).toHaveBeenCalled() 102 }) 103 })