Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
44 / 44
n/a
0 / 0
CRAP
n/a
0 / 0
1<?php
2
3// ╔════════════════════════════════════════════════════════════╗
4// ║ MIT Licence (#Expat) - https://opensource.org/licenses/MIT ║
5// ║ Copyright 2026 Frederic Poeydomenge <dyno@phexium.com>     ║
6// ╚════════════════════════════════════════════════════════════╝
7
8declare(strict_types=1);
9
10use Tests\Phexium\Fake\Domain\Enum as FakeEnum;
11
12test('equals() returns true when comparing same enum case', function (): void {
13    $enum1 = FakeEnum::One;
14    $enum2 = FakeEnum::One;
15
16    expect($enum1->equals($enum2))->toBeTrue();
17});
18
19test('equals() returns false when comparing different enum cases', function (): void {
20    $enum1 = FakeEnum::One;
21    $enum2 = FakeEnum::Two;
22
23    expect($enum1->equals($enum2))->toBeFalse();
24});
25
26test('isOneOf() returns true when value is in the list', function (): void {
27    $enum = FakeEnum::Two;
28
29    expect($enum->isOneOf(FakeEnum::Two, FakeEnum::Three))->toBeTrue();
30    expect($enum->isOneOf(FakeEnum::Two))->toBeTrue();
31});
32
33test('isOneOf() returns false when value is not in the list', function (): void {
34    $enum = FakeEnum::Two;
35
36    expect($enum->isOneOf(FakeEnum::Three))->toBeFalse();
37});
38
39test('values() returns array of all string values', function (): void {
40    $values = FakeEnum::values();
41
42    expect($values)->toBe(['one', 'two', 'three']);
43});
44
45test('names() returns array of all case names', function (): void {
46    $names = FakeEnum::names();
47
48    expect($names)->toBe(['One', 'Two', 'Three']);
49});
50
51test('options() returns associative array for form options', function (): void {
52    $options = FakeEnum::options();
53
54    expect($options)->toBe([
55        'One' => '1',
56        'Two' => '2',
57        'Three' => '3',
58    ]);
59});
60
61test('tryFromName() returns enum case for valid name (case-insensitive)', function (): void {
62    expect(FakeEnum::tryFromName('Three'))->toBe(FakeEnum::Three);
63    expect(FakeEnum::tryFromName('three'))->toBe(FakeEnum::Three);
64    expect(FakeEnum::tryFromName('THREE'))->toBe(FakeEnum::Three);
65});
66
67test('tryFromName() returns null for invalid name', function (): void {
68    expect(FakeEnum::tryFromName('InvalidValue'))->toBeNull();
69    expect(FakeEnum::tryFromName(''))->toBeNull();
70});