github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/web/src/OverviewTableTriggerModeToggle.test.tsx (about) 1 import { render, screen } from "@testing-library/react" 2 import userEvent from "@testing-library/user-event" 3 import fetchMock from "fetch-mock" 4 import { 5 cleanupMockAnalyticsCalls, 6 mockAnalyticsCalls, 7 nonAnalyticsCalls, 8 } from "./analytics_test_helpers" 9 import OverviewTableTriggerModeToggle, { 10 ToggleTriggerModeTooltip, 11 } from "./OverviewTableTriggerModeToggle" 12 import { TriggerMode } from "./types" 13 14 function mockTriggerModeCalls() { 15 fetchMock.mock( 16 (url) => url.startsWith("/api/override/trigger_mode"), 17 JSON.stringify({}) 18 ) 19 } 20 21 describe("OverviewTableTriggerModeToggle", () => { 22 beforeEach(() => { 23 fetchMock.reset() 24 mockAnalyticsCalls() 25 mockTriggerModeCalls() 26 }) 27 28 afterEach(() => { 29 cleanupMockAnalyticsCalls() 30 }) 31 32 test.each([TriggerMode.TriggerModeManual, TriggerMode.TriggerModeAuto])( 33 "sets trigger mode on click when trigger mode is %s", 34 (triggerMode) => { 35 render( 36 <OverviewTableTriggerModeToggle 37 resourceName="foo" 38 triggerMode={triggerMode} 39 /> 40 ) 41 42 const tooltipText = 43 triggerMode == TriggerMode.TriggerModeAuto 44 ? ToggleTriggerModeTooltip.isAuto 45 : ToggleTriggerModeTooltip.isManual 46 const triggerModeButton = screen.getByTitle(tooltipText) 47 userEvent.click(triggerModeButton) 48 49 const calls = nonAnalyticsCalls() 50 expect(calls.length).toEqual(1) 51 const call = calls[0] 52 expect(call[0]).toEqual("/api/override/trigger_mode") 53 expect(call[1]).toBeTruthy() 54 expect(call[1]!.method).toEqual("post") 55 expect(call[1]!.body).toBeTruthy() 56 const request = JSON.parse(call[1]!.body!.toString()) 57 let expectedTriggerMode: TriggerMode 58 switch (triggerMode) { 59 case TriggerMode.TriggerModeAuto: 60 expectedTriggerMode = TriggerMode.TriggerModeManual 61 break 62 case TriggerMode.TriggerModeManual: 63 expectedTriggerMode = TriggerMode.TriggerModeAuto 64 break 65 default: 66 fail(`unknown trigger mode: ${triggerMode}`) 67 } 68 expect(request).toEqual({ 69 manifest_names: ["foo"], 70 trigger_mode: expectedTriggerMode, 71 }) 72 } 73 ) 74 })