Skip to content

Commit 1dacfec

Browse files
authored
Merge pull request #521 from hookdeck/feat/sdk-api-spec-tests
feat: sdk api spec tests
2 parents 1d9027d + 01c451d commit 1dacfec

File tree

97 files changed

+7734
-110
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

97 files changed

+7734
-110
lines changed

.plans/spec-sdk-tests/01-ci-cd-integration.md

Lines changed: 512 additions & 0 deletions
Large diffs are not rendered by default.

.plans/spec-sdk-tests/02-coverage-reporting.md

Lines changed: 732 additions & 0 deletions
Large diffs are not rendered by default.

.plans/spec-sdk-tests/03-contributing-docs.md

Lines changed: 408 additions & 0 deletions
Large diffs are not rendered by default.

.plans/spec-sdk-tests/04-implementation-order.md

Lines changed: 475 additions & 0 deletions
Large diffs are not rendered by default.

.plans/spec-sdk-tests/README.md

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# OpenAPI Validation Test Suite - Implementation Plans
2+
3+
This directory contains detailed planning documents for the next phases of the OpenAPI validation test suite project.
4+
5+
## Current State (Completed)
6+
7+
-**Test Suite**: 147 comprehensive tests across 8 destination types
8+
-**Test Results**: 129 passing tests (87.8% pass rate)
9+
-**Coverage**: All destination types tested (Webhook, AWS SQS, RabbitMQ, Azure Service Bus, AWS S3, Hookdeck, AWS Kinesis, GCP Pub/Sub)
10+
-**Documentation**: `TEST_STATUS.md` with detailed results and analysis
11+
-**Issue Tracking**: 3 GitHub issues created for backend improvements
12+
-**Test Infrastructure**: Factory pattern, SDK client utilities, comprehensive test suite
13+
14+
## Next Phases
15+
16+
This plan directory outlines the roadmap for enhancing the test suite with production-ready features:
17+
18+
### 1. [CI/CD Integration](./01-ci-cd-integration.md)
19+
Automate test execution in GitHub Actions to ensure continuous validation of API endpoints against the OpenAPI specification.
20+
21+
**Key Outcomes:**
22+
- Automated test runs on PRs and commits
23+
- Docker-based test environment
24+
- Test status badges
25+
- Failure notifications
26+
27+
### 2. [Coverage Reporting](./02-coverage-reporting.md)
28+
Track and visualize which OpenAPI endpoints are tested, identify gaps, and enforce coverage thresholds.
29+
30+
**Key Outcomes:**
31+
- Automated coverage reports
32+
- Visual coverage dashboards
33+
- Coverage trend tracking
34+
- Minimum coverage enforcement
35+
36+
### 3. [Contributing Documentation](./03-contributing-docs.md)
37+
Provide clear guidelines for developers to add new tests and understand the testing architecture.
38+
39+
**Key Outcomes:**
40+
- Updated CONTRIBUTING.md
41+
- Test development guide
42+
- Factory pattern documentation
43+
- Development workflow examples
44+
45+
### 4. [Implementation Order](./04-implementation-order.md)
46+
Recommended sequence for implementing the above phases with effort estimates and success criteria.
47+
48+
**Key Outcomes:**
49+
- Prioritized roadmap
50+
- Dependency mapping
51+
- Effort estimates
52+
- Success metrics
53+
54+
## Plan Structure
55+
56+
Each planning document follows this structure:
57+
58+
1. **Overview** - Purpose and goals
59+
2. **Requirements** - Specific needs and constraints
60+
3. **Technical Approach** - Implementation details
61+
4. **Examples** - Code snippets and configurations
62+
5. **Acceptance Criteria** - Definition of done
63+
6. **Dependencies** - Related systems and prerequisites
64+
7. **Risks & Considerations** - Potential challenges
65+
66+
## How to Use These Plans
67+
68+
1. **Review** - Read through each plan to understand the scope
69+
2. **Prioritize** - Use `04-implementation-order.md` to sequence work
70+
3. **Implement** - Follow the technical approaches and examples
71+
4. **Validate** - Check against acceptance criteria
72+
5. **Iterate** - Update plans based on learnings
73+
74+
## Related Documentation
75+
76+
- [`/spec-sdk-tests/README.md`](../../spec-sdk-tests/README.md) - Test suite documentation
77+
- [`/spec-sdk-tests/TEST_STATUS.md`](../../spec-sdk-tests/TEST_STATUS.md) - Current test results
78+
- [`/docs/apis/openapi.yaml`](../../docs/apis/openapi.yaml) - OpenAPI specification
79+
- [`/CONTRIBUTING.md`](../../CONTRIBUTING.md) - General contribution guidelines
80+
81+
## Feedback and Updates
82+
83+
These plans are living documents. As implementation progresses:
84+
85+
- Update plans with new learnings
86+
- Add implementation notes
87+
- Document deviations from original plan
88+
- Capture best practices discovered
89+
90+
---
91+
92+
**Last Updated**: 2025-10-12
93+
**Status**: Ready for implementation
94+
**Owner**: Engineering Team

