diff --git a/generators/php/dynamic-snippets/src/EndpointSnippetGenerator.ts b/generators/php/dynamic-snippets/src/EndpointSnippetGenerator.ts index b713a66f6c9a..1a51101d7153 100644 --- a/generators/php/dynamic-snippets/src/EndpointSnippetGenerator.ts +++ b/generators/php/dynamic-snippets/src/EndpointSnippetGenerator.ts @@ -321,16 +321,24 @@ export class EndpointSnippetGenerator { auth: FernIr.dynamic.BasicAuth; values: FernIr.dynamic.BasicAuthValues; }): NamedArgument[] { - return [ - { + // usernameOmit/passwordOmit may exist in newer IR versions + const authRecord = auth as unknown as Record; + const usernameOmitted = !!authRecord.usernameOmit; + const passwordOmitted = !!authRecord.passwordOmit; + const args: NamedArgument[] = []; + if (!usernameOmitted) { + args.push({ name: this.context.getPropertyName(auth.username), assignment: php.TypeLiteral.string(values.username) - }, - { + }); + } + if (!passwordOmitted) { + args.push({ name: this.context.getPropertyName(auth.password), assignment: php.TypeLiteral.string(values.password) - } - ]; + }); + } + return args; } private getConstructorEnvironmentArg({ diff --git a/generators/php/sdk/src/root-client/RootClientGenerator.ts b/generators/php/sdk/src/root-client/RootClientGenerator.ts index a35d9b8075b8..b1f82e648fd9 100644 --- a/generators/php/sdk/src/root-client/RootClientGenerator.ts +++ b/generators/php/sdk/src/root-client/RootClientGenerator.ts @@ -355,26 +355,25 @@ export class RootClientGenerator extends FileGenerator s.type === "basic" ); - if (basicAuthSchemes.length > 0) { + const resolvedBasicAuthSchemes = basicAuthSchemes + .map((scheme) => this.resolveBasicAuthScheme(scheme)) + .filter((resolved) => resolved != null); + if (resolvedBasicAuthSchemes.length > 0) { const isAuthOptional = !this.context.ir.sdkConfig.isAuthMandatory; - for (let i = 0; i < basicAuthSchemes.length; i++) { - const basicAuthScheme = basicAuthSchemes[i]; - if (basicAuthScheme == null) { + const needsControlFlow = isAuthOptional || resolvedBasicAuthSchemes.length > 1; + for (let i = 0; i < resolvedBasicAuthSchemes.length; i++) { + const resolved = resolvedBasicAuthSchemes[i]; + if (resolved == null) { continue; } - const usernameName = this.context.getParameterName(basicAuthScheme.username); - const passwordName = this.context.getParameterName(basicAuthScheme.password); - if (isAuthOptional || basicAuthSchemes.length > 1) { - const controlFlowKeyword = i === 0 ? "if" : "else if"; - writer.controlFlow( - controlFlowKeyword, - php.codeblock(`$${usernameName} !== null && $${passwordName} !== null`) - ); + const { condition, credentialExpr } = resolved; + if (needsControlFlow) { + writer.controlFlow(i === 0 ? "if" : "else if", php.codeblock(condition)); } writer.writeLine( - `$defaultHeaders['Authorization'] = "Basic " . base64_encode($${usernameName} . ":" . $${passwordName});` + `$defaultHeaders['Authorization'] = "Basic " . base64_encode(${credentialExpr});` ); - if (isAuthOptional || basicAuthSchemes.length > 1) { + if (needsControlFlow) { writer.endControlFlow(); } } @@ -605,8 +604,12 @@ export class RootClientGenerator extends FileGenerator { diff --git a/generators/php/sdk/src/wire-tests/WireTestGenerator.ts b/generators/php/sdk/src/wire-tests/WireTestGenerator.ts index 0beadd9f0892..52ad85c39df5 100644 --- a/generators/php/sdk/src/wire-tests/WireTestGenerator.ts +++ b/generators/php/sdk/src/wire-tests/WireTestGenerator.ts @@ -489,9 +489,13 @@ export class WireTestGenerator { bearer: () => { authParams.push("token: 'test-token'"); }, - basic: () => { - authParams.push("username: 'test-user'"); - authParams.push("password: 'test-password'"); + basic: (basicScheme) => { + if (!basicScheme.usernameOmit) { + authParams.push("username: 'test-username'"); + } + if (!basicScheme.passwordOmit) { + authParams.push("password: 'test-password'"); + } }, header: (header) => { const paramName = this.case.camelSafe(header.name); diff --git a/generators/php/sdk/versions.yml b/generators/php/sdk/versions.yml index b24a50dc1cb3..b54d3ce2a567 100644 --- a/generators/php/sdk/versions.yml +++ b/generators/php/sdk/versions.yml @@ -1,4 +1,16 @@ # yaml-language-server: $schema=../../../fern-versions-yml.schema.json +- version: 2.4.0 + changelogEntry: + - summary: | + Support omitting username or password from basic auth when configured via + `usernameOmit` or `passwordOmit` in the IR. Omitted fields are removed from + the SDK's public API and treated as empty strings internally (e.g., omitting + password encodes `username:`, omitting username encodes `:password`). When + both are omitted, the Authorization header is skipped entirely. + type: feat + createdAt: "2026-04-02" + irVersion: 66 + - version: 2.3.2-rc.0 changelogEntry: - summary: | diff --git a/seed/php-sdk/basic-auth-pw-omitted/.fern/metadata.json b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/.fern/metadata.json similarity index 58% rename from seed/php-sdk/basic-auth-pw-omitted/.fern/metadata.json rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/.fern/metadata.json index 143d7b896167..d6b2eda38969 100644 --- a/seed/php-sdk/basic-auth-pw-omitted/.fern/metadata.json +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/.fern/metadata.json @@ -1,7 +1,10 @@ { "cliVersion": "DUMMY", "generatorName": "fernapi/fern-php-sdk", - "generatorVersion": "local", + "generatorVersion": "latest", + "generatorConfig": { + "enable-wire-tests": true + }, "originGitCommit": "DUMMY", "sdkVersion": "0.0.1" } \ No newline at end of file diff --git a/seed/php-sdk/basic-auth-pw-omitted/.github/workflows/ci.yml b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/.github/workflows/ci.yml similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/.github/workflows/ci.yml rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/.github/workflows/ci.yml diff --git a/seed/php-sdk/basic-auth-pw-omitted/wire-tests/.gitignore b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/.gitignore new file mode 100644 index 000000000000..31a1aeb14f35 --- /dev/null +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/.gitignore @@ -0,0 +1,5 @@ +.idea +.php-cs-fixer.cache +.phpunit.result.cache +composer.lock +vendor/ \ No newline at end of file diff --git a/seed/php-sdk/basic-auth-pw-omitted/wire-tests/README.md b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/README.md new file mode 100644 index 000000000000..269cd0bb42b1 --- /dev/null +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/README.md @@ -0,0 +1,145 @@ +# Seed PHP Library + +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-Built%20with%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Seed%2FPHP) +[![php shield](https://img.shields.io/badge/php-packagist-pink)](https://packagist.org/packages/seed/seed) + +The Seed PHP library provides convenient access to the Seed APIs from PHP. + +## Table of Contents + +- [Requirements](#requirements) +- [Installation](#installation) +- [Usage](#usage) +- [Exception Handling](#exception-handling) +- [Advanced](#advanced) + - [Custom Client](#custom-client) + - [Retries](#retries) + - [Timeouts](#timeouts) +- [Contributing](#contributing) + +## Requirements + +This SDK requires PHP ^8.1. + +## Installation + +```sh +composer require seed/seed +``` + +## Usage + +Instantiate and use the client with the following: + +```php +', + password: '', +); +$client->basicAuth->postWithBasicAuth( + [ + 'key' => "value", + ], +); + +``` + +## Exception Handling + +When the API returns a non-success status code (4xx or 5xx response), an exception will be thrown. + +```php +use Seed\Exceptions\SeedApiException; +use Seed\Exceptions\SeedException; + +try { + $response = $client->basicAuth->postWithBasicAuth(...); +} catch (SeedApiException $e) { + echo 'API Exception occurred: ' . $e->getMessage() . "\n"; + echo 'Status Code: ' . $e->getCode() . "\n"; + echo 'Response Body: ' . $e->getBody() . "\n"; + // Optionally, rethrow the exception or handle accordingly. +} +``` + +## Advanced + +### Custom Client + +This SDK is built to work with any HTTP client that implements the [PSR-18](https://www.php-fig.org/psr/psr-18/) `ClientInterface`. +By default, if no client is provided, the SDK will use `php-http/discovery` to find an installed HTTP client. +However, you can pass your own client that adheres to `ClientInterface`: + +```php +use Seed\SeedClient; + +// Pass any PSR-18 compatible HTTP client implementation. +// For example, using Guzzle: +$customClient = new \GuzzleHttp\Client([ + 'timeout' => 5.0, +]); + +$client = new SeedClient(options: [ + 'client' => $customClient +]); + +// Or using Symfony HttpClient: +// $customClient = (new \Symfony\Component\HttpClient\Psr18Client()) +// ->withOptions(['timeout' => 5.0]); +// +// $client = new SeedClient(options: [ +// 'client' => $customClient +// ]); +``` + +### Retries + +The SDK is instrumented with automatic retries with exponential backoff. A request will be retried as long +as the request is deemed retryable and the number of retry attempts has not grown larger than the configured +retry limit (default: 2). + +A request is deemed retryable when any of the following HTTP status codes is returned: + +- [408](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/408) (Timeout) +- [429](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429) (Too Many Requests) +- [5XX](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500) (Internal Server Errors) + +Use the `maxRetries` request option to configure this behavior. + +```php +$response = $client->basicAuth->postWithBasicAuth( + ..., + options: [ + 'maxRetries' => 0 // Override maxRetries at the request level + ] +); +``` + +### Timeouts + +The SDK defaults to a 30 second timeout. Use the `timeout` option to configure this behavior. + +```php +$response = $client->basicAuth->postWithBasicAuth( + ..., + options: [ + 'timeout' => 3.0 // Override timeout at the request level + ] +); +``` + +## Contributing + +While we value open-source contributions to this SDK, this library is generated programmatically. +Additions made directly to this library would have to be moved over to our generation code, +otherwise they would be overwritten upon the next generated release. Feel free to open a PR as +a proof of concept, but know that we will not be able to merge it as-is. We suggest opening +an issue first to discuss with us! + +On the other hand, contributions to the README are always very welcome! diff --git a/seed/php-sdk/basic-auth-pw-omitted/wire-tests/composer.json b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/composer.json new file mode 100644 index 000000000000..ad30960a8764 --- /dev/null +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/composer.json @@ -0,0 +1,46 @@ +{ + "name": "seed/seed", + "version": "0.0.1", + "description": "Seed PHP Library", + "keywords": [ + "seed", + "api", + "sdk" + ], + "license": [], + "require": { + "php": "^8.1", + "ext-json": "*", + "psr/http-client": "^1.0", + "psr/http-client-implementation": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-factory-implementation": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "php-http/discovery": "^1.0", + "php-http/multipart-stream-builder": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0", + "friendsofphp/php-cs-fixer": "3.5.0", + "phpstan/phpstan": "^1.12", + "guzzlehttp/guzzle": "^7.4" + }, + "autoload": { + "psr-4": { + "Seed\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Seed\\Tests\\": "tests/" + } + }, + "scripts": { + "build": [ + "@php -l src", + "@php -l tests" + ], + "test": "phpunit", + "analyze": "phpstan analyze src tests --memory-limit=1G" + } +} \ No newline at end of file diff --git a/seed/php-sdk/basic-auth-pw-omitted/wire-tests/phpstan.neon b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/phpstan.neon new file mode 100644 index 000000000000..780706b8f8a2 --- /dev/null +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/phpstan.neon @@ -0,0 +1,6 @@ +parameters: + level: max + reportUnmatchedIgnoredErrors: false + paths: + - src + - tests \ No newline at end of file diff --git a/seed/php-sdk/basic-auth-pw-omitted/wire-tests/phpunit.xml b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/phpunit.xml new file mode 100644 index 000000000000..718cb50ee175 --- /dev/null +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/phpunit.xml @@ -0,0 +1,7 @@ + + + + tests + + + diff --git a/seed/php-sdk/basic-auth-pw-omitted/wire-tests/reference.md b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/reference.md new file mode 100644 index 000000000000..76bf05ae1117 --- /dev/null +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/reference.md @@ -0,0 +1,99 @@ +# Reference +## BasicAuth +
$client->basicAuth->getWithBasicAuth() -> ?bool +
+
+ +#### 📝 Description + +
+
+ +
+
+ +GET request with basic auth scheme +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```php +$client->basicAuth->getWithBasicAuth(); +``` +
+
+
+
+ + +
+
+
+ +
$client->basicAuth->postWithBasicAuth($request) -> ?bool +
+
+ +#### 📝 Description + +
+
+ +
+
+ +POST request with basic auth scheme +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```php +$client->basicAuth->postWithBasicAuth( + [ + 'key' => "value", + ], +); +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**$request:** `mixed` + +
+
+
+
+ + +
+
+
+ diff --git a/seed/php-sdk/basic-auth-pw-omitted/wire-tests/snippet.json b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/snippet.json new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/BasicAuth/BasicAuthClient.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/BasicAuth/BasicAuthClient.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/BasicAuth/BasicAuthClient.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/BasicAuth/BasicAuthClient.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Client/BaseApiRequest.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Client/BaseApiRequest.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Client/BaseApiRequest.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Client/BaseApiRequest.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Client/HttpClientBuilder.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Client/HttpClientBuilder.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Client/HttpClientBuilder.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Client/HttpClientBuilder.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Client/HttpMethod.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Client/HttpMethod.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Client/HttpMethod.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Client/HttpMethod.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Client/MockHttpClient.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Client/MockHttpClient.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Client/MockHttpClient.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Client/MockHttpClient.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Client/RawClient.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Client/RawClient.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Client/RawClient.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Client/RawClient.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Client/RetryDecoratingClient.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Client/RetryDecoratingClient.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Client/RetryDecoratingClient.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Client/RetryDecoratingClient.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Json/JsonApiRequest.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Json/JsonApiRequest.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Json/JsonApiRequest.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Json/JsonApiRequest.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Json/JsonDecoder.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Json/JsonDecoder.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Json/JsonDecoder.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Json/JsonDecoder.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Json/JsonDeserializer.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Json/JsonDeserializer.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Json/JsonDeserializer.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Json/JsonDeserializer.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Json/JsonEncoder.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Json/JsonEncoder.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Json/JsonEncoder.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Json/JsonEncoder.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Json/JsonProperty.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Json/JsonProperty.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Json/JsonProperty.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Json/JsonProperty.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Json/JsonSerializableType.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Json/JsonSerializableType.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Json/JsonSerializableType.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Json/JsonSerializableType.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Json/JsonSerializer.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Json/JsonSerializer.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Json/JsonSerializer.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Json/JsonSerializer.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Json/Utils.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Json/Utils.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Json/Utils.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Json/Utils.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Multipart/MultipartApiRequest.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Multipart/MultipartApiRequest.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Multipart/MultipartApiRequest.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Multipart/MultipartApiRequest.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Multipart/MultipartFormData.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Multipart/MultipartFormData.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Multipart/MultipartFormData.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Multipart/MultipartFormData.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Multipart/MultipartFormDataPart.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Multipart/MultipartFormDataPart.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Multipart/MultipartFormDataPart.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Multipart/MultipartFormDataPart.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Types/ArrayType.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Types/ArrayType.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Types/ArrayType.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Types/ArrayType.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Types/Constant.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Types/Constant.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Types/Constant.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Types/Constant.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Types/Date.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Types/Date.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Types/Date.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Types/Date.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Core/Types/Union.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Types/Union.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Core/Types/Union.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Core/Types/Union.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Errors/Types/UnauthorizedRequestErrorBody.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Errors/Types/UnauthorizedRequestErrorBody.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Errors/Types/UnauthorizedRequestErrorBody.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Errors/Types/UnauthorizedRequestErrorBody.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Exceptions/SeedApiException.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Exceptions/SeedApiException.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Exceptions/SeedApiException.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Exceptions/SeedApiException.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Exceptions/SeedException.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Exceptions/SeedException.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Exceptions/SeedException.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Exceptions/SeedException.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/SeedClient.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/SeedClient.php similarity index 92% rename from seed/php-sdk/basic-auth-pw-omitted/src/SeedClient.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/SeedClient.php index b94c5065f3ed..6707c81c9b88 100644 --- a/seed/php-sdk/basic-auth-pw-omitted/src/SeedClient.php +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/SeedClient.php @@ -31,7 +31,6 @@ class SeedClient /** * @param string $username The username to use for authentication. - * @param string $password The username to use for authentication. * @param ?array{ * baseUrl?: string, * client?: ClientInterface, @@ -42,7 +41,6 @@ class SeedClient */ public function __construct( string $username, - string $password, ?array $options = null, ) { $defaultHeaders = [ @@ -51,7 +49,7 @@ public function __construct( 'X-Fern-SDK-Version' => '0.0.1', 'User-Agent' => 'seed/seed/0.0.1', ]; - $defaultHeaders['Authorization'] = "Basic " . base64_encode($username . ":" . $password); + $defaultHeaders['Authorization'] = "Basic " . base64_encode($username . ":"); $this->options = $options ?? []; diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/Utils/File.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Utils/File.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/src/Utils/File.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/Utils/File.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example0/snippet.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example0/snippet.php similarity index 88% rename from seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example0/snippet.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example0/snippet.php index f17c29ac0c45..70426907841c 100644 --- a/seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example0/snippet.php +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example0/snippet.php @@ -6,7 +6,6 @@ $client = new SeedClient( username: '', - password: '', options: [ 'baseUrl' => 'https://api.fern.com', ], diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example1/snippet.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example1/snippet.php similarity index 88% rename from seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example1/snippet.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example1/snippet.php index f17c29ac0c45..70426907841c 100644 --- a/seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example1/snippet.php +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example1/snippet.php @@ -6,7 +6,6 @@ $client = new SeedClient( username: '', - password: '', options: [ 'baseUrl' => 'https://api.fern.com', ], diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example2/snippet.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example2/snippet.php similarity index 88% rename from seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example2/snippet.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example2/snippet.php index f17c29ac0c45..70426907841c 100644 --- a/seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example2/snippet.php +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example2/snippet.php @@ -6,7 +6,6 @@ $client = new SeedClient( username: '', - password: '', options: [ 'baseUrl' => 'https://api.fern.com', ], diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example3/snippet.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example3/snippet.php similarity index 90% rename from seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example3/snippet.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example3/snippet.php index 379913d20cec..50c374428362 100644 --- a/seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example3/snippet.php +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example3/snippet.php @@ -6,7 +6,6 @@ $client = new SeedClient( username: '', - password: '', options: [ 'baseUrl' => 'https://api.fern.com', ], diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example4/snippet.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example4/snippet.php similarity index 90% rename from seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example4/snippet.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example4/snippet.php index 379913d20cec..50c374428362 100644 --- a/seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example4/snippet.php +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example4/snippet.php @@ -6,7 +6,6 @@ $client = new SeedClient( username: '', - password: '', options: [ 'baseUrl' => 'https://api.fern.com', ], diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example5/snippet.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example5/snippet.php similarity index 90% rename from seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example5/snippet.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example5/snippet.php index 379913d20cec..50c374428362 100644 --- a/seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example5/snippet.php +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example5/snippet.php @@ -6,7 +6,6 @@ $client = new SeedClient( username: '', - password: '', options: [ 'baseUrl' => 'https://api.fern.com', ], diff --git a/seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example6/snippet.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example6/snippet.php similarity index 90% rename from seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example6/snippet.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example6/snippet.php index 379913d20cec..50c374428362 100644 --- a/seed/php-sdk/basic-auth-pw-omitted/src/dynamic-snippets/example6/snippet.php +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/src/dynamic-snippets/example6/snippet.php @@ -6,7 +6,6 @@ $client = new SeedClient( username: '', - password: '', options: [ 'baseUrl' => 'https://api.fern.com', ], diff --git a/seed/php-sdk/basic-auth-pw-omitted/tests/Core/Client/RawClientTest.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Client/RawClientTest.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/tests/Core/Client/RawClientTest.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Client/RawClientTest.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/AdditionalPropertiesTest.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/AdditionalPropertiesTest.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/AdditionalPropertiesTest.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/AdditionalPropertiesTest.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/DateArrayTest.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/DateArrayTest.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/DateArrayTest.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/DateArrayTest.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/EmptyArrayTest.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/EmptyArrayTest.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/EmptyArrayTest.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/EmptyArrayTest.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/EnumTest.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/EnumTest.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/EnumTest.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/EnumTest.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/ExhaustiveTest.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/ExhaustiveTest.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/ExhaustiveTest.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/ExhaustiveTest.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/InvalidTest.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/InvalidTest.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/InvalidTest.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/InvalidTest.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/NestedUnionArrayTest.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/NestedUnionArrayTest.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/NestedUnionArrayTest.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/NestedUnionArrayTest.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/NullPropertyTest.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/NullPropertyTest.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/NullPropertyTest.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/NullPropertyTest.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/NullableArrayTest.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/NullableArrayTest.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/NullableArrayTest.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/NullableArrayTest.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/ScalarTest.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/ScalarTest.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/ScalarTest.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/ScalarTest.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/TraitTest.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/TraitTest.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/TraitTest.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/TraitTest.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/UnionArrayTest.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/UnionArrayTest.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/UnionArrayTest.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/UnionArrayTest.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/UnionPropertyTest.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/UnionPropertyTest.php similarity index 100% rename from seed/php-sdk/basic-auth-pw-omitted/tests/Core/Json/UnionPropertyTest.php rename to seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Core/Json/UnionPropertyTest.php diff --git a/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Wire/BasicAuthWireTest.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Wire/BasicAuthWireTest.php new file mode 100644 index 000000000000..0125f21dcc87 --- /dev/null +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Wire/BasicAuthWireTest.php @@ -0,0 +1,70 @@ +client->basicAuth->getWithBasicAuth( + [ + 'headers' => [ + 'X-Test-Id' => 'basic_auth.get_with_basic_auth.0', + ], + ], + ); + $this->verifyRequestCount( + $testId, + "GET", + "/basic-auth", + null, + 1 + ); + } + + /** + */ + public function testPostWithBasicAuth(): void { + $testId = 'basic_auth.post_with_basic_auth.0'; + $this->client->basicAuth->postWithBasicAuth( + [ + 'key' => "value", + ], + [ + 'headers' => [ + 'X-Test-Id' => 'basic_auth.post_with_basic_auth.0', + ], + ], + ); + $this->verifyRequestCount( + $testId, + "POST", + "/basic-auth", + null, + 1 + ); + } + + /** + */ + protected function setUp(): void { + parent::setUp(); + $wiremockUrl = getenv('WIREMOCK_URL') ?: 'http://localhost:8080'; + $this->client = new SeedClient( + username: 'test-username', + options: [ + 'baseUrl' => $wiremockUrl, + ], + ); + } +} diff --git a/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Wire/WireMockTestCase.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Wire/WireMockTestCase.php new file mode 100644 index 000000000000..0ae28fccdabe --- /dev/null +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Wire/WireMockTestCase.php @@ -0,0 +1,80 @@ +|null $queryParams Query parameters to match + * @param int $expected Expected number of requests + */ + protected function verifyRequestCount( + string $testId, + string $method, + string $urlPath, + ?array $queryParams, + int $expected + ): void { + $client = Psr18ClientDiscovery::find(); + $requestFactory = Psr17FactoryDiscovery::findRequestFactory(); + $streamFactory = Psr17FactoryDiscovery::findStreamFactory(); + + $body = [ + 'method' => $method, + 'urlPath' => $urlPath, + 'headers' => [ + 'X-Test-Id' => ['equalTo' => $testId], + ], + ]; + if ($queryParams !== null && $queryParams !== []) { + $body['queryParameters'] = []; + foreach ($queryParams as $k => $v) { + $body['queryParameters'][$k] = ['equalTo' => (string) $v]; + } + } + + $wiremockUrl = getenv('WIREMOCK_URL') ?: 'http://localhost:8080'; + $request = $requestFactory->createRequest('POST', $wiremockUrl . '/__admin/requests/find') + ->withHeader('Content-Type', 'application/json') + ->withBody($streamFactory->createStream(JsonEncoder::encode($body))); + $response = $client->sendRequest($request); + + $this->assertSame(200, $response->getStatusCode(), 'Failed to query WireMock requests'); + + $json = json_decode((string) $response->getBody(), true); + + // Ensure we have an array; otherwise, fail the test. + if (!is_array($json)) { + $this->fail('Expected WireMock to return a JSON object.'); + } + + /** @var array $json */ + $requests = []; + if (isset($json['requests']) && is_array($json['requests'])) { + $requests = $json['requests']; + } + + /** @var array $requests */ + $this->assertCount( + $expected, + $requests, + sprintf('Expected %d requests, found %d', $expected, count($requests)) + ); + } +} diff --git a/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Wire/bootstrap.php b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Wire/bootstrap.php new file mode 100644 index 000000000000..200266641318 --- /dev/null +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/tests/Wire/bootstrap.php @@ -0,0 +1,55 @@ +&1', + escapeshellarg($dockerComposeFile) +); +exec($cmd, $output, $exitCode); +if ($exitCode !== 0) { + throw new \RuntimeException("Failed to start WireMock: " . implode("\n", $output)); +} + +// Discover the dynamically assigned port +$portCmd = sprintf( + 'docker compose -f %s port wiremock 8080 2>&1', + escapeshellarg($dockerComposeFile) +); +exec($portCmd, $portOutput, $portExitCode); +if ($portExitCode === 0 && !empty($portOutput[0])) { + $parts = explode(':', $portOutput[0]); + $port = end($parts); + putenv("WIREMOCK_URL=http://localhost:{$port}"); + echo "WireMock container is ready on port {$port}\n"; +} else { + putenv('WIREMOCK_URL=http://localhost:8080'); + echo "WireMock container is ready (default port 8080)\n"; +} + +// Register shutdown function to stop the container after all tests complete +register_shutdown_function(function () use ($dockerComposeFile) { + echo "\nStopping WireMock container...\n"; + $cmd = sprintf( + 'docker compose -f %s down -v 2>&1', + escapeshellarg($dockerComposeFile) + ); + exec($cmd); +}); diff --git a/seed/php-sdk/basic-auth-pw-omitted/wire-tests/wiremock/docker-compose.test.yml b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/wiremock/docker-compose.test.yml new file mode 100644 index 000000000000..58747d54a46b --- /dev/null +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/wiremock/docker-compose.test.yml @@ -0,0 +1,14 @@ +services: + wiremock: + image: wiremock/wiremock:3.9.1 + ports: + - "0:8080" # Use dynamic port to avoid conflicts with concurrent tests + volumes: + - ./wiremock-mappings.json:/home/wiremock/mappings/wiremock-mappings.json + command: ["--global-response-templating", "--verbose"] + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8080/__admin/health"] + interval: 2s + timeout: 5s + retries: 15 + start_period: 5s diff --git a/seed/php-sdk/basic-auth-pw-omitted/wire-tests/wiremock/wiremock-mappings.json b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/wiremock/wiremock-mappings.json new file mode 100644 index 000000000000..8a3e7dd565af --- /dev/null +++ b/seed/php-sdk/basic-auth-pw-omitted/wire-tests/wiremock/wiremock-mappings.json @@ -0,0 +1,70 @@ +{ + "mappings": [ + { + "id": "ce59c023-78fc-4d8d-8e8c-95f5e1a6204a", + "name": "getWithBasicAuth - default", + "request": { + "urlPathTemplate": "/basic-auth", + "method": "GET", + "headers": { + "Authorization": { + "equalTo": "Basic dGVzdC11c2VybmFtZTo=" + } + } + }, + "response": { + "status": 200, + "body": "true", + "headers": { + "Content-Type": "application/json" + } + }, + "uuid": "ce59c023-78fc-4d8d-8e8c-95f5e1a6204a", + "persistent": true, + "priority": 3, + "metadata": { + "mocklab": { + "created": { + "at": "2020-01-01T00:00:00.000Z", + "via": "SYSTEM" + } + } + }, + "postServeActions": [] + }, + { + "id": "9cf6385c-29ea-4710-8792-fd2e00adc7c7", + "name": "postWithBasicAuth - default", + "request": { + "urlPathTemplate": "/basic-auth", + "method": "POST", + "headers": { + "Authorization": { + "equalTo": "Basic dGVzdC11c2VybmFtZTo=" + } + } + }, + "response": { + "status": 200, + "body": "true", + "headers": { + "Content-Type": "application/json" + } + }, + "uuid": "9cf6385c-29ea-4710-8792-fd2e00adc7c7", + "persistent": true, + "priority": 3, + "metadata": { + "mocklab": { + "created": { + "at": "2020-01-01T00:00:00.000Z", + "via": "SYSTEM" + } + } + } + } + ], + "meta": { + "total": 2 + } +} \ No newline at end of file diff --git a/seed/php-sdk/basic-auth/wire-tests/.fern/metadata.json b/seed/php-sdk/basic-auth/wire-tests/.fern/metadata.json index 8478683b9c41..d6b2eda38969 100644 --- a/seed/php-sdk/basic-auth/wire-tests/.fern/metadata.json +++ b/seed/php-sdk/basic-auth/wire-tests/.fern/metadata.json @@ -1,7 +1,7 @@ { "cliVersion": "DUMMY", "generatorName": "fernapi/fern-php-sdk", - "generatorVersion": "local", + "generatorVersion": "latest", "generatorConfig": { "enable-wire-tests": true }, diff --git a/seed/php-sdk/basic-auth/wire-tests/src/SeedClient.php b/seed/php-sdk/basic-auth/wire-tests/src/SeedClient.php index b94c5065f3ed..197e6664136c 100644 --- a/seed/php-sdk/basic-auth/wire-tests/src/SeedClient.php +++ b/seed/php-sdk/basic-auth/wire-tests/src/SeedClient.php @@ -31,7 +31,7 @@ class SeedClient /** * @param string $username The username to use for authentication. - * @param string $password The username to use for authentication. + * @param string $password The password to use for authentication. * @param ?array{ * baseUrl?: string, * client?: ClientInterface, diff --git a/seed/php-sdk/basic-auth/wire-tests/tests/Wire/BasicAuthWireTest.php b/seed/php-sdk/basic-auth/wire-tests/tests/Wire/BasicAuthWireTest.php index 2d804a182fff..edf399f0571e 100644 --- a/seed/php-sdk/basic-auth/wire-tests/tests/Wire/BasicAuthWireTest.php +++ b/seed/php-sdk/basic-auth/wire-tests/tests/Wire/BasicAuthWireTest.php @@ -61,7 +61,7 @@ protected function setUp(): void { parent::setUp(); $wiremockUrl = getenv('WIREMOCK_URL') ?: 'http://localhost:8080'; $this->client = new SeedClient( - username: 'test-user', + username: 'test-username', password: 'test-password', options: [ 'baseUrl' => $wiremockUrl, diff --git a/seed/php-sdk/basic-auth/wire-tests/wiremock/wiremock-mappings.json b/seed/php-sdk/basic-auth/wire-tests/wiremock/wiremock-mappings.json index e4105fe17be0..043be0044335 100644 --- a/seed/php-sdk/basic-auth/wire-tests/wiremock/wiremock-mappings.json +++ b/seed/php-sdk/basic-auth/wire-tests/wiremock/wiremock-mappings.json @@ -5,7 +5,12 @@ "name": "getWithBasicAuth - default", "request": { "urlPathTemplate": "/basic-auth", - "method": "GET" + "method": "GET", + "headers": { + "Authorization": { + "equalTo": "Basic dGVzdC11c2VybmFtZTp0ZXN0LXBhc3N3b3Jk" + } + } }, "response": { "status": 200, @@ -32,7 +37,12 @@ "name": "postWithBasicAuth - default", "request": { "urlPathTemplate": "/basic-auth", - "method": "POST" + "method": "POST", + "headers": { + "Authorization": { + "equalTo": "Basic dGVzdC11c2VybmFtZTp0ZXN0LXBhc3N3b3Jk" + } + } }, "response": { "status": 200, diff --git a/seed/php-sdk/seed.yml b/seed/php-sdk/seed.yml index 42fa78a77e45..4a2eb1b196da 100644 --- a/seed/php-sdk/seed.yml +++ b/seed/php-sdk/seed.yml @@ -29,6 +29,10 @@ fixtures: - outputFolder: wire-tests customConfig: enable-wire-tests: true + basic-auth-pw-omitted: + - outputFolder: wire-tests + customConfig: + enable-wire-tests: true exhaustive: - outputFolder: no-custom-config customConfig: null diff --git a/test-definitions/fern/apis/basic-auth-pw-omitted/generators.yml b/test-definitions/fern/apis/basic-auth-pw-omitted/generators.yml index fc35e4407493..64ff4bd50cfc 100644 --- a/test-definitions/fern/apis/basic-auth-pw-omitted/generators.yml +++ b/test-definitions/fern/apis/basic-auth-pw-omitted/generators.yml @@ -4,7 +4,6 @@ groups: generators: - name: fernapi/fern-php-sdk version: latest - ir-version: v61 github: token: ${GITHUB_TOKEN} mode: push @@ -14,7 +13,7 @@ groups: generators: - name: fernapi/fern-go-sdk version: latest - ir-version: v61 + ir-version: v63 github: token: ${GITHUB_TOKEN} mode: push