From d9c4dec50c59d1fc839d394b014c7778f1405767 Mon Sep 17 00:00:00 2001 From: Mario Eberhard Date: Thu, 12 Aug 2021 08:37:38 +0200 Subject: [PATCH] support non-root paths in base_uri (#62) * support non-root paths in base_uri resolves #61 Given a Guzzle client with a base uri like `http://example.com/myregistryliveshere/`. Requests where created with a relative path with a leading `/`. Guzzle interprets this as a path from the root and replaces `/myregistryliveshere/` with the given path. To make Guzzle combine the path correctly with the given base_uri, the relative path must not start with a `/`. Then it is appended at the end of the base_uri, preserving the path in the base_uri. * fixed unit tests for Functions.php After removing the leading "/" from the requests the unit tests failed, because they still expected the leading "/". So removed this from the tests as well to match the code in Functions again. Co-authored-by: Mario Eberhard Co-authored-by: Thomas Ploch --- src/Requests/Functions.php | 26 +++++++++++++------------- test/Requests/FunctionsTest.php | 28 ++++++++++++++-------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/Requests/Functions.php b/src/Requests/Functions.php index 628880f..8d6e4e8 100644 --- a/src/Requests/Functions.php +++ b/src/Requests/Functions.php @@ -23,7 +23,7 @@ function allSubjectsRequest(): RequestInterface { return new Request( 'GET', - '/subjects', + 'subjects', ACCEPT_HEADER ); } @@ -32,7 +32,7 @@ function allSubjectVersionsRequest(string $subjectName): RequestInterface { return new Request( 'GET', - (new UriTemplate())->expand('/subjects/{name}/versions', ['name' => $subjectName]), + (new UriTemplate())->expand('subjects/{name}/versions', ['name' => $subjectName]), ACCEPT_HEADER ); } @@ -42,7 +42,7 @@ function singleSubjectVersionRequest(string $subjectName, string $versionId): Re return new Request( 'GET', (new UriTemplate())->expand( - '/subjects/{name}/versions/{id}', + 'subjects/{name}/versions/{id}', ['name' => $subjectName, 'id' => $versionId] ), ACCEPT_HEADER @@ -53,7 +53,7 @@ function registerNewSchemaVersionWithSubjectRequest(string $schema, string $subj { return new Request( 'POST', - (new UriTemplate())->expand('/subjects/{name}/versions', ['name' => $subjectName]), + (new UriTemplate())->expand('subjects/{name}/versions', ['name' => $subjectName]), CONTENT_TYPE_HEADER + ACCEPT_HEADER, prepareJsonSchemaForTransfer(validateSchemaStringAsJson($schema), ...$references) ); @@ -64,7 +64,7 @@ function checkSchemaCompatibilityAgainstVersionRequest(string $schema, string $s return new Request( 'POST', (new UriTemplate())->expand( - '/compatibility/subjects/{name}/versions/{version}', + 'compatibility/subjects/{name}/versions/{version}', ['name' => $subjectName, 'version' => $versionId] ), CONTENT_TYPE_HEADER + ACCEPT_HEADER, @@ -76,7 +76,7 @@ function checkIfSubjectHasSchemaRegisteredRequest(string $subjectName, string $s { return new Request( 'POST', - (new UriTemplate())->expand('/subjects/{name}', ['name' => $subjectName]), + (new UriTemplate())->expand('subjects/{name}', ['name' => $subjectName]), CONTENT_TYPE_HEADER + ACCEPT_HEADER, prepareJsonSchemaForTransfer(validateSchemaStringAsJson($schema)) ); @@ -86,7 +86,7 @@ function schemaRequest(string $id): RequestInterface { return new Request( 'GET', - (new UriTemplate())->expand('/schemas/ids/{id}', ['id' => $id]), + (new UriTemplate())->expand('schemas/ids/{id}', ['id' => $id]), ACCEPT_HEADER ); } @@ -95,7 +95,7 @@ function defaultCompatibilityLevelRequest(): RequestInterface { return new Request( 'GET', - '/config', + 'config', ACCEPT_HEADER ); } @@ -104,7 +104,7 @@ function changeDefaultCompatibilityLevelRequest(string $level): RequestInterface { return new Request( 'PUT', - '/config', + 'config', ACCEPT_HEADER, prepareCompatibilityLevelForTransport(validateCompatibilityLevel($level)) ); @@ -114,7 +114,7 @@ function subjectCompatibilityLevelRequest(string $subjectName): RequestInterface { return new Request( 'GET', - (new UriTemplate())->expand('/config/{subject}', ['subject' => $subjectName]), + (new UriTemplate())->expand('config/{subject}', ['subject' => $subjectName]), ACCEPT_HEADER ); } @@ -123,7 +123,7 @@ function changeSubjectCompatibilityLevelRequest(string $subjectName, string $lev { return new Request( 'PUT', - (new UriTemplate())->expand('/config/{subject}', ['subject' => $subjectName]), + (new UriTemplate())->expand('config/{subject}', ['subject' => $subjectName]), ACCEPT_HEADER, prepareCompatibilityLevelForTransport(validateCompatibilityLevel($level)) ); @@ -208,7 +208,7 @@ function deleteSubjectRequest(string $subjectName): RequestInterface { return new Request( 'DELETE', - (new UriTemplate())->expand('/subjects/{name}', ['name' => $subjectName]), + (new UriTemplate())->expand('subjects/{name}', ['name' => $subjectName]), ACCEPT_HEADER ); } @@ -222,7 +222,7 @@ function deleteSubjectVersionRequest(string $subjectName, string $versionId): Re { return new Request( 'DELETE', - (new UriTemplate())->expand('/subjects/{name}/versions/{version}', ['name' => $subjectName, 'version' => $versionId]), + (new UriTemplate())->expand('subjects/{name}/versions/{version}', ['name' => $subjectName, 'version' => $versionId]), ACCEPT_HEADER ); } diff --git a/test/Requests/FunctionsTest.php b/test/Requests/FunctionsTest.php index e5648be..30f1e55 100644 --- a/test/Requests/FunctionsTest.php +++ b/test/Requests/FunctionsTest.php @@ -51,7 +51,7 @@ public function it_should_produce_a_Request_to_get_all_subjects(): void $request = allSubjectsRequest(); self::assertEquals('GET', $request->getMethod()); - self::assertEquals('/subjects', $request->getUri()); + self::assertEquals('subjects', $request->getUri()); self::assertEquals(ACCEPT_HEADER[ACCEPT_HEADER_KEY], $request->getHeader(ACCEPT_HEADER_KEY)[0]); } @@ -63,7 +63,7 @@ public function it_should_produce_a_Request_to_get_all_subject_versions(): void $request = allSubjectVersionsRequest('test'); self::assertEquals('GET', $request->getMethod()); - self::assertEquals('/subjects/test/versions', $request->getUri()); + self::assertEquals('subjects/test/versions', $request->getUri()); self::assertEquals(ACCEPT_HEADER[ACCEPT_HEADER_KEY], $request->getHeader(ACCEPT_HEADER_KEY)[0]); } @@ -75,7 +75,7 @@ public function it_should_produce_a_Request_to_get_a_specific_subject_version(): $request = singleSubjectVersionRequest('test', '3'); self::assertEquals('GET', $request->getMethod()); - self::assertEquals('/subjects/test/versions/3', $request->getUri()); + self::assertEquals('subjects/test/versions/3', $request->getUri()); self::assertEquals(ACCEPT_HEADER[ACCEPT_HEADER_KEY], $request->getHeader(ACCEPT_HEADER_KEY)[0]); } @@ -92,7 +92,7 @@ public function it_should_produce_a_request_to_register_a_new_schema_version(str $request = registerNewSchemaVersionWithSubjectRequest($initialSchema, 'test', ...$references); self::assertEquals('POST', $request->getMethod()); - self::assertEquals('/subjects/test/versions', $request->getUri()); + self::assertEquals('subjects/test/versions', $request->getUri()); self::assertEquals(ACCEPT_HEADER[ACCEPT_HEADER_KEY], $request->getHeader(ACCEPT_HEADER_KEY)[0]); self::assertEquals(CONTENT_TYPE_HEADER[CONTENT_TYPE_HEADER_KEY], $request->getHeader(CONTENT_TYPE_HEADER_KEY)[0]); self::assertJsonStringEqualsJsonString($finalSchema, $request->getBody()->getContents()); @@ -143,7 +143,7 @@ public function it_should_produce_a_request_to_check_schema_compatibility_agains ); self::assertEquals('POST', $request->getMethod()); - self::assertEquals('/compatibility/subjects/test/versions/latest', $request->getUri()); + self::assertEquals('compatibility/subjects/test/versions/latest', $request->getUri()); self::assertEquals('{"schema":"{\"type\":\"test\"}"}', $request->getBody()->getContents()); self::assertEquals(ACCEPT_HEADER[ACCEPT_HEADER_KEY], $request->getHeader(ACCEPT_HEADER_KEY)[0]); self::assertEquals(CONTENT_TYPE_HEADER[CONTENT_TYPE_HEADER_KEY], $request->getHeader(CONTENT_TYPE_HEADER_KEY)[0]); @@ -157,7 +157,7 @@ public function it_should_produce_a_request_to_check_if_a_subject_already_has_a_ $request = checkIfSubjectHasSchemaRegisteredRequest('test', '{"type":"test"}'); self::assertEquals('POST', $request->getMethod()); - self::assertEquals('/subjects/test', $request->getUri()); + self::assertEquals('subjects/test', $request->getUri()); self::assertEquals('{"schema":"{\"type\":\"test\"}"}', $request->getBody()->getContents()); self::assertEquals(ACCEPT_HEADER[ACCEPT_HEADER_KEY], $request->getHeader(ACCEPT_HEADER_KEY)[0]); self::assertEquals(CONTENT_TYPE_HEADER[CONTENT_TYPE_HEADER_KEY], $request->getHeader(CONTENT_TYPE_HEADER_KEY)[0]); @@ -171,7 +171,7 @@ public function it_should_produce_a_request_to_get_a_specific_schema_by_id(): vo $request = schemaRequest('3'); self::assertEquals('GET', $request->getMethod()); - self::assertEquals('/schemas/ids/3', $request->getUri()); + self::assertEquals('schemas/ids/3', $request->getUri()); self::assertEquals(ACCEPT_HEADER[ACCEPT_HEADER_KEY], $request->getHeader(ACCEPT_HEADER_KEY)[0]); } @@ -183,7 +183,7 @@ public function it_should_produce_a_request_to_get_the_global_compatibility_leve $request = defaultCompatibilityLevelRequest(); self::assertEquals('GET', $request->getMethod()); - self::assertEquals('/config', $request->getUri()); + self::assertEquals('config', $request->getUri()); self::assertEquals(ACCEPT_HEADER[ACCEPT_HEADER_KEY], $request->getHeader(ACCEPT_HEADER_KEY)[0]); } @@ -195,7 +195,7 @@ public function it_should_produce_a_request_to_change_the_global_compatibility_l $request = changeDefaultCompatibilityLevelRequest(COMPATIBILITY_FULL); self::assertEquals('PUT', $request->getMethod()); - self::assertEquals('/config', $request->getUri()); + self::assertEquals('config', $request->getUri()); self::assertEquals('{"compatibility":"FULL"}', $request->getBody()->getContents()); self::assertEquals(ACCEPT_HEADER[ACCEPT_HEADER_KEY], $request->getHeader(ACCEPT_HEADER_KEY)[0]); } @@ -208,7 +208,7 @@ public function it_should_produce_a_request_to_get_the_subject_compatibility_lev $request = subjectCompatibilityLevelRequest('test'); self::assertEquals('GET', $request->getMethod()); - self::assertEquals('/config/test', $request->getUri()); + self::assertEquals('config/test', $request->getUri()); self::assertEquals(ACCEPT_HEADER[ACCEPT_HEADER_KEY], $request->getHeader(ACCEPT_HEADER_KEY)[0]); } @@ -220,7 +220,7 @@ public function it_should_produce_a_request_to_change_the_subject_compatibility_ $request = changeSubjectCompatibilityLevelRequest('test', COMPATIBILITY_FORWARD); self::assertEquals('PUT', $request->getMethod()); - self::assertEquals('/config/test', $request->getUri()); + self::assertEquals('config/test', $request->getUri()); self::assertEquals('{"compatibility":"FORWARD"}', $request->getBody()->getContents()); self::assertEquals(ACCEPT_HEADER[ACCEPT_HEADER_KEY], $request->getHeader(ACCEPT_HEADER_KEY)[0]); } @@ -384,7 +384,7 @@ public function it_should_produce_a_valid_subject_deletion_request(): void $request = deleteSubjectRequest('test'); self::assertEquals('DELETE', $request->getMethod()); - self::assertEquals('/subjects/test', $request->getUri()); + self::assertEquals('subjects/test', $request->getUri()); self::assertEquals(ACCEPT_HEADER[ACCEPT_HEADER_KEY], $request->getHeader(ACCEPT_HEADER_KEY)[0]); } @@ -396,13 +396,13 @@ public function it_should_produce_a_valid_subject_version_deletion_request(): vo $request = deleteSubjectVersionRequest('test', VERSION_LATEST); self::assertEquals('DELETE', $request->getMethod()); - self::assertEquals('/subjects/test/versions/latest', $request->getUri()); + self::assertEquals('subjects/test/versions/latest', $request->getUri()); self::assertEquals(ACCEPT_HEADER[ACCEPT_HEADER_KEY], $request->getHeader(ACCEPT_HEADER_KEY)[0]); $request = deleteSubjectVersionRequest('test', '5'); self::assertEquals('DELETE', $request->getMethod()); - self::assertEquals('/subjects/test/versions/5', $request->getUri()); + self::assertEquals('subjects/test/versions/5', $request->getUri()); self::assertEquals(ACCEPT_HEADER[ACCEPT_HEADER_KEY], $request->getHeader(ACCEPT_HEADER_KEY)[0]); } }