31 - Add domain enums

This commit is contained in:
myrmidex 2026-06-18 21:25:39 +02:00
parent 1b1d9db626
commit 59807d8e33
7 changed files with 136 additions and 0 deletions

View file

@ -0,0 +1,10 @@
<?php
namespace App\Enum;
enum BucketAllocationType: string
{
case FIXED_LIMIT = 'fixed_limit';
case PERCENTAGE = 'percentage';
case UNLIMITED = 'unlimited';
}

26
src/Enum/BucketType.php Normal file
View file

@ -0,0 +1,26 @@
<?php
namespace App\Enum;
enum BucketType: string
{
case NEED = 'need';
case WANT = 'want';
case OVERFLOW = 'overflow';
/**
* @return list<BucketAllocationType>
*/
public function getAllowedAllocationTypes(): array
{
return match ($this) {
self::NEED, self::WANT => [
BucketAllocationType::FIXED_LIMIT,
BucketAllocationType::PERCENTAGE,
],
self::OVERFLOW => [
BucketAllocationType::UNLIMITED,
],
};
}
}

View file

@ -0,0 +1,9 @@
<?php
namespace App\Enum;
enum DistributionMode: string
{
case EVEN = 'even';
case PRIORITY = 'priority';
}

View file

@ -0,0 +1,14 @@
<?php
namespace App\Enum;
enum StreamFrequency: string
{
case ONCE = 'once';
case DAILY = 'daily';
case WEEKLY = 'weekly';
case BIWEEKLY = 'biweekly';
case MONTHLY = 'monthly';
case QUARTERLY = 'quarterly';
case YEARLY = 'yearly';
}

9
src/Enum/StreamType.php Normal file
View file

@ -0,0 +1,9 @@
<?php
namespace App\Enum;
enum StreamType: string
{
case INCOME = 'income';
case EXPENSE = 'expense';
}

View file

@ -0,0 +1,32 @@
<?php
namespace App\Tests\Enum;
use App\Enum\BucketAllocationType;
use App\Enum\BucketType;
use PHPUnit\Framework\TestCase;
final class BucketTypeTest extends TestCase
{
public function testBucketTypeCasesAndAllowedAllocationTypes(): void
{
$this->assertSame('need', BucketType::NEED->value);
$this->assertSame('want', BucketType::WANT->value);
$this->assertSame('overflow', BucketType::OVERFLOW->value);
$this->assertSame(
[BucketAllocationType::FIXED_LIMIT, BucketAllocationType::PERCENTAGE],
BucketType::NEED->getAllowedAllocationTypes(),
);
$this->assertSame(
[BucketAllocationType::FIXED_LIMIT, BucketAllocationType::PERCENTAGE],
BucketType::WANT->getAllowedAllocationTypes(),
);
$this->assertSame(
[BucketAllocationType::UNLIMITED],
BucketType::OVERFLOW->getAllowedAllocationTypes(),
);
}
}

View file

@ -0,0 +1,36 @@
<?php
namespace App\Tests\Enum;
use App\Enum\BucketAllocationType;
use App\Enum\DistributionMode;
use App\Enum\StreamFrequency;
use App\Enum\StreamType;
use PHPUnit\Framework\TestCase;
final class RemainingEnumsTest extends TestCase
{
public function testRemainingEnumsExposeExpectedCases(): void
{
$this->assertSame('once', StreamFrequency::ONCE->value);
$this->assertSame('daily', StreamFrequency::DAILY->value);
$this->assertSame('weekly', StreamFrequency::WEEKLY->value);
$this->assertSame('biweekly', StreamFrequency::BIWEEKLY->value);
$this->assertSame('monthly', StreamFrequency::MONTHLY->value);
$this->assertSame('quarterly', StreamFrequency::QUARTERLY->value);
$this->assertSame('yearly', StreamFrequency::YEARLY->value);
$this->assertSame('income', StreamType::INCOME->value);
$this->assertSame('expense', StreamType::EXPENSE->value);
$this->assertSame('even', DistributionMode::EVEN->value);
$this->assertSame('priority', DistributionMode::PRIORITY->value);
}
public function testBucketAllocationTypeBackingValues(): void
{
$this->assertSame('fixed_limit', BucketAllocationType::FIXED_LIMIT->value);
$this->assertSame('percentage', BucketAllocationType::PERCENTAGE->value);
$this->assertSame('unlimited', BucketAllocationType::UNLIMITED->value);
}
}