From 2958ed1bfb955fd134925cec90b5fdd9552a85bb Mon Sep 17 00:00:00 2001 From: Marc Beinder Date: Sun, 28 Sep 2025 15:34:42 -0500 Subject: [PATCH] Add YesNo::case->toBoolean() --- src/Objects/Support/Enums/YesNo.php | 5 ++++ tests/Unit/YesNoTest.php | 40 +++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 tests/Unit/YesNoTest.php diff --git a/src/Objects/Support/Enums/YesNo.php b/src/Objects/Support/Enums/YesNo.php index 7c6596d..f800cb4 100644 --- a/src/Objects/Support/Enums/YesNo.php +++ b/src/Objects/Support/Enums/YesNo.php @@ -15,4 +15,9 @@ enum YesNo: string case Yes = "yes"; case No = "no"; + + public function toBoolean(): bool + { + return $this === self::Yes; + } } \ No newline at end of file diff --git a/tests/Unit/YesNoTest.php b/tests/Unit/YesNoTest.php new file mode 100644 index 0000000..9dc4c9c --- /dev/null +++ b/tests/Unit/YesNoTest.php @@ -0,0 +1,40 @@ +toBoolean())->toBeTrue(); + }); + + test("No case returns false", function () { + expect(YesNo::No->toBoolean())->toBeFalse(); + }); + }); + + describe("YesNo enum basic functionality", function () { + test("enum cases have correct string values", function () { + expect(YesNo::Yes->value)->toBe("yes") + ->and(YesNo::No->value)->toBe("no"); + }); + + test("enum can be compared for equality", function () { + expect(YesNo::Yes === YesNo::Yes)->toBeTrue() + ->and(YesNo::No === YesNo::No)->toBeTrue() + ->and(YesNo::Yes === YesNo::No)->toBeFalse() + ->and(YesNo::No === YesNo::Yes)->toBeFalse(); + }); + }); + + describe("YesNo enum from string to boolean", function () { + test("from string creates correct enum cases", function () { + expect(YesNo::from("yes")->toBoolean())->toBeTrue() + ->and(YesNo::from("no")->toBoolean())->toBeFalse(); + }); + + test("from string throws ValueError for invalid values", function () { + expect(fn() => YesNo::from("invalid"))->toThrow(ValueError::class); + }); + }); +}); \ No newline at end of file