github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/web/src/OverviewActionBarKeyboardShortcuts.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 { AnalyticsAction } from "./analytics"
     5  import {
     6    cleanupMockAnalyticsCalls,
     7    expectIncrs,
     8    mockAnalyticsCalls,
     9  } from "./analytics_test_helpers"
    10  import { logLinesToString } from "./logs"
    11  import LogStore from "./LogStore"
    12  import OverviewActionBarKeyboardShortcuts from "./OverviewActionBarKeyboardShortcuts"
    13  import { appendLinesForManifestAndSpan } from "./testlogs"
    14  
    15  const TEST_URL_A = { url: "https://tilt.dev:4000" }
    16  const TEST_URL_B = { url: "https://tilt.dev:4001" }
    17  const TEST_RESOURCE_NAME = "fake-resource"
    18  
    19  describe("Detail View keyboard shortcuts", () => {
    20    let rerender: RenderResult["rerender"]
    21    let openEndpointMock: jest.Mock
    22    let logStore: LogStore
    23  
    24    beforeEach(() => {
    25      mockAnalyticsCalls()
    26      logStore = new LogStore()
    27      openEndpointMock = jest.fn()
    28      rerender = render(
    29        <OverviewActionBarKeyboardShortcuts
    30          logStore={logStore}
    31          resourceName={TEST_RESOURCE_NAME}
    32          openEndpointUrl={openEndpointMock}
    33          endpoints={[TEST_URL_A, TEST_URL_B]}
    34        />
    35      ).rerender
    36    })
    37  
    38    afterEach(() => {
    39      cleanupMockAnalyticsCalls()
    40    })
    41  
    42    describe("open endpoints", () => {
    43      it("does NOT open any endpoints if there aren't any", () => {
    44        rerender(
    45          <OverviewActionBarKeyboardShortcuts
    46            logStore={logStore}
    47            resourceName={TEST_RESOURCE_NAME}
    48            openEndpointUrl={openEndpointMock}
    49          />
    50        )
    51  
    52        userEvent.keyboard("{Shift>}1")
    53  
    54        expect(openEndpointMock).not.toHaveBeenCalled()
    55      })
    56  
    57      it("opens the first endpoint when SHIFT + 1 are pressed", () => {
    58        userEvent.keyboard("{Shift>}1")
    59  
    60        expect(openEndpointMock).toHaveBeenCalledWith(TEST_URL_A.url)
    61      })
    62  
    63      it("opens the corresponding endpoint when SHIFT + a number are pressed", () => {
    64        userEvent.keyboard("{Shift>}2")
    65  
    66        expect(openEndpointMock).toHaveBeenCalledWith(TEST_URL_B.url)
    67      })
    68    })
    69  
    70    describe("clear logs", () => {
    71      // Add a log to the store
    72      beforeEach(() =>
    73        appendLinesForManifestAndSpan(logStore, TEST_RESOURCE_NAME, "span:1", [
    74          "line 1\n",
    75        ])
    76      )
    77  
    78      it("clears logs when the META + BACKSPACE keys are pressed", () => {
    79        userEvent.keyboard("{Meta>}{Backspace}")
    80  
    81        expect(logLinesToString(logStore.allLog(), false)).toEqual("")
    82        expectIncrs({
    83          name: "ui.web.clearLogs",
    84          tags: { action: AnalyticsAction.Shortcut, all: "false" },
    85        })
    86      })
    87  
    88      it("clears logs when the CTRL + BACKSPACE keys are pressed", () => {
    89        userEvent.keyboard("{Control>}{Backspace}")
    90  
    91        expect(logLinesToString(logStore.allLog(), false)).toEqual("")
    92        expectIncrs({
    93          name: "ui.web.clearLogs",
    94          tags: { action: AnalyticsAction.Shortcut, all: "false" },
    95        })
    96      })
    97    })
    98  })