Skip to content

Commit d268e49

Browse files
committed
Sync open source content 🐝 (from e6ba1db4eb243068432ef714bd59327558400f87)
1 parent 4dc0a24 commit d268e49

File tree

5 files changed

+193
-6
lines changed

5 files changed

+193
-6
lines changed

β€Ždocs/sdks/customize/authentication/oauth.mdxβ€Ž

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ generation:
7474
{ language: "C#", support: "βœ…" },
7575
{ language: "Java", support: "βœ…" },
7676
{ language: "PHP", support: "βœ…" },
77-
{ language: "Ruby", support: "πŸ—οΈ" },
77+
{ language: "Ruby", support: "βœ…" },
7878
]}
7979
columns={[
8080
{ key: "language", header: "Language" },
@@ -112,7 +112,7 @@ client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=client_cred
112112
{ language: "C#", support: "πŸ—οΈ" },
113113
{ language: "Java", support: "βœ…" },
114114
{ language: "PHP", support: "πŸ—οΈ" },
115-
{ language: "Ruby", support: "πŸ—οΈ" },
115+
{ language: "Ruby", support: "βœ…" },
116116
]}
117117
columns={[
118118
{ key: "language", header: "Language" },
@@ -432,6 +432,24 @@ security:
432432
} catch (Errors\\ErrorThrowable $e) {
433433
// handle exception
434434
}`,
435+
},
436+
{
437+
label: "Ruby",
438+
language: "ruby",
439+
code: `require 'speakeasy'
440+
441+
s = ::Speakeasy::SDK.new(
442+
security: ::Speakeasy::Models::Components::Security.new(
443+
client_id: '<YOUR_CLIENT_ID_HERE>',
444+
client_secret: '<YOUR_CLIENT_SECRET_HERE>',
445+
),
446+
)
447+
448+
res = s.drinks.list_drinks
449+
450+
if !res.drinks.nil?
451+
# handle response
452+
end`,
435453
}
436454
]}
437455
/>
@@ -449,7 +467,7 @@ Also known informally as OAuth 2.0 Password flow.
449467
{ language: "Java", support: "βœ…" },
450468
{ language: "PHP", support: "πŸ—οΈ" },
451469
{ language: "Swift", support: "πŸ—οΈ" },
452-
{ language: "Ruby", support: "πŸ—οΈ" },
470+
{ language: "Ruby", support: "βœ…" },
453471
]}
454472
columns={[
455473
{ key: "language", header: "Language" },
@@ -580,6 +598,26 @@ Below are usage examples in supported languages:
580598
)
581599
582600
res = s.list_products()`,
601+
},
602+
{
603+
label: "Ruby",
604+
language: "ruby",
605+
code: `require 'speakeasy'
606+
607+
s = ::Speakeasy::SDK.new(
608+
oauth2: ::Speakeasy::Models::Components::Oauth2Credentials.new(
609+
username: '<YOUR_USERNAME>',
610+
password: '<YOUR_PASSWORD>',
611+
client_id: '<YOUR_CLIENT_ID_HERE>',
612+
client_secret: '<YOUR_CLIENT_SECRET_HERE>',
613+
),
614+
)
615+
616+
res = s.drinks.list_drinks
617+
618+
if !res.drinks.nil?
619+
# handle response
620+
end`,
583621
}
584622
]}
585623
/>
@@ -624,6 +662,21 @@ It is also possbile to bypass token retrievals by passing an explicit token to t
624662
s = sdk.SDK(oauth2="THE_TOKEN")
625663
626664
res = s.list_products()`,
665+
},
666+
{
667+
label: "Ruby",
668+
language: "ruby",
669+
code: `require 'speakeasy'
670+
671+
s = ::Speakeasy::SDK.new(
672+
oauth2: '<YOUR_ACCESS_TOKEN>',
673+
)
674+
675+
res = s.drinks.list_drinks
676+
677+
if !res.drinks.nil?
678+
# handle response
679+
end`,
627680
}
628681
]}
629682
/>

β€Ždocs/sdks/sdk-contract-testing.mdxβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { Callout } from "@/mdx/components";
99

1010
<Callout title="Beta" type="warning">
1111

12-
SDK contract testing features are considered `beta` maturity. Breaking changes may occur and not all languages are yet supported. Currently SDK testing is supported for TypeScript, Python, Go, Java, and Ruby.
12+
SDK contract testing features are considered `beta` maturity. Breaking changes may occur and not all languages are yet supported. Currently SDK testing is supported for TypeScript, Python, Go, Java, Ruby, and C#.
1313

1414
</Callout>
1515

β€Ždocs/sdks/sdk-contract-testing/bootstrapping-test-generation.mdxβ€Ž

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ Generated test files are written in language-specific locations, relative to the
9595
{ language: "TypeScript", location: "`src/__tests__`" },
9696
{ language: "Java", location: "`src/test/java`" },
9797
{ language: "Ruby", location: "`test/`" },
98+
{ language: "C#", location: "`Tests/`" },
9899
]}
99100
columns={[
100101
{ key: "language", header: "Language" },

β€Ždocs/sdks/sdk-contract-testing/custom-contract-tests.mdxβ€Ž

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,139 @@ The workflow generates the test shown below:
578578
579579
end
580580
end`,
581+
},
582+
{
583+
label: "C#",
584+
language: "csharp",
585+
code: `// Tests/SDKTests.cs
586+
587+
using Openapi;
588+
using Openapi.Models.Components;
589+
using Openapi.Utils;
590+
using Newtonsoft.Json;
591+
using System;
592+
using System.Collections.Generic;
593+
using System.Linq;
594+
using System.Net;
595+
using System.Numerics;
596+
using System.Threading.Tasks;
597+
using Xunit;
598+
599+
public class SDKTests
600+
{
601+
[Fact]
602+
public async Task TestSDK_UserLifecycle()
603+
{
604+
var testHttpClient = CommonHelpers.CreateTestHTTPClient("user-lifecycle");
605+
var sdk = new SDK(
606+
serverUrl: Environment.GetEnvironmentVariable("TEST_SERVER_URL") ?? "http://localhost:18080",
607+
client: testHttpClient
608+
);
609+
610+
var createRes = await sdk.CreateUserAsync(new BaseUser() {
611+
Email = "Trystan_Crooks@hotmail.com",
612+
FirstName = "Trystan",
613+
LastName = "Crooks",
614+
Age = 32D,
615+
PostalCode = "94110",
616+
Metadata = new Metadata() {
617+
Allergies = "none",
618+
AdditionalProperties = new Dictionary<string, string>() {
619+
{ "color", "red" },
620+
{ "height", "182" },
621+
{ "weight", "77" },
622+
{ "is_smoking", "true" },
623+
},
624+
},
625+
});
626+
Assert.Equal(200, (int)createRes.HttpMeta.Response.StatusCode);
627+
Assert.Equal(
628+
CommonHelpers.NormalizeDateTimeStrings("Trystan_Crooks@hotmail.com"),
629+
CommonHelpers.NormalizeDateTimeStrings(createRes.User.Email));
630+
Assert.NotNull(createRes.User.PostalCode);
631+
Assert.Equal(
632+
CommonHelpers.NormalizeDateTimeStrings("94110"),
633+
CommonHelpers.NormalizeDateTimeStrings(createRes.User.PostalCode));
634+
635+
var getRes = await sdk.GetUserAsync(id: createRes.User.Id);
636+
Assert.Equal(200, (int)getRes.HttpMeta.Response.StatusCode);
637+
Assert.Equal(
638+
CommonHelpers.NormalizeDateTimeStrings("Trystan_Crooks@hotmail.com"),
639+
CommonHelpers.NormalizeDateTimeStrings(getRes.User.Email));
640+
Assert.NotNull(getRes.User.FirstName);
641+
Assert.Equal(
642+
CommonHelpers.NormalizeDateTimeStrings("Trystan"),
643+
CommonHelpers.NormalizeDateTimeStrings(getRes.User.FirstName));
644+
Assert.NotNull(getRes.User.LastName);
645+
Assert.Equal(
646+
CommonHelpers.NormalizeDateTimeStrings("Crooks"),
647+
CommonHelpers.NormalizeDateTimeStrings(getRes.User.LastName));
648+
Assert.NotNull(getRes.User.Age);
649+
Assert.Equal(32D, getRes.User.Age);
650+
Assert.NotNull(getRes.User.PostalCode);
651+
Assert.Equal(
652+
CommonHelpers.NormalizeDateTimeStrings("94110"),
653+
CommonHelpers.NormalizeDateTimeStrings(getRes.User.PostalCode));
654+
655+
var user = getRes.User;
656+
user.PostalCode = "94107";
657+
user.Age = getRes.User.Age;
658+
659+
var updateRes = await sdk.UpdateUserAsync(id: createRes.User.Id, user: user);
660+
Assert.Equal(200, (int)updateRes.HttpMeta.Response.StatusCode);
661+
Assert.Equal(
662+
CommonHelpers.NormalizeDateTimeStrings("Trystan_Crooks@hotmail.com"),
663+
CommonHelpers.NormalizeDateTimeStrings(updateRes.User.Email));
664+
Assert.NotNull(updateRes.User.FirstName);
665+
Assert.Equal(
666+
CommonHelpers.NormalizeDateTimeStrings("Trystan"),
667+
CommonHelpers.NormalizeDateTimeStrings(updateRes.User.FirstName));
668+
Assert.NotNull(updateRes.User.LastName);
669+
Assert.Equal(
670+
CommonHelpers.NormalizeDateTimeStrings("Crooks"),
671+
CommonHelpers.NormalizeDateTimeStrings(updateRes.User.LastName));
672+
Assert.NotNull(updateRes.User.Age);
673+
Assert.Equal(32D, updateRes.User.Age);
674+
Assert.NotNull(updateRes.User.PostalCode);
675+
Assert.Equal(
676+
CommonHelpers.NormalizeDateTimeStrings("94107"),
677+
CommonHelpers.NormalizeDateTimeStrings(updateRes.User.PostalCode));
678+
679+
var updateAgainRes = await sdk.UpdateUserAsync(
680+
id: createRes.User.Id,
681+
user: new User() {
682+
Id = createRes.User.Id,
683+
Email = updateRes.User.Email,
684+
FirstName = updateRes.User.FirstName,
685+
LastName = updateRes.User.LastName,
686+
Age = 33D,
687+
PostalCode = "94110",
688+
Metadata = updateRes.User.Metadata,
689+
}
690+
);
691+
Assert.Equal(200, (int)updateAgainRes.HttpMeta.Response.StatusCode);
692+
Assert.Equal(
693+
CommonHelpers.NormalizeDateTimeStrings("Trystan_Crooks@hotmail.com"),
694+
CommonHelpers.NormalizeDateTimeStrings(updateAgainRes.User.Email));
695+
Assert.NotNull(updateAgainRes.User.FirstName);
696+
Assert.Equal(
697+
CommonHelpers.NormalizeDateTimeStrings("Trystan"),
698+
CommonHelpers.NormalizeDateTimeStrings(updateAgainRes.User.FirstName));
699+
Assert.NotNull(updateAgainRes.User.LastName);
700+
Assert.Equal(
701+
CommonHelpers.NormalizeDateTimeStrings("Crooks"),
702+
CommonHelpers.NormalizeDateTimeStrings(updateAgainRes.User.LastName));
703+
Assert.NotNull(updateAgainRes.User.Age);
704+
Assert.Equal(33D, updateAgainRes.User.Age);
705+
Assert.NotNull(updateAgainRes.User.PostalCode);
706+
Assert.Equal(
707+
CommonHelpers.NormalizeDateTimeStrings("94110"),
708+
CommonHelpers.NormalizeDateTimeStrings(updateAgainRes.User.PostalCode));
709+
710+
var deleteRes = await sdk.DeleteUserAsync(id: createRes.User.Id);
711+
Assert.Equal(200, (int)deleteRes.HttpMeta.Response.StatusCode);
712+
}
713+
}`,
581714
}
582715
]}
583716
/>

