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