Files
michaelschiemer/tests/Unit/Framework/LiveComponents/ValueObjects/ChunkMetadataTest.php
Michael Schiemer fc3d7e6357 feat(Production): Complete production deployment infrastructure
- Add comprehensive health check system with multiple endpoints
- Add Prometheus metrics endpoint
- Add production logging configurations (5 strategies)
- Add complete deployment documentation suite:
  * QUICKSTART.md - 30-minute deployment guide
  * DEPLOYMENT_CHECKLIST.md - Printable verification checklist
  * DEPLOYMENT_WORKFLOW.md - Complete deployment lifecycle
  * PRODUCTION_DEPLOYMENT.md - Comprehensive technical reference
  * production-logging.md - Logging configuration guide
  * ANSIBLE_DEPLOYMENT.md - Infrastructure as Code automation
  * README.md - Navigation hub
  * DEPLOYMENT_SUMMARY.md - Executive summary
- Add deployment scripts and automation
- Add DEPLOYMENT_PLAN.md - Concrete plan for immediate deployment
- Update README with production-ready features

All production infrastructure is now complete and ready for deployment.
2025-10-25 19:18:37 +02:00

119 lines
3.9 KiB
PHP

<?php
declare(strict_types=1);
use App\Framework\Core\ValueObjects\Byte;
use App\Framework\LiveComponents\ValueObjects\ChunkHash;
use App\Framework\LiveComponents\ValueObjects\ChunkMetadata;
describe('ChunkMetadata Value Object', function () {
it('creates chunk metadata', function () {
$hash = ChunkHash::fromData('test chunk');
$size = Byte::fromKilobytes(100);
$metadata = ChunkMetadata::create(
index: 0,
size: $size,
hash: $hash
);
expect($metadata->index)->toBe(0);
expect($metadata->size)->toBe($size);
expect($metadata->hash)->toBe($hash);
expect($metadata->uploaded)->toBeFalse();
});
it('rejects negative chunk index', function () {
$hash = ChunkHash::fromData('test');
$size = Byte::fromKilobytes(100);
expect(fn() => ChunkMetadata::create(-1, $size, $hash))
->toThrow(InvalidArgumentException::class);
});
it('rejects zero chunk size', function () {
$hash = ChunkHash::fromData('test');
$size = Byte::fromBytes(0);
expect(fn() => ChunkMetadata::create(0, $size, $hash))
->toThrow(InvalidArgumentException::class);
});
it('marks chunk as uploaded', function () {
$hash = ChunkHash::fromData('test');
$size = Byte::fromKilobytes(100);
$metadata = ChunkMetadata::create(0, $size, $hash);
expect($metadata->isUploaded())->toBeFalse();
$uploaded = $metadata->withUploaded();
expect($uploaded->isUploaded())->toBeTrue();
expect($uploaded->index)->toBe($metadata->index);
expect($uploaded->size)->toBe($metadata->size);
expect($uploaded->hash)->toBe($metadata->hash);
});
it('preserves immutability when marking uploaded', function () {
$hash = ChunkHash::fromData('test');
$size = Byte::fromKilobytes(100);
$original = ChunkMetadata::create(0, $size, $hash);
$uploaded = $original->withUploaded();
expect($original->isUploaded())->toBeFalse();
expect($uploaded->isUploaded())->toBeTrue();
});
it('converts to array correctly', function () {
$hash = ChunkHash::fromData('test chunk data');
$size = Byte::fromKilobytes(100);
$metadata = ChunkMetadata::create(5, $size, $hash);
$array = $metadata->toArray();
expect($array['index'])->toBe(5);
expect($array['size'])->toBe(102400); // 100KB in bytes
expect($array['size_human'])->toBeString();
expect($array['hash'])->toBe($hash->toString());
expect($array['uploaded'])->toBeFalse();
});
it('includes uploaded status in array', function () {
$hash = ChunkHash::fromData('test');
$size = Byte::fromKilobytes(100);
$metadata = ChunkMetadata::create(0, $size, $hash)->withUploaded();
$array = $metadata->toArray();
expect($array['uploaded'])->toBeTrue();
});
it('handles different chunk sizes', function () {
$hash = ChunkHash::fromData('test');
$small = ChunkMetadata::create(0, Byte::fromBytes(1), $hash);
$medium = ChunkMetadata::create(1, Byte::fromMegabytes(5), $hash);
$large = ChunkMetadata::create(2, Byte::fromMegabytes(100), $hash);
expect($small->size->toBytes())->toBe(1);
expect($medium->size->toBytes())->toBe(5242880); // 5MB
expect($large->size->toBytes())->toBe(104857600); // 100MB
});
it('maintains chunk index ordering', function () {
$hash = ChunkHash::fromData('test');
$size = Byte::fromKilobytes(100);
$chunks = [
ChunkMetadata::create(0, $size, $hash),
ChunkMetadata::create(5, $size, $hash),
ChunkMetadata::create(10, $size, $hash),
];
expect($chunks[0]->index)->toBe(0);
expect($chunks[1]->index)->toBe(5);
expect($chunks[2]->index)->toBe(10);
});
});