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  })