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