refactor: replace enabled prop with disabled in DigitalClock
This commit is contained in:
committed by
Loic Coenen (aider)
parent
a5e300d238
commit
0b3a1d4d66
@@ -24,21 +24,21 @@ describe("DigitalClock", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("renders nothing when disabled", () => {
|
it("renders the input as disabled when disabled prop is true", () => {
|
||||||
const { container } = render(
|
render(
|
||||||
<DigitalClock
|
<DigitalClock
|
||||||
enabled={false}
|
disabled={true}
|
||||||
currentTime={new Date(2025, 0, 1, 14, 30, 15)}
|
currentTime={new Date(2025, 0, 1, 14, 30, 15)}
|
||||||
onTimeChange={onTimeChangeMock}
|
onTimeChange={onTimeChangeMock}
|
||||||
/>,
|
/>,
|
||||||
);
|
);
|
||||||
expect(container.innerHTML).toBe("");
|
const input = screen.getByTestId("time-input");
|
||||||
|
expect(input).toBeDisabled();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("renders the digital time and input when enabled", () => {
|
it("renders the digital time and input when enabled", () => {
|
||||||
render(
|
render(
|
||||||
<DigitalClock
|
<DigitalClock
|
||||||
enabled={true}
|
|
||||||
currentTime={new Date(2025, 0, 1, 14, 30, 15)}
|
currentTime={new Date(2025, 0, 1, 14, 30, 15)}
|
||||||
onTimeChange={onTimeChangeMock}
|
onTimeChange={onTimeChangeMock}
|
||||||
/>,
|
/>,
|
||||||
@@ -50,7 +50,6 @@ describe("DigitalClock", () => {
|
|||||||
it("calls onTimeChange when a valid time is entered", () => {
|
it("calls onTimeChange when a valid time is entered", () => {
|
||||||
render(
|
render(
|
||||||
<DigitalClock
|
<DigitalClock
|
||||||
enabled={true}
|
|
||||||
currentTime={new Date(2025, 0, 1, 14, 30, 15)}
|
currentTime={new Date(2025, 0, 1, 14, 30, 15)}
|
||||||
onTimeChange={onTimeChangeMock}
|
onTimeChange={onTimeChangeMock}
|
||||||
/>,
|
/>,
|
||||||
@@ -68,7 +67,6 @@ describe("DigitalClock", () => {
|
|||||||
it("does not call onTimeChange when an invalid time is entered", () => {
|
it("does not call onTimeChange when an invalid time is entered", () => {
|
||||||
render(
|
render(
|
||||||
<DigitalClock
|
<DigitalClock
|
||||||
enabled={true}
|
|
||||||
currentTime={new Date(2025, 0, 1, 14, 30, 15)}
|
currentTime={new Date(2025, 0, 1, 14, 30, 15)}
|
||||||
onTimeChange={onTimeChangeMock}
|
onTimeChange={onTimeChangeMock}
|
||||||
/>,
|
/>,
|
||||||
|
|||||||
@@ -13,13 +13,21 @@ vi.mock("../containers/DigitalClock", () => ({
|
|||||||
enabled,
|
enabled,
|
||||||
currentTime,
|
currentTime,
|
||||||
onTimeChange,
|
onTimeChange,
|
||||||
|
disabled = false,
|
||||||
}: {
|
}: {
|
||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
currentTime: Date;
|
currentTime: Date;
|
||||||
onTimeChange: (d: Date) => void;
|
onTimeChange: (d: Date) => void;
|
||||||
|
disabled?: boolean;
|
||||||
}) => (
|
}) => (
|
||||||
<div data-testid="digital-clock-wrapper">
|
<div data-testid="digital-clock-wrapper">
|
||||||
<span data-testid="digital-clock-time">{currentTime.toISOString()}</span>
|
<span data-testid="digital-clock-time">{currentTime.toISOString()}</span>
|
||||||
|
<input
|
||||||
|
data-testid="time-input"
|
||||||
|
disabled={disabled}
|
||||||
|
value=""
|
||||||
|
onChange={() => {}}
|
||||||
|
/>
|
||||||
<button
|
<button
|
||||||
data-testid="set-time"
|
data-testid="set-time"
|
||||||
onClick={() => onTimeChange(new Date(2025, 0, 1, 12, 0, 0))}
|
onClick={() => onTimeChange(new Date(2025, 0, 1, 12, 0, 0))}
|
||||||
@@ -52,11 +60,16 @@ describe("TimeConverter", () => {
|
|||||||
expect(screen.getByTestId("digital-clock-wrapper")).toBeInTheDocument();
|
expect(screen.getByTestId("digital-clock-wrapper")).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("disables both clocks when checkbox is checked", () => {
|
it("disables the digital clock input when checkbox is checked", () => {
|
||||||
render(<TimeConverter />);
|
render(<TimeConverter />);
|
||||||
|
// Initially the input is enabled
|
||||||
|
expect(screen.getByTestId("time-input")).not.toBeDisabled();
|
||||||
|
// Click the checkbox
|
||||||
fireEvent.click(screen.getByTestId("use-system-time"));
|
fireEvent.click(screen.getByTestId("use-system-time"));
|
||||||
expect(screen.getByTestId("berlin-clock")).toHaveTextContent("disabled");
|
// Now the input should be disabled
|
||||||
expect(screen.getByTestId("disabled-indicator")).toBeInTheDocument();
|
expect(screen.getByTestId("time-input")).toBeDisabled();
|
||||||
|
// But the BerlinClock still appears enabled (no "disabled" text)
|
||||||
|
expect(screen.getByTestId("berlin-clock")).toHaveTextContent("enabled");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("calls setCurrentTime when DigitalClock triggers onTimeChange", () => {
|
it("calls setCurrentTime when DigitalClock triggers onTimeChange", () => {
|
||||||
|
|||||||
@@ -2,15 +2,15 @@ import { useState } from "react";
|
|||||||
import { dateToDigital, digitalToDate } from "../utils";
|
import { dateToDigital, digitalToDate } from "../utils";
|
||||||
|
|
||||||
interface DigitalClockProps {
|
interface DigitalClockProps {
|
||||||
enabled: boolean;
|
|
||||||
currentTime: Date;
|
currentTime: Date;
|
||||||
onTimeChange: (time: Date) => void;
|
onTimeChange: (time: Date) => void;
|
||||||
|
disabled?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function DigitalClock({
|
export function DigitalClock({
|
||||||
enabled,
|
|
||||||
currentTime,
|
currentTime,
|
||||||
onTimeChange,
|
onTimeChange,
|
||||||
|
disabled = false,
|
||||||
}: DigitalClockProps) {
|
}: DigitalClockProps) {
|
||||||
const [inputValue, setInputValue] = useState(dateToDigital(currentTime));
|
const [inputValue, setInputValue] = useState(dateToDigital(currentTime));
|
||||||
|
|
||||||
@@ -23,8 +23,6 @@ export function DigitalClock({
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!enabled) return null;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<span data-testid="digital-clock">{dateToDigital(currentTime)}</span>
|
<span data-testid="digital-clock">{dateToDigital(currentTime)}</span>
|
||||||
@@ -34,6 +32,7 @@ export function DigitalClock({
|
|||||||
value={inputValue}
|
value={inputValue}
|
||||||
onChange={handleChange}
|
onChange={handleChange}
|
||||||
placeholder="HH:MM:SS"
|
placeholder="HH:MM:SS"
|
||||||
|
disabled={disabled}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import { dateToBerlin } from "../utils";
|
|||||||
export function TimeConverter() {
|
export function TimeConverter() {
|
||||||
const { currentTime, setCurrentTime } = useCurrentTime();
|
const { currentTime, setCurrentTime } = useCurrentTime();
|
||||||
const [useSystemTime, setUseSystemTime] = useState(false);
|
const [useSystemTime, setUseSystemTime] = useState(false);
|
||||||
const enabled = !useSystemTime;
|
|
||||||
const berlinClock = dateToBerlin(currentTime);
|
const berlinClock = dateToBerlin(currentTime);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -26,11 +25,11 @@ export function TimeConverter() {
|
|||||||
/>
|
/>
|
||||||
Use system time
|
Use system time
|
||||||
</label>
|
</label>
|
||||||
<BerlinClock enabled={enabled} clock={berlinClock} />
|
<BerlinClock enabled={true} clock={berlinClock} />
|
||||||
<DigitalClock
|
<DigitalClock
|
||||||
enabled={enabled}
|
|
||||||
currentTime={currentTime}
|
currentTime={currentTime}
|
||||||
onTimeChange={setCurrentTime}
|
onTimeChange={setCurrentTime}
|
||||||
|
disabled={useSystemTime}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user