.speakeasy/workflow.lock

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
speakeasyVersion: 1.609.0
1+
speakeasyVersion: 1.636.3
22
sources:
33
Outpost API:
44
sourceNamespace: outpost-api
5-
sourceRevisionDigest: sha256:e09cf02de047cf6d007545274c477e2a90c561074b9de170d844d9ab9ffbbca6
6-
sourceBlobDigest: sha256:c405cfc4f2de092323a9dd68a09f7c08b563d363bce7463fc8b426d10acacf99
5+
sourceRevisionDigest: sha256:2fd0f3a228f7804a077a738eea8bdd8d0238c799b5d0c699113ab5b982c9c3f4
6+
sourceBlobDigest: sha256:84ea2c33aa27fd52d26243b2be5d1acdafc8b7c3c737f678cffdc62bbcac8c58
77
tags:
88
- latest
9-
- speakeasy-sdk-regen-1756922597
109
- 0.0.1
1110
targets:
1211
outpost-go:
@@ -26,10 +25,10 @@ targets:
2625
outpost-ts:
2726
source: Outpost API
2827
sourceNamespace: outpost-api
29-
sourceRevisionDigest: sha256:e09cf02de047cf6d007545274c477e2a90c561074b9de170d844d9ab9ffbbca6
30-
sourceBlobDigest: sha256:c405cfc4f2de092323a9dd68a09f7c08b563d363bce7463fc8b426d10acacf99
28+
sourceRevisionDigest: sha256:2fd0f3a228f7804a077a738eea8bdd8d0238c799b5d0c699113ab5b982c9c3f4
29+
sourceBlobDigest: sha256:84ea2c33aa27fd52d26243b2be5d1acdafc8b7c3c737f678cffdc62bbcac8c58
3130
codeSamplesNamespace: outpost-api-typescript-code-samples
32-
codeSamplesRevisionDigest: sha256:b1155400f3addb67547999bf99f4eb4f009470ab62329d57488f78843ff6f9b6
31+
codeSamplesRevisionDigest: sha256:d4eca43f53a3683f444aa9e98cc59cee0fbe9bfc00696753e1f9587b0955f9ab
3332
workflow:
3433
workflowVersion: 1.0.0
3534
speakeasyVersion: latest

docs/apis/openapi.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ components:
263263
key_template:
264264
type: string
265265
description: JMESPath expression for generating S3 object keys. Default is join('', [time.rfc3339_nano, '_', metadata."event-id", '.json']).
266-
example: "join('/', [time.year, time.month, time.day, metadata.\"event-id\", '.json'])"
266+
example: 'join(''/'', [time.year, time.month, time.day, metadata."event-id", ''.json''])'
267267
storage_class:
268268
type: string
269269
description: The storage class for the S3 objects (e.g., STANDARD, INTELLIGENT_TIERING, GLACIER, etc.). Defaults to "STANDARD".

