Skip to content

Commit 9f926c1

Browse files
committed
Update dependencies and add more unit tests
1 parent 60ee92b commit 9f926c1

File tree

8 files changed

+92
-26
lines changed

8 files changed

+92
-26
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/vendor/
22
/composer.lock
3-
/.php_cs.cache
3+
/.php-cs-fixer.cache
44
/.phpunit.result.cache
55
/build

.php_cs renamed to .php-cs-fixer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
$finder = PhpCsFixer\Finder::create()
2323
->in(['src', 'tests']);
2424

25-
return PhpCsFixer\Config::create()
25+
return (new PhpCsFixer\Config())
2626
->setRules(
2727
[
2828
'@PSR1' => true,

.php_cs.cache

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"php":"7.4.26","version":"2.18.2:v2.18.2#18f8c9d184ba777380794a389fabc179896ba913","indent":" ","lineEnding":"\n","rules":{"encoding":true,"full_opening_tag":true,"blank_line_after_namespace":true,"braces":{"allow_single_line_anonymous_class_with_empty_body":true,"allow_single_line_closure":true},"class_definition":{"single_line":true},"constant_case":true,"elseif":true,"function_declaration":true,"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"method_argument_space":true,"no_break_comment":true,"no_closing_tag":true,"no_spaces_after_function_name":true,"no_spaces_inside_parenthesis":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_class_element_per_statement":true,"single_import_per_statement":true,"single_line_after_imports":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"visibility_required":true,"array_syntax":{"syntax":"short"},"backtick_to_shell_exec":true,"binary_operator_spaces":true,"blank_line_before_statement":{"statements":["return"]},"cast_spaces":true,"class_attributes_separation":{"elements":{"method":"one"}},"clean_namespace":true,"concat_space":true,"echo_tag_syntax":true,"fully_qualified_strict_types":true,"function_typehint_space":true,"general_phpdoc_tag_rename":{"replacements":{"inheritDocs":"inheritDoc"}},"include":true,"increment_style":true,"lambda_not_used_import":true,"linebreak_after_opening_tag":true,"magic_constant_casing":true,"magic_method_casing":true,"native_function_casing":true,"native_function_type_declaration_casing":true,"no_alias_language_construct_call":true,"no_alternative_syntax":true,"no_binary_string":true,"no_blank_lines_after_phpdoc":true,"no_empty_comment":true,"no_empty_phpdoc":true,"no_empty_statement":true,"no_extra_blank_lines":{"tokens":["case","continue","curly_brace_block","default","extra","parenthesis_brace_block","square_brace_block","switch","throw","use","use_trait"]},"no_leading_namespace_whitespace":true,"no_mixed_echo_print":true,"no_multiline_whitespace_around_double_arrow":true,"no_short_bool_cast":true,"no_singleline_whitespace_before_semicolons":true,"no_spaces_around_offset":true,"no_superfluous_phpdoc_tags":{"allow_mixed":true,"allow_unused_params":true},"no_trailing_comma_in_list_call":true,"no_trailing_comma_in_singleline_array":true,"no_unneeded_control_parentheses":{"statements":["break","clone","continue","echo_print","return","switch_case","yield","yield_from"]},"no_unneeded_curly_braces":{"namespaces":true},"no_unset_cast":true,"no_unused_imports":true,"no_whitespace_before_comma_in_array":true,"normalize_index_brace":true,"object_operator_without_whitespace":true,"ordered_imports":true,"php_unit_fqcn_annotation":true,"php_unit_method_casing":true,"phpdoc_align":{"tags":["method","param","property","return","throws","type","var"]},"phpdoc_annotation_without_dot":true,"phpdoc_indent":true,"phpdoc_inline_tag_normalizer":true,"phpdoc_no_access":true,"phpdoc_no_alias_tag":true,"phpdoc_no_package":true,"phpdoc_no_useless_inheritdoc":true,"phpdoc_return_self_reference":true,"phpdoc_scalar":true,"phpdoc_separation":true,"phpdoc_single_line_var_spacing":true,"phpdoc_tag_type":{"tags":{"inheritDoc":"inline"}},"phpdoc_to_comment":true,"phpdoc_trim":true,"phpdoc_trim_consecutive_blank_line_separation":true,"phpdoc_types":true,"phpdoc_types_order":{"null_adjustment":"always_last","sort_algorithm":"none"},"phpdoc_var_without_name":true,"protected_to_private":true,"semicolon_after_instruction":true,"single_line_comment_style":{"comment_types":["hash"]},"single_line_throw":true,"single_quote":true,"single_space_after_construct":true,"space_after_semicolon":{"remove_in_empty_for_expressions":true},"standardize_increment":true,"standardize_not_equals":true,"switch_continue_to_break":true,"trailing_comma_in_multiline_array":true,"trim_array_spaces":true,"unary_operator_spaces":true,"whitespace_after_comma_in_array":true,"yoda_style":true,"blank_line_after_opening_tag":true,"compact_nullable_typehint":true,"declare_equal_normalize":true,"lowercase_cast":true,"lowercase_static_reference":true,"new_with_braces":true,"no_blank_lines_after_class_opening":true,"no_leading_import_slash":true,"no_whitespace_in_blank_line":true,"ordered_class_elements":{"order":["use_trait"]},"return_type_declaration":true,"short_scalar_cast":true,"single_blank_line_before_namespace":true,"single_trait_insert_per_statement":true,"ternary_operator_spaces":true,"declare_strict_types":true,"strict_param":true,"header_comment":{"comment_type":"comment","header":"This file is part of SolidWorx\/Apify project.\n\nCopyright (c) Pierre du Plessis <[email protected]>\n\nThis source file is subject to the MIT license that is bundled\nwith this source code in the file LICENSE.","location":"after_declare_strict","separate":"both"}},"hashes":{"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder\/test.php":3639610495,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder1\/test.php":266735226,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder2\/src\/HttpClient.php":3635597778,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder3\/src\/Traits\/HttpMethodsTrait.php":1325421588,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder5\/src\/Traits\/HttpMethodsTrait.php":1325421588,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder10\/src\/Traits\/HttpMethodsTrait.php":1325421588,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder6\/src\/Traits\/HttpOptionsTrait.php":1065834460,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder7\/src\/HttpClient.php":3635597778,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder9\/src\/Progress.php":803496978,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder4406\/src\/Progress.php":803496978,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder11\/src\/RequestBuilder.php":867601962,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder1561\/src\/RequestOptions.php":3465038150,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder4\/src\/Response.php":1215803365,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder1156\/src\/Response.php":1215803365,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder8\/src\/Response.php":1215803365,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder3156\/src\/Response.php":1215803365,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder3046\/src\/Response.php":1215803365,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder2599\/src\/Response.php":1215803365,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder487\/src\/Response.php":1215803365,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder\/src\/Response.php":1215803365,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder2\/test.php":266735226,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder8\/test.php":266735226,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder10\/test.php":266735226,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder3638\/test.php":4085894680,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder9\/test.php":4085894680,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder5\/test.php":4085894680,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder3\/test.php":4085894680,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder4\/src\/HttpClient.php":3635597778,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder7\/src\/RequestBuilder.php":867601962,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder11\/src\/Traits\/HttpOptionsTrait.php":1065834460,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder3843\/src\/RequestOptions.php":3465038150,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder6\/test.php":4085894680,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder5326\/src\/RequestBuilder.php":867601962,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder6006\/src\/Response.php":1215803365,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder3626\/src\/Response.php":1215803365,"\/private\/var\/folders\/3x\/tfd7svy13lsfcsnvb8mpz8z00000gn\/T\/PHP CS Fixertemp_folder5882\/src\/Response.php":1215803365}}

composer.json

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,25 +15,30 @@
1515
}
1616
],
1717
"require": {
18-
"php": ">= 7.2",
19-
"symfony/http-client": "^4.4 || ^5.0",
20-
"symfony/mime": "^4.4 || ^5.0"
18+
"php": ">=7.4",
19+
"symfony/http-client": "^4.4 || ^5.0 || ^6.0",
20+
"symfony/mime": "^4.4 || ^5.0 || ^6.0"
2121
},
2222
"require-dev": {
23-
"friendsofphp/php-cs-fixer": "^2.18",
24-
"infection/infection": "~0.20.2",
25-
"phpstan/extension-installer": "^1.1.0",
26-
"phpstan/phpstan": "~0.12.69",
27-
"phpstan/phpstan-deprecation-rules": "~0.12.6",
28-
"phpstan/phpstan-phpunit": "~0.12.17",
29-
"phpstan/phpstan-strict-rules": "~0.12.9",
30-
"phpunit/phpunit": "^8.5",
31-
"psalm/plugin-phpunit": "~0.15.1",
32-
"vimeo/psalm": "^4.4.1"
23+
"friendsofphp/php-cs-fixer": "^3.4",
24+
"infection/infection": "^0.25",
25+
"phpstan/extension-installer": "^1.1",
26+
"phpstan/phpstan": "^1.3",
27+
"phpstan/phpstan-deprecation-rules": "^1.0",
28+
"phpstan/phpstan-phpunit": "^1.0",
29+
"phpstan/phpstan-strict-rules": "^1.0",
30+
"phpunit/phpunit": "^9.5",
31+
"psalm/plugin-phpunit": "^0.16",
32+
"vimeo/psalm": "^4.17"
3333
},
3434
"config": {
3535
"preferred-install": "dist",
36-
"sort-packages": true
36+
"sort-packages": true,
37+
"allow-plugins": {
38+
"composer/package-versions-deprecated": true,
39+
"phpstan/extension-installer": true,
40+
"infection/extension-installer": true
41+
}
3742
},
3843
"extra": {
3944
"composer-normalize": {

src/RequestOptions.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ final class RequestOptions
5959
/** @var bool|resource|Closure */
6060
private $buffer = HttpClientInterface::OPTIONS_DEFAULTS['buffer'];
6161

62-
/** @var null|callable(int, int, array) */
62+
/** @var callable(int, int, array)|null */
6363
private $on_progress = HttpClientInterface::OPTIONS_DEFAULTS['on_progress'];
6464

6565
/** @var array */

src/Traits/HttpMethodsTrait.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,7 @@
1313

1414
namespace SolidWorx\ApiFy\Traits;
1515

16-
use Closure;
1716
use SolidWorx\ApiFy\HttpClient;
18-
use SolidWorx\ApiFy\Progress;
19-
use SolidWorx\ApiFy\RequestBuilder;
20-
use Symfony\Component\Mime\Part\DataPart;
21-
use Traversable;
2217

2318
trait HttpMethodsTrait
2419
{

src/Traits/HttpOptionsTrait.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
namespace SolidWorx\ApiFy\Traits;
1515

1616
use Closure;
17+
use SolidWorx\ApiFy\HttpClient;
1718
use SolidWorx\ApiFy\Progress;
1819
use Symfony\Component\Mime\Part\DataPart;
1920
use Traversable;
@@ -183,4 +184,15 @@ public function httpVersion(string $httpVersion): self
183184

184185
return $httpClient;
185186
}
187+
188+
/**
189+
* @return $this
190+
*/
191+
public function http2(): self
192+
{
193+
$httpClient = clone $this;
194+
$httpClient->options = $httpClient->options->httpVersion(HttpClient::HTTP_VERSION_2);
195+
196+
return $httpClient;
197+
}
186198
}

tests/HttpClientTest.php

Lines changed: 57 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,50 @@ public function testWithPostHelperMethods(): void
219219
self::assertSame('POST', $mockResponse->getRequestMethod());
220220
}
221221

