github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/web/src/ClearLogs.test.tsx (about)

     1  import { render, screen } 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 ClearLogs from "./ClearLogs"
    11  import { logLinesToString } from "./logs"
    12  import LogStore, { LogStoreProvider } from "./LogStore"
    13  import { appendLinesForManifestAndSpan } from "./testlogs"
    14  import { ResourceName } from "./types"
    15  
    16  describe("ClearLogs", () => {
    17    beforeEach(() => {
    18      mockAnalyticsCalls()
    19    })
    20  
    21    afterEach(() => {
    22      cleanupMockAnalyticsCalls()
    23    })
    24  
    25    const createPopulatedLogStore = (): LogStore => {
    26      const logStore = new LogStore()
    27      appendLinesForManifestAndSpan(logStore, "", "", [
    28        "global 1\n",
    29        "global 2\n",
    30      ])
    31      appendLinesForManifestAndSpan(logStore, "vigoda", "build:m1:1", [
    32        "m1:1 build line 1\n",
    33      ])
    34      appendLinesForManifestAndSpan(logStore, "vigoda", "pod:m1-abc123", [
    35        "m1:1 runtime line 1\n",
    36      ])
    37      appendLinesForManifestAndSpan(logStore, "manifest2", "build:m2", [
    38        "m2 build line 1\n",
    39      ])
    40      appendLinesForManifestAndSpan(logStore, "vigoda", "build:m1:2", [
    41        "m1:2 build line 1\n",
    42        "m1:2 build line 2\n",
    43      ])
    44      appendLinesForManifestAndSpan(logStore, "manifest2", "pod:m2-def456", [
    45        "m2 runtime line 1\n",
    46      ])
    47      return logStore
    48    }
    49  
    50    it("clears all resources", () => {
    51      const logStore = createPopulatedLogStore()
    52      render(
    53        <LogStoreProvider value={logStore}>
    54          <ClearLogs resourceName={ResourceName.all} />
    55        </LogStoreProvider>
    56      )
    57  
    58      userEvent.click(screen.getByRole("button"))
    59  
    60      expect(logStore.spans).toEqual({})
    61      expect(logStore.allLog()).toHaveLength(0)
    62  
    63      expectIncrs({
    64        name: "ui.web.clearLogs",
    65        tags: { action: AnalyticsAction.Click, all: "true" },
    66      })
    67    })
    68  
    69    it("clears a specific resource", () => {
    70      const logStore = createPopulatedLogStore()
    71      render(
    72        <LogStoreProvider value={logStore}>
    73          <ClearLogs resourceName={"vigoda"} />
    74        </LogStoreProvider>
    75      )
    76  
    77      userEvent.click(screen.getByRole("button"))
    78  
    79      expect(Object.keys(logStore.spans).sort()).toEqual([
    80        "_",
    81        "build:m2",
    82        "pod:m2-def456",
    83      ])
    84  
    85      expect(logLinesToString(logStore.allLog(), false)).toEqual(
    86        "global 1\nglobal 2\nm2 build line 1\nm2 runtime line 1"
    87      )
    88  
    89      expectIncrs({
    90        name: "ui.web.clearLogs",
    91        tags: { action: AnalyticsAction.Click, all: "false" },
    92      })
    93    })
    94  })