import React from "react"; import { fireEvent, render, screen } from "@testing-library/react"; import { DEFAULT_NO_VALUE_MSG, DEFAULT_REDACTED_MSG, RedactableValue } from "./RedactableValue"; describe("redactablevalue component", () => { it("should display value only when editable is set to false", () => { const callback = jest.fn(); render(); expect(screen.getByText("Text to display")).toBeInTheDocument(); expect(screen.queryByTitle("Redact handler")).not.toBeInTheDocument(); }); it("should display value, redact default icon and call onRedactionRequested when editable is set to true", () => { const callback = jest.fn(); render(); expect(screen.getByText("Text to display")).toBeInTheDocument(); expect(screen.queryByTitle("Redact handler")).toBeInTheDocument(); expect(screen.queryByTitle("Redact default icon")).toBeInTheDocument(); fireEvent.click(screen.getByTitle("Redact handler")); expect(callback).toHaveBeenCalledTimes(1); }); it("should display value, custom icon redact and call onRedactionRequested when editable is set to true", () => { const callback = jest.fn(); render( foobar} />, ); expect(screen.getByText("Text to display")).toBeInTheDocument(); expect(screen.queryByTitle("Redact handler")).toBeInTheDocument(); expect(screen.queryByTitle("Redact default icon")).not.toBeInTheDocument(); expect(screen.getByText("foobar")).toBeInTheDocument(); fireEvent.click(screen.getByText("foobar")); expect(callback).toHaveBeenCalledTimes(1); }); it("should display default redacted message when no redacted message is specified", () => { const callback = jest.fn(); render( foobar} />, ); fireEvent.click(screen.getByText("foobar")); expect(screen.getByText(DEFAULT_REDACTED_MSG)).toBeInTheDocument(); }); it("should display custom redacted message when redacted message is provided", () => { const callback = jest.fn(); const CUSTOM_REDACTED_MSG = "custom redacted message"; render( foobar} redactedMessage={CUSTOM_REDACTED_MSG} />, ); fireEvent.click(screen.getByText("foobar")); expect(screen.getByText(CUSTOM_REDACTED_MSG)).toBeInTheDocument(); }); it("should display default no value message when no custom message is specified", () => { const callback = jest.fn(); render(foobar} />); expect(screen.getByText(DEFAULT_NO_VALUE_MSG)).toBeInTheDocument(); }); it("should display custom no value message when provided", () => { const callback = jest.fn(); const CUSTOM_NO_VALUE_MSG = "custom no value message"; render( foobar} noValueMessage={CUSTOM_NO_VALUE_MSG} />, ); expect(screen.getByText(CUSTOM_NO_VALUE_MSG)).toBeInTheDocument(); }); it("should hide value when isValueHidden", () => { const callback = jest.fn(); render(); expect(screen.queryByTestId("redactable-value")).not.toBeInTheDocument(); }); it("should show redact handler when value exists", () => { const callback = jest.fn(); render(); expect(screen.queryByTitle("Redact handler")).toBeInTheDocument(); }); it("should not show redact handler when value does not exists (obfuscated)", () => { const callback = jest.fn(); render(); expect(screen.queryByTitle("Redact handler")).not.toBeInTheDocument(); }); });