222+
public function testWithPutHelperMethods(): void
223+
{
224+
$mockResponse = new MockResponse();
225+
$httpClient = HttpClient::create(new MockHttpClient($mockResponse));
226+
$httpClient->put()
227+
->url('https://example.com')
228+
->request();
229+
230+
self::assertSame('PUT', $mockResponse->getRequestMethod());
231+
}
232+
233+
public function testWithPatchHelperMethods(): void
234+
{
235+
$mockResponse = new MockResponse();
236+
$httpClient = HttpClient::create(new MockHttpClient($mockResponse));
237+
$httpClient->patch()
238+
->url('https://example.com')
239+
->request();
240+
241+
self::assertSame('PATCH', $mockResponse->getRequestMethod());
242+
}
243+
244+
public function testWithOptionsHelperMethods(): void
245+
{
246+
$mockResponse = new MockResponse();
247+
$httpClient = HttpClient::create(new MockHttpClient($mockResponse));
248+
$httpClient->options()
249+
->url('https://example.com')
250+
->request();
251+
252+
self::assertSame('OPTIONS', $mockResponse->getRequestMethod());
253+
}
254+
255+
public function testWithDeleteHelperMethods(): void
256+
{
257+
$mockResponse = new MockResponse();
258+
$httpClient = HttpClient::create(new MockHttpClient($mockResponse));
259+
$httpClient->delete()
260+
->url('https://example.com')
261+
->request();
262+
263+
self::assertSame('DELETE', $mockResponse->getRequestMethod());
264+
}
265+
222266
public function testWithProgress(): void
223267
{
224268
$progressCalled = false;
@@ -233,9 +277,18 @@ public function testWithProgress(): void
233277

234278
self::assertContains($info['http_code'] ?? null, [0, 200]);
235279

236-
unset($info['start_time'], $info['http_code']);
280+
unset($info['start_time'], $info['total_time'], $info['http_code']);
237281

238-
self::assertEquals(['response_headers' => [], 'error' => null, 'canceled' => false, 'redirect_count' => 0, 'redirect_url' => null, 'http_method' => 'GET', 'user_data' => null, 'url' => 'https://example.com/'], $info);
282+
self::assertEquals([
283+
'response_headers' => [],
284+
'error' => null,
285+
'canceled' => false,
286+
'redirect_count' => 0,
287+
'redirect_url' => null,
288+
'http_method' => 'GET',
289+
'user_data' => null,
290+
'url' => 'https://example.com/',
291+
], $info);
239292

240293
$progressCalled = true;
241294
})
@@ -316,7 +369,7 @@ public function testUploadFile(): void
316369
self::assertSame('Accept: */*', $headers[1]);
317370
$body = $mockResponse->getRequestOptions()['body'];
318371
self::assertInstanceOf(Closure::class, $body);
319-
self::assertSame(182.0, $response ->getInfo()['size_upload']);
372+
self::assertSame(182.0, $response->getInfo()['size_upload']);
320373
} finally {
321374
unlink($file);
322375
}
@@ -343,7 +396,7 @@ public function testUploadFileWithFormData(): void
343396
self::assertSame('Accept: */*', $headers[1]);
344397
$body = $mockResponse->getRequestOptions()['body'];
345398
self::assertInstanceOf(Closure::class, $body);
346-
self::assertSame(319.0, $response ->getInfo()['size_upload']);
399+
self::assertSame(319.0, $response->getInfo()['size_upload']);
347400
} finally {
348401
unlink($file);
349402
}

0 commit comments

Comments
 (0)