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