β€Ždocs/sdks/sdk-contract-testing/customizing-sdk-tests.mdxβ€Ž

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,14 @@ workflows:
7373

7474
## Grouping tests
7575

76-
By default, all tests will be generated into a single file related to the main SDK class for example `sdk.test.ts`, `test_sdk.py`, `SDKTest.java`, or `test_sdk.rb`. This can be configured by adding a `x-speakeasy-test-group` extension to the workflow which will determine which tests will be grouped together in seperate test files.
76+
By default, all tests will be generated into a single file related to the main SDK class for example `sdk.test.ts`, `test_sdk.py`, `SDKTest.java`, `test_sdk.rb`, or `SDKTests.cs`. This can be configured by adding a `x-speakeasy-test-group` extension to the workflow which will determine which tests will be grouped together in seperate test files.
7777

7878
```yaml
7979
arazzo: 1.0.0
8080
# ...
8181
workflows:
8282
- workflowId: some-test
83-
x-speakeasy-test-group: user # All tests in the user group will end up in the `user.test.ts`/`test_user.py`/`user_test.go`/`test_user.rb` files
83+
x-speakeasy-test-group: user # All tests in the user group will end up in the `user.test.ts`/`test_user.py`/`user_test.go`/`test_user.rb`/`UserTests.cs` files
8484
# ...
8585
```
8686

0 commit comments

Comments
Β (0)