Version 1.0.0

This commit is contained in:
2025-07-13 00:10:45 +03:00
commit 42da8af363
35 changed files with 3468 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
<?php
declare(strict_types=1);
namespace Diffhead\PHP\Url\Tests\Builder;
use Diffhead\PHP\Url\Builder\HostRelative;
use Diffhead\PHP\Url\Port;
use Diffhead\PHP\Url\Scheme;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\CoversMethod;
use PHPUnit\Framework\TestCase;
#[CoversClass(HostRelative::class)]
#[CoversMethod(HostRelative::class, 'build')]
class HostRelativeTest extends TestCase
{
public function testUrlBuilding(): void
{
$hostname = 'www.google.com';
$scheme = Scheme::Https;
$port = Port::WebSecure;
$path = '/api/users';
$query = ['active' => true, 'page' => 2, 'perPage' => 100];
$builder = new HostRelative($hostname, $scheme->value, $port->value);
$url = $builder->build($path, $query);
$this->assertSame($hostname, $url->hostname());
$this->assertSame($scheme->value, $url->scheme());
$this->assertSame($port->value, $url->port());
$this->assertSame($path, $url->path());
$this->assertEquals($query, $url->parameters());
}
}

View File

@@ -0,0 +1,83 @@
<?php
declare(strict_types=1);
namespace Diffhead\PHP\Url\Tests\Builder;
use Diffhead\PHP\Url\Builder\ReplaceAttributes;
use Diffhead\PHP\Url\Url;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\CoversMethod;
use PHPUnit\Framework\TestCase;
use TypeError;
#[CoversClass(ReplaceAttributes::class)]
#[CoversMethod(ReplaceAttributes::class, 'build')]
class ReplaceAttributesTest extends TestCase
{
public function testReplacementOnEmptyData(): void
{
$origin = Url::create('http', 'example.com', '/path', 80, ['a' => '1']);
$builder = new ReplaceAttributes($origin);
$replaced = $builder->build();
$this->assertSame('http', $replaced->scheme());
$this->assertSame('example.com', $replaced->hostname());
$this->assertSame('/path', $replaced->path());
$this->assertSame(80, $replaced->port());
$this->assertSame(['a' => '1'], $replaced->parameters());
}
public function testPartiallyReplacement(): void
{
$origin = Url::create('http', 'example.com', '/path', 80, ['a' => '1']);
$builder = new ReplaceAttributes($origin);
$replaced = $builder->build('new-example.com', [
'scheme' => 'https',
'port' => 443,
]);
$this->assertSame('https', $replaced->scheme());
$this->assertSame('new-example.com', $replaced->hostname());
$this->assertSame('/path', $replaced->path());
$this->assertSame(443, $replaced->port());
$this->assertSame(['a' => '1'], $replaced->parameters());
}
public function testFullReplacement(): void
{
$origin = Url::create('http', 'example.com', '/path', 80, ['a' => '1']);
$builder = new ReplaceAttributes($origin);
$replaced = $builder->build('new-example.com', [
'scheme' => 'https',
'path' => '/new-path',
'port' => 443,
'parameters' => ['b' => '2'],
]);
$this->assertSame('https', $replaced->scheme());
$this->assertSame('new-example.com', $replaced->hostname());
$this->assertSame('/new-path', $replaced->path());
$this->assertSame(443, $replaced->port());
$this->assertSame(['b' => '2'], $replaced->parameters());
}
public function testInvalidParametersTypes(): void
{
$this->expectException(TypeError::class);
$origin = Url::create('http', 'example.com', '/path', 80, ['a' => '1']);
$builder = new ReplaceAttributes($origin);
$builder->build('new-example.com', [
'scheme' => 123,
]);
}
}