starling-devex 0.1.2

Starling: a local dev orchestrator with a central daemon, shared named-URL proxy, and a k9s-style TUI (a Rust port of Tilt + portless)
import { render, screen } from "@testing-library/react"
import userEvent from "@testing-library/user-event"
import fetchMock from "fetch-mock"
import OverviewTableTriggerModeToggle, {
  ToggleTriggerModeTooltip,
} from "./OverviewTableTriggerModeToggle"
import { TriggerMode } from "./types"

function mockTriggerModeCalls() {
  fetchMock.mock(
    (url) => url.startsWith("/api/override/trigger_mode"),
    JSON.stringify({})
  )
}

describe("OverviewTableTriggerModeToggle", () => {
  beforeEach(() => {
    mockTriggerModeCalls()
  })

  afterEach(() => {
    fetchMock.reset()
  })

  test.each([TriggerMode.TriggerModeManual, TriggerMode.TriggerModeAuto])(
    "sets trigger mode on click when trigger mode is %s",
    (triggerMode) => {
      render(
        <OverviewTableTriggerModeToggle
          resourceName="foo"
          triggerMode={triggerMode}
        />
      )

      const tooltipText =
        triggerMode == TriggerMode.TriggerModeAuto
          ? ToggleTriggerModeTooltip.isAuto
          : ToggleTriggerModeTooltip.isManual
      const triggerModeButton = screen.getByTitle(tooltipText)
      userEvent.click(triggerModeButton)

      const calls = fetchMock.calls()
      expect(calls.length).toEqual(1)
      const call = calls[0]
      expect(call[0]).toEqual("/api/override/trigger_mode")
      expect(call[1]).toBeTruthy()
      expect(call[1]!.method).toEqual("post")
      expect(call[1]!.body).toBeTruthy()
      const request = JSON.parse(call[1]!.body!.toString())
      let expectedTriggerMode: TriggerMode
      switch (triggerMode) {
        case TriggerMode.TriggerModeAuto:
          expectedTriggerMode = TriggerMode.TriggerModeManual
          break
        case TriggerMode.TriggerModeManual:
          expectedTriggerMode = TriggerMode.TriggerModeAuto
          break
        default:
          fail(`unknown trigger mode: ${triggerMode}`)
      }
      expect(request).toEqual({
        manifest_names: ["foo"],
        trigger_mode: expectedTriggerMode,
      })
    }
  )
})