sdks/outpost-typescript/.speakeasy/gen.lock

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
lockVersion: 2.0.0
22
id: edb58086-83b9-45a3-9095-52bf57a11009
33
management:
4-
docChecksum: f88900fa0dfdee97044181ff0fbb5027
4+
docChecksum: 5ba70e6fd5c38bf6938a020a3ee4e211
55
docVersion: 0.0.1
6-
speakeasyVersion: 1.609.0
7-
generationVersion: 2.692.0
8-
releaseVersion: 0.4.0
9-
configChecksum: 261fce5d39cf94a38cacbbd5e21d37f2
6+
speakeasyVersion: 1.636.3
7+
generationVersion: 2.723.11
8+
releaseVersion: 0.5.1
9+
configChecksum: f68ee8655bbd6462d87583a682258f8b
1010
repoURL: https://github.com/hookdeck/outpost.git
1111
repoSubDirectory: sdks/outpost-typescript
1212
installationURL: https://gitpkg.now.sh/hookdeck/outpost/sdks/outpost-typescript
@@ -16,11 +16,11 @@ features:
1616
additionalDependencies: 0.1.0
1717
additionalProperties: 0.1.1
1818
constsAndDefaults: 0.1.12
19-
core: 3.21.22
19+
core: 3.21.26
2020
defaultEnabledRetries: 0.1.0
2121
enumUnions: 0.1.0
2222
envVarSecurityUsage: 0.1.2
23-
globalSecurity: 2.82.13
23+
globalSecurity: 2.82.14
2424
globalSecurityCallbacks: 0.1.0
2525
globalServerURLs: 2.82.5
2626
globals: 2.82.2
@@ -31,7 +31,7 @@ features:
3131
responseFormat: 0.2.3
3232
retries: 2.83.0
3333
sdkHooks: 0.3.0
34-
unions: 2.85.11
34+
unions: 2.86.0
3535
generatedFiles:
3636
- .gitattributes
3737
- .npmignore
@@ -66,12 +66,16 @@ generatedFiles:
6666
- docs/models/components/destinationcreateawssqstype.md
6767
- docs/models/components/destinationcreateazureservicebus.md
6868
- docs/models/components/destinationcreateazureservicebustype.md
69+
- docs/models/components/destinationcreategcppubsub.md
70+
- docs/models/components/destinationcreategcppubsubtype.md
6971
- docs/models/components/destinationcreatehookdeck.md
7072
- docs/models/components/destinationcreatehookdecktype.md
7173
- docs/models/components/destinationcreaterabbitmq.md
7274
- docs/models/components/destinationcreaterabbitmqtype.md
7375
- docs/models/components/destinationcreatewebhook.md
7476
- docs/models/components/destinationcreatewebhooktype.md
77+
- docs/models/components/destinationgcppubsub.md
78+
- docs/models/components/destinationgcppubsubtype.md
7579
- docs/models/components/destinationhookdeck.md
7680
- docs/models/components/destinationhookdecktype.md
7781
- docs/models/components/destinationrabbitmq.md
@@ -83,12 +87,15 @@ generatedFiles:
8387
- docs/models/components/destinationupdateawskinesis.md
8488
- docs/models/components/destinationupdateawss3.md
8589
- docs/models/components/destinationupdateawssqs.md
90+
- docs/models/components/destinationupdategcppubsub.md
8691
- docs/models/components/destinationupdatehookdeck.md
8792
- docs/models/components/destinationupdaterabbitmq.md
8893
- docs/models/components/destinationupdatewebhook.md
8994
- docs/models/components/destinationwebhook.md
9095
- docs/models/components/destinationwebhooktype.md
9196
- docs/models/components/event.md
97+
- docs/models/components/gcppubsubconfig.md
98+
- docs/models/components/gcppubsubcredentials.md
9299
- docs/models/components/hookdeckcredentials.md
93100
- docs/models/components/portalredirect.md
94101
- docs/models/components/publishrequest.md
@@ -173,7 +180,6 @@ generatedFiles:
173180
- docs/sdks/destinations/README.md
174181
- docs/sdks/events/README.md
175182
- docs/sdks/health/README.md
176-
- docs/sdks/outpost/README.md
177183
- docs/sdks/publish/README.md
178184
- docs/sdks/schemas/README.md
179185
- docs/sdks/tenants/README.md
@@ -289,9 +295,11 @@ generatedFiles:
289295
- src/models/components/destinationcreateawss3.ts
290296
- src/models/components/destinationcreateawssqs.ts
291297
- src/models/components/destinationcreateazureservicebus.ts
298+
- src/models/components/destinationcreategcppubsub.ts
292299
- src/models/components/destinationcreatehookdeck.ts
293300
- src/models/components/destinationcreaterabbitmq.ts
294301
- src/models/components/destinationcreatewebhook.ts
302+
- src/models/components/destinationgcppubsub.ts
295303
- src/models/components/destinationhookdeck.ts
296304
- src/models/components/destinationrabbitmq.ts
297305
- src/models/components/destinationschemafield.ts
@@ -300,11 +308,14 @@ generatedFiles:
300308
- src/models/components/destinationupdateawskinesis.ts
301309
- src/models/components/destinationupdateawss3.ts
302310
- src/models/components/destinationupdateawssqs.ts
311+
- src/models/components/destinationupdategcppubsub.ts
303312
- src/models/components/destinationupdatehookdeck.ts
304313
- src/models/components/destinationupdaterabbitmq.ts
305314
- src/models/components/destinationupdatewebhook.ts
306315
- src/models/components/destinationwebhook.ts
307316
- src/models/components/event.ts
317+
- src/models/components/gcppubsubconfig.ts
318+
- src/models/components/gcppubsubcredentials.ts
308319
- src/models/components/hookdeckcredentials.ts
309320
- src/models/components/index.ts
310321
- src/models/components/portalredirect.ts
@@ -654,4 +665,3 @@ examples:
654665
application/json: {}
655666
examplesVersion: 1.0.2
656667
generatedTests: {}
657-
releaseNotes: "## Typescript SDK Changes Detected:\n* `outpost.events.list()`: \n * `request` **Changed**\n * `response` **Changed** **Breaking** :warning:\n* `outpost.events.listByDestination()`: \n * `request` **Changed**\n * `response` **Changed** **Breaking** :warning:\n* `outpost.destinations.list()`: \n * `request.type` **Changed**\n * `response.[].[awsS3]` **Added**\n* `outpost.destinations.create()`: \n * `request.destinationCreate.[awsS3]` **Added**\n * `response.[aws_s3]` **Added**\n* `outpost.destinations.get()`: `response.[aws_s3]` **Added**\n* `outpost.destinations.update()`: \n * `request.destinationUpdate.[destinationUpdateAwss3]` **Added**\n * `response.[destination].[awsS3]` **Added**\n* `outpost.destinations.enable()`: `response.[aws_s3]` **Added**\n* `outpost.destinations.disable()`: `response.[aws_s3]` **Added**\n* `outpost.schemas.get()`: \n * `request.type` **Changed**\n* `outpost.schemas.getDestinationTypeJwt()`: \n * `request.type` **Changed**\n"

