From c3eaad6cf0c00b793ce6d9bee8b87176247da582 Mon Sep 17 00:00:00 2001 From: Asad Ali Date: Thu, 27 Feb 2025 11:03:30 +0500 Subject: [PATCH] feat(complex-headers): adds support to cater sending complex typed headers in requests (#70) --- src/Request/Request.php | 2 +- tests/ApiCallTest.php | 28 ++++++++++++++++++++++++++++ tests/EndToEndTest.php | 2 +- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/Request/Request.php b/src/Request/Request.php index 35ef30a..367c424 100644 --- a/src/Request/Request.php +++ b/src/Request/Request.php @@ -158,7 +158,7 @@ public function appendPath(string $path): void */ public function addHeader(string $key, $value): void { - $this->headers[$key] = $value; + $this->headers[$key] = CoreHelper::serialize($value); } /** diff --git a/tests/ApiCallTest.php b/tests/ApiCallTest.php index f70e39b..93246d9 100644 --- a/tests/ApiCallTest.php +++ b/tests/ApiCallTest.php @@ -147,6 +147,34 @@ public function testCollectedHeaderParams() $this->assertEquals(890.098, $request->getHeaders()['key5']); } + public function testComplexHeaderParams() + { + $request = (new RequestBuilder(RequestMethod::POST, '/some/path')) + ->parameters( + HeaderParam::init('class', new MockClass([ + 'my string' => 'value', + ])), + HeaderParam::init('file', MockHelper::getFileWrapper()), + HeaderParam::init('array', ['my number' => 123]), + HeaderParam::init('false', false), + HeaderParam::init('true', true), + HeaderParam::init('number', 1234), + HeaderParam::init('string', 'value s') + ) + ->build(MockHelper::getClient()); + + $this->assertEquals('{"body":{"my string":"value"}}', $request->getHeaders()['class']); + $this->assertEquals('{"my number":123}', $request->getHeaders()['array']); + $this->assertEquals( + 'This test file is created to test CoreFileWrapper functionality', + $request->getHeaders()['file'] + ); + $this->assertEquals('false', $request->getHeaders()['false']); + $this->assertEquals('true', $request->getHeaders()['true']); + $this->assertEquals(1234, $request->getHeaders()['number']); + $this->assertEquals('value s', $request->getHeaders()['string']); + } + public function testCollectedQueryParams() { $options = ['key1' => true, 'key2' => 'some string', 'key3' => 23]; diff --git a/tests/EndToEndTest.php b/tests/EndToEndTest.php index bc01a5b..b70367f 100644 --- a/tests/EndToEndTest.php +++ b/tests/EndToEndTest.php @@ -102,7 +102,7 @@ public function testEndpoint() ->bodyMatcher(NativeBodyMatcher::init(TestParam::object('{"body":{"httpMethod":"POST","queryUrl":' . '"https:\/\/my\/path\/v2\/api\/path\/poster?&date+array=Fri%2C+01+Oct+2021+00%3A00%3A00+GMT%2CThu' . '%2C+30+Sep+2021+00%3A00%3A00+GMT&token=someAuthToken&authorization=accessToken","headers":{' . - '"additionalHead1":"headVal1","additionalHead2":"headVal2","header":1234,"token":"someAuthToken",' . + '"additionalHead1":"headVal1","additionalHead2":"headVal2","header":"1234","token":"someAuthToken",' . '"authorization":"accessToken","Accept":"application\/json"},"parameters":{"form 2":{"key1":' . '"value 1","key2":"false","key3":2.3}},"parametersEncoded":{' . '"form 2":"form+2%5Bkey1%5D=value+1&form+2%5Bkey2%5D=false&form+2%5Bkey3%5D=2.3"},' .