- Move 12 markdown files from root to docs/ subdirectories - Organize documentation by category: • docs/troubleshooting/ (1 file) - Technical troubleshooting guides • docs/deployment/ (4 files) - Deployment and security documentation • docs/guides/ (3 files) - Feature-specific guides • docs/planning/ (4 files) - Planning and improvement proposals Root directory cleanup: - Reduced from 16 to 4 markdown files in root - Only essential project files remain: • CLAUDE.md (AI instructions) • README.md (Main project readme) • CLEANUP_PLAN.md (Current cleanup plan) • SRC_STRUCTURE_IMPROVEMENTS.md (Structure improvements) This improves: ✅ Documentation discoverability ✅ Logical organization by purpose ✅ Clean root directory ✅ Better maintainability
129 lines
5.0 KiB
PHP
129 lines
5.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Framework\Health\ValueObjects;
|
|
|
|
use App\Framework\Health\ValueObjects\HealthMessage;
|
|
use App\Framework\Health\ValueObjects\HealthMessageType;
|
|
use InvalidArgumentException;
|
|
|
|
describe('HealthMessage Value Object', function () {
|
|
it('can be created with message and type', function () {
|
|
$message = new HealthMessage('Database connection successful', HealthMessageType::SUCCESS);
|
|
|
|
expect($message->message)->toBe('Database connection successful');
|
|
expect($message->type)->toBe(HealthMessageType::SUCCESS);
|
|
});
|
|
|
|
it('can be created with plain message', function () {
|
|
$message = HealthMessage::plain('Simple message');
|
|
|
|
expect($message->message)->toBe('Simple message');
|
|
expect($message->type)->toBe(HealthMessageType::PLAIN);
|
|
});
|
|
|
|
it('can create success messages', function () {
|
|
$message = HealthMessage::success('Database');
|
|
|
|
expect($message->message)->toBe('Database is working correctly');
|
|
expect($message->type)->toBe(HealthMessageType::SUCCESS);
|
|
expect($message->isSuccess())->toBeTrue();
|
|
});
|
|
|
|
it('can create warning messages', function () {
|
|
$message = HealthMessage::warning('Cache', 'High memory usage');
|
|
|
|
expect($message->message)->toBe('Cache has issues: High memory usage');
|
|
expect($message->type)->toBe(HealthMessageType::WARNING);
|
|
expect($message->isWarning())->toBeTrue();
|
|
});
|
|
|
|
it('can create failure messages', function () {
|
|
$message = HealthMessage::failure('API', 'Connection refused');
|
|
|
|
expect($message->message)->toBe('API failed: Connection refused');
|
|
expect($message->type)->toBe(HealthMessageType::FAILURE);
|
|
expect($message->isError())->toBeTrue();
|
|
});
|
|
|
|
it('can create timeout messages', function () {
|
|
$message = HealthMessage::timeout('Service', 5000.0);
|
|
|
|
expect($message->message)->toBe('Service timed out after 5000ms');
|
|
expect($message->type)->toBe(HealthMessageType::TIMEOUT);
|
|
expect($message->isError())->toBeTrue();
|
|
});
|
|
|
|
it('can create degraded messages', function () {
|
|
$message = HealthMessage::degraded('Queue', 'Processing slowly');
|
|
|
|
expect($message->message)->toBe('Queue is degraded: Processing slowly');
|
|
expect($message->type)->toBe(HealthMessageType::DEGRADED);
|
|
expect($message->isWarning())->toBeTrue();
|
|
});
|
|
|
|
it('formats messages with emoji correctly', function () {
|
|
$success = HealthMessage::success('Test');
|
|
$warning = HealthMessage::warning('Test', 'Issue');
|
|
$failure = HealthMessage::failure('Test', 'Error');
|
|
|
|
expect($success->toFormattedString())->toBe('✓ Test is working correctly');
|
|
expect($warning->toFormattedString())->toBe('⚠ Test has issues: Issue');
|
|
expect($failure->toFormattedString())->toBe('✗ Test failed: Error');
|
|
});
|
|
|
|
it('can add prefix and suffix', function () {
|
|
$message = HealthMessage::success('Database');
|
|
|
|
$withPrefix = $message->withPrefix('MySQL');
|
|
expect($withPrefix->message)->toBe('MySQL: Database is working correctly');
|
|
expect($withPrefix->type)->toBe(HealthMessageType::SUCCESS);
|
|
|
|
$withSuffix = $message->withSuffix('port 3306');
|
|
expect($withSuffix->message)->toBe('Database is working correctly - port 3306');
|
|
});
|
|
|
|
it('can change type', function () {
|
|
$message = HealthMessage::plain('Database status');
|
|
$warningMessage = $message->withType(HealthMessageType::WARNING);
|
|
|
|
expect($warningMessage->message)->toBe('Database status');
|
|
expect($warningMessage->type)->toBe(HealthMessageType::WARNING);
|
|
expect($warningMessage->isWarning())->toBeTrue();
|
|
});
|
|
|
|
it('converts to array correctly', function () {
|
|
$message = HealthMessage::success('Test service');
|
|
$array = $message->toArray();
|
|
|
|
expect($array)->toHaveKey('message');
|
|
expect($array)->toHaveKey('type');
|
|
expect($array)->toHaveKey('formatted');
|
|
expect($array)->toHaveKey('severity');
|
|
expect($array)->toHaveKey('emoji');
|
|
|
|
expect($array['message'])->toBe('Test service is working correctly');
|
|
expect($array['type'])->toBe('success');
|
|
expect($array['severity'])->toBe(0);
|
|
expect($array['emoji'])->toBe('✓');
|
|
});
|
|
|
|
it('throws exception for empty message', function () {
|
|
expect(fn () => new HealthMessage(''))->toThrow(InvalidArgumentException::class);
|
|
expect(fn () => new HealthMessage(' '))->toThrow(InvalidArgumentException::class);
|
|
});
|
|
|
|
it('throws exception for too long message', function () {
|
|
$longMessage = str_repeat('a', 501);
|
|
expect(fn () => new HealthMessage($longMessage))->toThrow(InvalidArgumentException::class);
|
|
});
|
|
|
|
it('converts to string correctly', function () {
|
|
$message = HealthMessage::success('Test');
|
|
|
|
expect($message->toString())->toBe('Test is working correctly');
|
|
expect((string) $message)->toBe('Test is working correctly');
|
|
});
|
|
});
|