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

     1  import { render } from "@testing-library/react"
     2  import React from "react"
     3  import Features, { FeaturesProvider, Flag, useFeatures } from "./feature"
     4  
     5  describe("feature", () => {
     6    it("returns false if the feature does not exist", () => {
     7      let features = new Features({})
     8      expect(features.isEnabled("foo" as Flag)).toBe(false)
     9    })
    10  
    11    it("returns false if the feature does exist and is false", () => {
    12      let features = new Features({ foo: false })
    13      expect(features.isEnabled("foo" as Flag)).toBe(false)
    14    })
    15  
    16    it("returns true if the feature does exist and is true", () => {
    17      let features = new Features({ foo: true })
    18      expect(features.isEnabled("foo" as Flag)).toBe(true)
    19    })
    20  
    21    it("still works if null is passed in", () => {
    22      let features = new Features(null)
    23      expect(features.isEnabled("foo" as Flag)).toBe(false)
    24    })
    25  })
    26  
    27  // Make sure that useFeatures() doesn't break memoization.
    28  it("memoizes renders", () => {
    29    let renderCount = 0
    30    let FakeEl = React.memo(() => {
    31      useFeatures()
    32      renderCount++
    33      return <div></div>
    34    })
    35  
    36    let flags = [{ name: "foo", value: true }]
    37    let tree = (flags: Proto.v1alpha1UIFeatureFlag[]) => {
    38      return (
    39        <FeaturesProvider featureFlags={flags}>
    40          <FakeEl />
    41        </FeaturesProvider>
    42      )
    43    }
    44  
    45    let { rerender } = render(tree(flags))
    46  
    47    expect(renderCount).toEqual(1)
    48    rerender(tree(flags))
    49  
    50    // Make sure we don't re-render on a no-op update.
    51    expect(renderCount).toEqual(1)
    52  
    53    // Make sure we do re-render on a real update.
    54    let newFlags = [{ name: "foo", value: false }]
    55    rerender(tree(newFlags))
    56    expect(renderCount).toEqual(2)
    57  })