Files
michaelschiemer/tests/Unit/Framework/Deployment/Ssl/ValueObjects/DomainNameTest.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

120 lines
3.9 KiB
PHP

<?php
declare(strict_types=1);
use App\Framework\Deployment\Ssl\ValueObjects\DomainName;
describe('DomainName', function () {
it('creates domain name from valid string', function () {
$domain = DomainName::fromString('example.com');
expect($domain->value)->toBe('example.com');
});
it('accepts valid domain formats', function () {
$validDomains = [
'example.com',
'subdomain.example.com',
'sub.domain.example.com',
'example-site.com',
'example123.com',
'123example.com', // Starting with number in label is OK if not first character
'a.com',
'very-long-subdomain-name.example.com',
];
foreach ($validDomains as $domainStr) {
expect(fn() => DomainName::fromString($domainStr))
->not->toThrow(InvalidArgumentException::class);
}
});
it('rejects invalid domain formats', function () {
expect(fn() => DomainName::fromString(''))
->toThrow(InvalidArgumentException::class, 'Domain name cannot be empty');
});
it('rejects domain starting with hyphen', function () {
expect(fn() => DomainName::fromString('-example.com'))
->toThrow(InvalidArgumentException::class);
});
it('rejects domain with invalid characters', function () {
expect(fn() => DomainName::fromString('example$.com'))
->toThrow(InvalidArgumentException::class, 'Domain contains invalid characters');
});
it('rejects domain exceeding maximum length', function () {
$longDomain = str_repeat('a', 254) . '.com';
expect(fn() => DomainName::fromString($longDomain))
->toThrow(InvalidArgumentException::class, 'exceeds maximum length');
});
it('rejects label exceeding maximum length', function () {
$longLabel = str_repeat('a', 64);
expect(fn() => DomainName::fromString($longLabel . '.com'))
->toThrow(InvalidArgumentException::class, 'exceeds maximum length');
});
it('detects wildcard domains', function () {
$wildcard = DomainName::fromString('*.example.com');
expect($wildcard->isWildcard())->toBeTrue();
});
it('detects non-wildcard domains', function () {
$normal = DomainName::fromString('example.com');
expect($normal->isWildcard())->toBeFalse();
});
it('extracts TLD correctly', function () {
$domain = DomainName::fromString('subdomain.example.com');
expect($domain->getTld())->toBe('com');
});
it('extracts subdomain correctly', function () {
$domain = DomainName::fromString('sub.example.com');
expect($domain->getSubdomain())->toBe('sub');
});
it('returns null for domain without subdomain', function () {
$domain = DomainName::fromString('example.com');
expect($domain->getSubdomain())->toBeNull();
});
it('returns labels array', function () {
$domain = DomainName::fromString('sub.example.com');
expect($domain->getLabels())->toBe(['sub', 'example', 'com']);
});
it('converts to string', function () {
$domain = DomainName::fromString('example.com');
expect($domain->toString())->toBe('example.com');
expect((string) $domain)->toBe('example.com');
});
it('compares domains correctly', function () {
$domain1 = DomainName::fromString('example.com');
$domain2 = DomainName::fromString('example.com');
$domain3 = DomainName::fromString('other.com');
expect($domain1->equals($domain2))->toBeTrue();
expect($domain1->equals($domain3))->toBeFalse();
});
it('compares domains case-insensitively', function () {
$domain1 = DomainName::fromString('Example.COM');
$domain2 = DomainName::fromString('example.com');
expect($domain1->equals($domain2))->toBeTrue();
});
});