66 lines
1.7 KiB
PHP
66 lines
1.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Unit\Shared\Enums;
|
|
|
|
use Shared\Enums\Currency;
|
|
|
|
covers(Currency::class);
|
|
|
|
describe('currency', function (): void {
|
|
it('has the expected cases with their backing values', function (): void {
|
|
// THEN
|
|
expect(Currency::EUR->value())->toBe(1);
|
|
});
|
|
|
|
it('exposes its case name', function (): void {
|
|
// THEN
|
|
expect(Currency::EUR->name())->toBe('EUR');
|
|
});
|
|
|
|
it('returns the defined label', function (): void {
|
|
// THEN
|
|
expect(Currency::EUR->label())->toBe('Euro');
|
|
});
|
|
|
|
it('lists all labels keyed by case name', function (): void {
|
|
// THEN
|
|
expect(Currency::toLabels())->toBe([
|
|
'EUR' => 'Euro',
|
|
]);
|
|
});
|
|
|
|
it('lists all values keyed by case name', function (): void {
|
|
// THEN
|
|
expect(Currency::toValues())->toBe([
|
|
'EUR' => 1,
|
|
]);
|
|
});
|
|
|
|
it('makes an instance from its backing value', function (): void {
|
|
// THEN
|
|
expect(Currency::make(1))->toBe(Currency::EUR);
|
|
});
|
|
|
|
it('makes an instance from a label', function (): void {
|
|
// THEN
|
|
expect(Currency::make('Euro', 'label'))->toBe(Currency::EUR);
|
|
});
|
|
|
|
it('returns the same instance when already an enum case', function (): void {
|
|
// THEN
|
|
expect(Currency::make(Currency::EUR))->toBe(Currency::EUR);
|
|
});
|
|
|
|
it('returns null for an unknown value', function (): void {
|
|
// THEN
|
|
expect(Currency::make(99))->toBeNull();
|
|
});
|
|
|
|
it('implements equals correctly', function (): void {
|
|
// THEN
|
|
expect(Currency::EUR->equals(Currency::EUR))->toBeTrue()
|
|
->and(Currency::EUR->equals(null))->toBeFalse();
|
|
});
|
|
});
|