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