From db22647ee73528f98cdf368e74d6b3b6a7cc85c8 Mon Sep 17 00:00:00 2001 From: Aidan Casey Date: Thu, 12 Dec 2024 19:35:03 -0500 Subject: [PATCH 1/2] chore: add tests --- .../QueryParameters/ReadsQueryParameters.php | 10 +- .../ImmutableParameterCollection.php | 14 --- .../Parameters/MutableParameterCollection.php | 17 ---- src/Http/Parameters/ReadsParameters.php | 42 -------- src/Http/Parameters/WritesParameters.php | 79 --------------- .../MutableQueryParameterCollectionTest.php | 93 ++++++++++++++++++ .../Segments/MutableSegmentTest.php | 2 +- .../MutableParameterCollectionTest.php | 98 ------------------- tests/Http/Request/RestRequestBuilderTest.php | 2 +- 9 files changed, 102 insertions(+), 255 deletions(-) delete mode 100644 src/Http/Parameters/ImmutableParameterCollection.php delete mode 100644 src/Http/Parameters/MutableParameterCollection.php delete mode 100644 src/Http/Parameters/ReadsParameters.php delete mode 100644 src/Http/Parameters/WritesParameters.php create mode 100644 tests/Http/Components/QueryParameters/MutableQueryParameterCollectionTest.php rename tests/Http/{ => Components}/Segments/MutableSegmentTest.php (95%) delete mode 100644 tests/Http/Parameters/MutableParameterCollectionTest.php diff --git a/src/Http/Components/QueryParameters/ReadsQueryParameters.php b/src/Http/Components/QueryParameters/ReadsQueryParameters.php index 115e6b6..dd25c14 100644 --- a/src/Http/Components/QueryParameters/ReadsQueryParameters.php +++ b/src/Http/Components/QueryParameters/ReadsQueryParameters.php @@ -27,9 +27,13 @@ public function __construct(array $queryParameters = []) */ public function get(string $name): null|array|bool|float|int|string { - return count($this->queryParameters) > 1 - ? $this->queryParameters[$name] - : $this->first($name); + $value = $this->queryParameters[$name] ?? null; + + if ($value === null) { + return null; + } + + return count($value) > 1 ? $value : $value[0]; } public function first(string $name): null|bool|float|int|string diff --git a/src/Http/Parameters/ImmutableParameterCollection.php b/src/Http/Parameters/ImmutableParameterCollection.php deleted file mode 100644 index 7432738..0000000 --- a/src/Http/Parameters/ImmutableParameterCollection.php +++ /dev/null @@ -1,14 +0,0 @@ - */ - use ReadsParameters; -} diff --git a/src/Http/Parameters/MutableParameterCollection.php b/src/Http/Parameters/MutableParameterCollection.php deleted file mode 100644 index 5abdf19..0000000 --- a/src/Http/Parameters/MutableParameterCollection.php +++ /dev/null @@ -1,17 +0,0 @@ - */ - use ReadsParameters; - - /** @use WritesParameters */ - use WritesParameters; -} diff --git a/src/Http/Parameters/ReadsParameters.php b/src/Http/Parameters/ReadsParameters.php deleted file mode 100644 index 09ab394..0000000 --- a/src/Http/Parameters/ReadsParameters.php +++ /dev/null @@ -1,42 +0,0 @@ - $parameters - */ - final public function __construct(private array $parameters = []) - { - } - - /** - * @return array|null - */ - public function get(string $key): ?array - { - return $this->parameters[$key] ?? null; - } - - /** - * @return TValue|null - */ - public function first(string $key) - { - return $this->parameters[$key][0] ?? null; - } - - /** - * @return array - */ - public function all(): array - { - return $this->parameters; - } -} diff --git a/src/Http/Parameters/WritesParameters.php b/src/Http/Parameters/WritesParameters.php deleted file mode 100644 index 9c70ce7..0000000 --- a/src/Http/Parameters/WritesParameters.php +++ /dev/null @@ -1,79 +0,0 @@ - - */ - public function add(string $key, $value): self - { - if (! isset($this->parameters[$key])) { - $this->parameters[$key] = []; - } - - $this->parameters[$key][] = $value; - - return $this; - } - - /** - * @param TValue $value - * @return self - */ - public function set(string $key, $value): self - { - $this->parameters[$key] = [$value]; - - return $this; - } - - /** - * @return self - */ - public function unset(string $key): self - { - unset($this->parameters[$key]); - - return $this; - } - - /** - * @param array $parameters - * @return self - */ - public function merge(array $parameters): self - { - foreach ($parameters as $key => $value) { - if (! is_array($value)) { - $value = [$value]; - } - - foreach ($value as $item) { - $this->add($key, $item); - } - } - - return $this; - } - - /** - * @param array $parameters - * @return self - */ - public function replace(array $parameters): self - { - $this->parameters = []; - - $this->merge($parameters); - - return $this; - } -} diff --git a/tests/Http/Components/QueryParameters/MutableQueryParameterCollectionTest.php b/tests/Http/Components/QueryParameters/MutableQueryParameterCollectionTest.php new file mode 100644 index 0000000..91a67b9 --- /dev/null +++ b/tests/Http/Components/QueryParameters/MutableQueryParameterCollectionTest.php @@ -0,0 +1,93 @@ + ['query'], + 'first_name' => ['Jim', 'Dwight'], + ]; + + $queryParameters = new MutableQueryParameterCollection($parameters); + + $this->assertSame('query', $queryParameters->get('search')); + $this->assertEqualsCanonicalizing(['Jim', 'Dwight'], $queryParameters->get('first_name')); + $this->assertNull($queryParameters->get('not_found')); + $this->assertEqualsCanonicalizing($parameters, $queryParameters->all()); + } + + public function test_getting_first_query_parameter() + { + $queryParameters = new MutableQueryParameterCollection([ + 'first_name' => ['Jim', 'Dwight'], + ]); + + $this->assertSame('Jim', $queryParameters->first('first_name')); + } + + public function test_adding_query_parameter() + { + $queryParameters = new MutableQueryParameterCollection(); + + $queryParameters + ->add('first_name', 'Jim') + ->add('first_name', 'Dwight'); + + $this->assertEqualsCanonicalizing(['Jim', 'Dwight'], $queryParameters->get('first_name')); + } + + public function test_setting_query_parameter() + { + $queryParameters = new MutableQueryParameterCollection(); + + $queryParameters + ->add('first_name', 'Bob') + ->set('first_name', 'Jim'); + + $this->assertSame('Jim', $queryParameters->get('first_name')); + } + + public function test_merging_collection_parameters() + { + $queryParameters = new MutableQueryParameterCollection([ + 'first_name' => ['Jim', 'Dwight'], + ]); + + $queryParameters->merge(['first_name' => 'Larry']); + + $this->assertEqualsCanonicalizing( + ['Jim', 'Dwight', 'Larry'], $queryParameters->get('first_name') + ); + } + + public function test_replacing_collection_parameters() + { + $queryParameters = new MutableQueryParameterCollection([ + 'first_name' => ['Jim', 'Dwight'], + ]); + + $queryParameters->replace(['first_name' => 'Larry']); + + $this->assertEqualsCanonicalizing( + 'Larry', $queryParameters->get('first_name') + ); + } + + public function test_converting_to_immutable_collection() + { + $queryParameters = new MutableQueryParameterCollection([ + 'first_name' => ['Jim'] + ]); + + $queryParameters = $queryParameters->toImmutable(); + + $this->assertInstanceOf(ImmutableQueryParameterCollection::class, $queryParameters); + } +} \ No newline at end of file diff --git a/tests/Http/Segments/MutableSegmentTest.php b/tests/Http/Components/Segments/MutableSegmentTest.php similarity index 95% rename from tests/Http/Segments/MutableSegmentTest.php rename to tests/Http/Components/Segments/MutableSegmentTest.php index bdd7a58..997191e 100644 --- a/tests/Http/Segments/MutableSegmentTest.php +++ b/tests/Http/Components/Segments/MutableSegmentTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Http\Segments; +namespace Rest\Tests\Http\Components\Segments; use PHPUnit\Framework\TestCase; use Rest\Http\Components\Segments\MutableSegmentCollection; diff --git a/tests/Http/Parameters/MutableParameterCollectionTest.php b/tests/Http/Parameters/MutableParameterCollectionTest.php deleted file mode 100644 index 912e8d8..0000000 --- a/tests/Http/Parameters/MutableParameterCollectionTest.php +++ /dev/null @@ -1,98 +0,0 @@ -add('test-key', 'test-value1') - ->add('test-key', 'test-value2'); - - $this->assertSame(['test-value1', 'test-value2'], $collection->get('test-key')); - } - - public function test_setting_a_parameter() - { - $collection = new MutableParameterCollection(); - $collection - ->add('test-key', 'test-value') - ->set('test-key', 'test-value1'); - - $this->assertSame(['test-value1'], $collection->get('test-key')); - } - - public function test_unsetting_a_parameter() - { - $collection = new MutableParameterCollection(); - $collection - ->add('test-key', 'test-value') - ->unset('test-key'); - - $this->assertNull($collection->get('test-key')); - } - - public function test_merging_parameters() - { - $collection = new MutableParameterCollection(); - $collection - ->add('test-key-2', 'test-key-2-value-1') - ->merge([ - 'test-key-1' => ['test-key-1-value-1', 'test-key-1-value-2'], - 'test-key-2' => 'test-key-2-value-2', - 'test-key-3' => 'test-key-3-value-3', - ]); - - $this->assertSame(['test-key-1-value-1', 'test-key-1-value-2'], $collection->get('test-key-1')); - $this->assertSame(['test-key-2-value-1', 'test-key-2-value-2'], $collection->get('test-key-2')); - $this->assertSame(['test-key-3-value-3'], $collection->get('test-key-3')); - } - - public function test_replacing_parameters() - { - $collection = new MutableParameterCollection(); - $collection - ->add('test-key', 'test-value') - ->replace([ - 'test-key-1' => 'test-value-1', - ]); - - $this->assertNull($collection->get('test-key')); - $this->assertSame(['test-value-1'], $collection->get('test-key-1')); - } - - public function test_getting_first_value_of_parameter() - { - $collection = new MutableParameterCollection(); - $collection->merge(['test-key' => ['test-value-1', 'test-value-2']]); - - $this->assertSame('test-value-1', $collection->first('test-key')); - } - - public function test_getting_all_parameters() - { - $collection = new MutableParameterCollection(); - $collection->merge([ - 'test-key-1' => ['test-value-1', 'test-value-2'], - 'test-key-2' => 'test-value-1', - ]); - - $this->assertEqualsCanonicalizing( - [ - 'test-key-1' => ['test-value-1', 'test-value-2'], - 'test-key-2' => ['test-value-1'], - ], - $collection->all() - ); - } -} diff --git a/tests/Http/Request/RestRequestBuilderTest.php b/tests/Http/Request/RestRequestBuilderTest.php index 710a92c..97390e1 100644 --- a/tests/Http/Request/RestRequestBuilderTest.php +++ b/tests/Http/Request/RestRequestBuilderTest.php @@ -119,7 +119,7 @@ public function test_making_a_request_with_query_parameters() ]) ->make(); - $this->assertSame(['my-query'], $request->queryParameters->get('search')); + $this->assertSame('my-query', $request->queryParameters->get('search')); $this->assertSame(['John', 'Jack'], $request->queryParameters->get('first_name')); } From 1b0a164f7337e6fbc01e1c996f22435c97820ffa Mon Sep 17 00:00:00 2001 From: Aidan Casey Date: Thu, 12 Dec 2024 19:35:39 -0500 Subject: [PATCH 2/2] chore: add tests --- .../MutableQueryParameterCollectionTest.php | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/tests/Http/Components/QueryParameters/MutableQueryParameterCollectionTest.php b/tests/Http/Components/QueryParameters/MutableQueryParameterCollectionTest.php index 91a67b9..b8ddf23 100644 --- a/tests/Http/Components/QueryParameters/MutableQueryParameterCollectionTest.php +++ b/tests/Http/Components/QueryParameters/MutableQueryParameterCollectionTest.php @@ -1,11 +1,16 @@ merge(['first_name' => 'Larry']); $this->assertEqualsCanonicalizing( - ['Jim', 'Dwight', 'Larry'], $queryParameters->get('first_name') + ['Jim', 'Dwight', 'Larry'], + $queryParameters->get('first_name') ); } @@ -76,18 +82,19 @@ public function test_replacing_collection_parameters() $queryParameters->replace(['first_name' => 'Larry']); $this->assertEqualsCanonicalizing( - 'Larry', $queryParameters->get('first_name') + 'Larry', + $queryParameters->get('first_name') ); } public function test_converting_to_immutable_collection() { $queryParameters = new MutableQueryParameterCollection([ - 'first_name' => ['Jim'] + 'first_name' => ['Jim'], ]); $queryParameters = $queryParameters->toImmutable(); $this->assertInstanceOf(ImmutableQueryParameterCollection::class, $queryParameters); } -} \ No newline at end of file +}