sdks/outpost-typescript/.speakeasy/gen.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@ generation:
1616
auth:
1717
oAuth2ClientCredentialsEnabled: true
1818
oAuth2PasswordEnabled: true
19+
hoistGlobalSecurity: true
1920
tests:
2021
generateTests: true
2122
generateNewTests: false
2223
skipResponseBodyAssertions: false
2324
typescript:
24-
version: 0.4.0
25+
version: 0.5.1
26+
acceptHeaderEnum: true
2527
additionalDependencies:
2628
dependencies: {}
2729
devDependencies: {}
@@ -51,10 +53,12 @@ typescript:
5153
jsonpath: rfc9535
5254
maxMethodParams: 0
5355
methodArguments: require-security-and-request
56+
modelPropertyCasing: camel
5457
moduleFormat: dual
5558
outputModelSuffix: output
5659
packageName: '@hookdeck/outpost-sdk'
5760
responseFormat: flat
61+
sseFlatResponse: false
5862
templateVersion: v2
5963
usageSDKInitImports: []
6064
useIndexModules: true

sdks/outpost-typescript/README.md

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,7 @@ bun add @hookdeck/outpost-sdk
6464
### Yarn
6565

6666
```bash
67-
yarn add @hookdeck/outpost-sdk zod
68-
69-
# Note that Yarn does not install peer dependencies automatically. You will need
70-
# to install zod as shown above.
67+
yarn add @hookdeck/outpost-sdk
7168
```
7269

7370
> [!NOTE]
@@ -251,7 +248,6 @@ run();
251248

252249
* [check](docs/sdks/health/README.md#check) - Health Check
253250

254-
255251
### [publish](docs/sdks/publish/README.md)
256252

257253
* [event](docs/sdks/publish/README.md#event) - Publish Event
@@ -602,7 +598,7 @@ httpClient.addHook("requestError", (error, request) => {
602598
console.groupEnd();
603599
});
604600

605-
const sdk = new Outpost({ httpClient });
601+
const sdk = new Outpost({ httpClient: httpClient });
606602
```
607603
<!-- End Custom HTTP Client [http-client] -->
608604

0 commit comments

Comments
 (0)