@toa.io/extensions.exposition 1.0.0-alpha.4 → 1.0.0-alpha.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/context.toa.yaml +2 -2
- package/components/identity.bans/manifest.toa.yaml +15 -7
- package/components/identity.bans/operations/transit.d.ts +14 -0
- package/components/identity.bans/operations/transit.js +11 -0
- package/components/identity.bans/operations/transit.js.map +1 -0
- package/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.bans/source/transit.ts +21 -0
- package/components/identity.bans/tsconfig.json +9 -0
- package/components/identity.basic/manifest.toa.yaml +22 -9
- package/components/identity.basic/operations/authenticate.d.ts +5 -1
- package/components/identity.basic/operations/authenticate.js +5 -2
- package/components/identity.basic/operations/authenticate.js.map +1 -1
- package/components/identity.basic/operations/incept.d.ts +12 -0
- package/components/identity.basic/operations/incept.js +26 -0
- package/components/identity.basic/operations/incept.js.map +1 -0
- package/components/identity.basic/operations/transit.d.ts +4 -4
- package/components/identity.basic/operations/transit.js +5 -3
- package/components/identity.basic/operations/transit.js.map +1 -1
- package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.basic/operations/types.d.ts +8 -4
- package/components/identity.basic/source/authenticate.ts +16 -5
- package/components/identity.basic/source/incept.ts +38 -0
- package/components/identity.basic/source/transit.ts +8 -6
- package/components/identity.basic/source/types.ts +8 -4
- package/components/identity.federation/manifest.toa.yaml +28 -22
- package/components/identity.federation/operations/authenticate.d.ts +2 -2
- package/components/identity.federation/operations/authenticate.js +3 -10
- package/components/identity.federation/operations/authenticate.js.map +1 -1
- package/components/identity.federation/operations/incept.d.ts +11 -0
- package/components/identity.federation/operations/{create.js → incept.js} +6 -7
- package/components/identity.federation/operations/incept.js.map +1 -0
- package/components/identity.federation/operations/lib/jwt.d.ts +4 -5
- package/components/identity.federation/operations/lib/jwt.js +3 -3
- package/components/identity.federation/operations/lib/jwt.js.map +1 -1
- package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.federation/operations/types/configuration.d.ts +14 -0
- package/components/identity.federation/operations/types/configuration.js +3 -0
- package/components/identity.federation/operations/types/configuration.js.map +1 -0
- package/components/identity.federation/operations/{types.d.ts → types/context.d.ts} +13 -6
- package/components/identity.federation/operations/types/context.js +3 -0
- package/components/identity.federation/operations/types/context.js.map +1 -0
- package/components/identity.federation/operations/types/entity.d.ts +6 -0
- package/components/identity.federation/operations/{types.js → types/entity.js} +1 -1
- package/components/identity.federation/operations/types/entity.js.map +1 -0
- package/components/identity.federation/operations/types/index.d.ts +3 -0
- package/components/identity.federation/operations/types/index.js +20 -0
- package/components/identity.federation/operations/types/index.js.map +1 -0
- package/components/identity.federation/source/authenticate.ts +5 -18
- package/components/identity.federation/source/{create.ts → incept.ts} +10 -9
- package/components/identity.federation/source/lib/jwt.test.ts +2 -2
- package/components/identity.federation/source/lib/jwt.ts +7 -8
- package/components/identity.federation/source/types/configuration.ts +15 -0
- package/components/identity.federation/source/{types.ts → types/context.ts} +15 -5
- package/components/identity.federation/source/types/entity.ts +6 -0
- package/components/identity.federation/source/types/index.ts +3 -0
- package/components/identity.federation/tsconfig.json +2 -2
- package/components/identity.roles/manifest.toa.yaml +18 -6
- package/components/identity.roles/operations/grant.d.ts +10 -0
- package/components/identity.roles/operations/grant.js +21 -0
- package/components/identity.roles/operations/grant.js.map +1 -0
- package/components/identity.roles/operations/lib/Entity.d.ts +5 -0
- package/components/identity.roles/operations/lib/Entity.js +3 -0
- package/components/identity.roles/operations/lib/Entity.js.map +1 -0
- package/components/identity.roles/operations/list.d.ts +1 -4
- package/components/identity.roles/operations/list.js.map +1 -1
- package/components/identity.roles/operations/principal.d.ts +4 -6
- package/components/identity.roles/operations/principal.js +6 -1
- package/components/identity.roles/operations/principal.js.map +1 -1
- package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.roles/source/grant.ts +32 -0
- package/components/identity.roles/source/lib/Entity.ts +5 -0
- package/components/identity.roles/source/list.ts +2 -4
- package/components/identity.roles/source/principal.ts +10 -8
- package/components/identity.tokens/manifest.toa.yaml +19 -5
- package/components/identity.tokens/operations/authenticate.d.ts +2 -2
- package/components/identity.tokens/operations/authenticate.js +10 -4
- package/components/identity.tokens/operations/authenticate.js.map +1 -1
- package/components/identity.tokens/operations/decrypt.js +1 -0
- package/components/identity.tokens/operations/decrypt.js.map +1 -1
- package/components/identity.tokens/operations/encrypt.js +5 -1
- package/components/identity.tokens/operations/encrypt.js.map +1 -1
- package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.tokens/operations/types.d.ts +8 -2
- package/components/identity.tokens/receivers/identity.bans.created.js +3 -0
- package/components/identity.tokens/source/authenticate.test.ts +11 -4
- package/components/identity.tokens/source/authenticate.ts +12 -5
- package/components/identity.tokens/source/decrypt.test.ts +5 -3
- package/components/identity.tokens/source/decrypt.ts +9 -8
- package/components/identity.tokens/source/encrypt.test.ts +26 -2
- package/components/identity.tokens/source/encrypt.ts +5 -1
- package/components/identity.tokens/source/types.ts +9 -2
- package/components/octets.storage/manifest.toa.yaml +0 -7
- package/documentation/access.md +27 -16
- package/documentation/authorities.md +53 -0
- package/documentation/cache.md +8 -1
- package/documentation/components.md +47 -22
- package/documentation/identity.md +17 -22
- package/documentation/io.md +56 -0
- package/documentation/protocol.md +3 -0
- package/documentation/query.md +17 -11
- package/documentation/require.md +15 -0
- package/documentation/tree.md +22 -4
- package/documentation/vary.md +14 -14
- package/features/access.feature +89 -47
- package/features/annotation.feature +2 -0
- package/features/authorities.basic.feature +141 -0
- package/features/authorities.feature +32 -0
- package/features/authorities.federation.feature +99 -0
- package/features/authorities.tokens.feature +118 -0
- package/features/body.feature +4 -0
- package/features/cache.feature +112 -5
- package/features/cors.feature +7 -2
- package/features/debug.feature +34 -0
- package/features/directives.feature +5 -0
- package/features/dynamic.feature +18 -7
- package/features/errors.feature +18 -4
- package/features/etag.feature +18 -1
- package/features/identity.bans.feature +137 -0
- package/features/identity.basic.feature +142 -19
- package/features/identity.feature +7 -2
- package/features/identity.federation.feature +67 -14
- package/features/identity.roles.feature +220 -4
- package/features/identity.tokens.feature +57 -4
- package/features/io.feature +205 -0
- package/features/octets.entries.feature +10 -0
- package/features/octets.feature +60 -64
- package/features/octets.meta.feature +7 -3
- package/features/octets.workflows.feature +14 -0
- package/features/probes.feature +14 -0
- package/features/{queries.feature → query.feature} +50 -3
- package/features/require.feature +67 -0
- package/features/response.feature +12 -3
- package/features/routes.feature +25 -12
- package/features/steps/Database.ts +17 -10
- package/features/steps/Gateway.ts +23 -6
- package/features/steps/IdP.ts +28 -23
- package/features/steps/components/echo/manifest.toa.yaml +5 -1
- package/features/steps/components/echo/operations/identity.js +7 -0
- package/features/steps/components/pots/manifest.toa.yaml +2 -0
- package/features/steps/components/users.properties/manifest.toa.yaml +2 -1
- package/features/streams.feature +1 -0
- package/features/timing.feature +27 -1
- package/features/vary.feature +105 -3
- package/package.json +12 -11
- package/readme.md +19 -14
- package/schemas/annotation.cos.yaml +1 -1
- package/schemas/io/input.cos.yaml +3 -0
- package/schemas/io/message.cos.yaml +5 -0
- package/schemas/io/output.cos.yaml +5 -0
- package/source/Annotation.ts +3 -3
- package/source/Context.ts +6 -4
- package/source/Directive.test.ts +4 -4
- package/source/Directive.ts +11 -38
- package/source/Endpoint.ts +43 -8
- package/source/Factory.ts +11 -7
- package/source/Gateway.ts +16 -44
- package/source/HTTP/Context.ts +24 -2
- package/source/HTTP/Server.ts +56 -43
- package/source/HTTP/exceptions.ts +7 -1
- package/source/HTTP/messages.test.ts +38 -2
- package/source/HTTP/messages.ts +7 -3
- package/source/Mapping.ts +6 -1
- package/source/Query.test.ts +1 -1
- package/source/Query.ts +35 -24
- package/source/RTD/Context.ts +7 -10
- package/source/RTD/Directives.ts +28 -4
- package/source/RTD/Endpoint.ts +6 -4
- package/source/RTD/Match.ts +2 -7
- package/source/RTD/Method.ts +7 -13
- package/source/RTD/Node.ts +13 -14
- package/source/RTD/Tree.ts +17 -16
- package/source/RTD/factory.ts +3 -6
- package/source/Tenant.ts +0 -8
- package/source/deployment.ts +32 -22
- package/source/directives/auth/Authorization.ts +38 -19
- package/source/directives/auth/Delegate.ts +42 -0
- package/source/directives/auth/Incept.ts +3 -2
- package/source/directives/auth/Role.test.ts +53 -6
- package/source/directives/auth/Role.ts +22 -14
- package/source/directives/auth/types.ts +1 -1
- package/source/directives/cache/Cache.ts +15 -8
- package/source/directives/cache/Control.ts +42 -16
- package/source/directives/cors/CORS.ts +13 -7
- package/source/directives/dev/Development.ts +4 -4
- package/source/directives/index.ts +6 -4
- package/source/directives/io/Directive.ts +11 -0
- package/source/directives/io/IO.ts +43 -0
- package/source/directives/io/Input.ts +50 -0
- package/source/directives/io/Message.ts +1 -0
- package/source/directives/io/Output.ts +69 -0
- package/source/directives/io/index.ts +3 -0
- package/source/directives/io/schemas.ts +12 -0
- package/source/directives/octets/Context.ts +4 -3
- package/source/directives/octets/Delete.ts +4 -2
- package/source/directives/octets/Directive.ts +10 -0
- package/source/directives/octets/Fetch.ts +4 -3
- package/source/directives/octets/List.ts +4 -2
- package/source/directives/octets/Octets.ts +6 -8
- package/source/directives/octets/Store.ts +12 -4
- package/source/directives/octets/Workflow.ts +10 -3
- package/source/directives/octets/types.ts +0 -7
- package/source/directives/require/Directive.ts +5 -0
- package/source/directives/require/Headers.ts +20 -0
- package/source/directives/require/Require.ts +28 -0
- package/source/directives/require/index.ts +3 -0
- package/source/directives/vary/Directive.ts +2 -1
- package/source/directives/vary/Embed.ts +14 -8
- package/source/directives/vary/Vary.ts +7 -5
- package/source/directives/vary/embeddings/Authority.ts +8 -0
- package/source/directives/vary/embeddings/Embedding.ts +2 -1
- package/source/directives/vary/embeddings/Header.ts +8 -6
- package/source/directives/vary/embeddings/Language.ts +1 -1
- package/source/directives/vary/embeddings/Parameter.ts +14 -0
- package/source/directives/vary/embeddings/index.ts +6 -4
- package/source/exceptions.ts +22 -11
- package/source/root.ts +5 -0
- package/source/schemas.ts +1 -1
- package/transpiled/Annotation.d.ts +3 -3
- package/transpiled/Context.d.ts +6 -4
- package/transpiled/Directive.d.ts +4 -17
- package/transpiled/Directive.js +4 -7
- package/transpiled/Directive.js.map +1 -1
- package/transpiled/Endpoint.d.ts +5 -3
- package/transpiled/Endpoint.js +30 -5
- package/transpiled/Endpoint.js.map +1 -1
- package/transpiled/Factory.js +9 -4
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Gateway.d.ts +1 -4
- package/transpiled/Gateway.js +10 -26
- package/transpiled/Gateway.js.map +1 -1
- package/transpiled/HTTP/Context.d.ts +8 -1
- package/transpiled/HTTP/Context.js +15 -2
- package/transpiled/HTTP/Context.js.map +1 -1
- package/transpiled/HTTP/Server.d.ts +13 -2
- package/transpiled/HTTP/Server.js +41 -35
- package/transpiled/HTTP/Server.js.map +1 -1
- package/transpiled/HTTP/exceptions.d.ts +4 -1
- package/transpiled/HTTP/exceptions.js +7 -1
- package/transpiled/HTTP/exceptions.js.map +1 -1
- package/transpiled/HTTP/messages.d.ts +1 -0
- package/transpiled/HTTP/messages.js +9 -3
- package/transpiled/HTTP/messages.js.map +1 -1
- package/transpiled/Mapping.js +4 -1
- package/transpiled/Mapping.js.map +1 -1
- package/transpiled/Query.d.ts +1 -0
- package/transpiled/Query.js +21 -20
- package/transpiled/Query.js.map +1 -1
- package/transpiled/RTD/Context.d.ts +7 -6
- package/transpiled/RTD/Directives.d.ts +19 -4
- package/transpiled/RTD/Endpoint.d.ts +6 -4
- package/transpiled/RTD/Match.d.ts +2 -4
- package/transpiled/RTD/Method.d.ts +7 -7
- package/transpiled/RTD/Method.js.map +1 -1
- package/transpiled/RTD/Node.d.ts +4 -6
- package/transpiled/RTD/Node.js +2 -1
- package/transpiled/RTD/Node.js.map +1 -1
- package/transpiled/RTD/Tree.d.ts +6 -6
- package/transpiled/RTD/Tree.js +4 -1
- package/transpiled/RTD/Tree.js.map +1 -1
- package/transpiled/RTD/factory.d.ts +2 -4
- package/transpiled/RTD/factory.js +1 -1
- package/transpiled/RTD/factory.js.map +1 -1
- package/transpiled/Tenant.d.ts +0 -1
- package/transpiled/Tenant.js +0 -6
- package/transpiled/Tenant.js.map +1 -1
- package/transpiled/deployment.d.ts +1 -1
- package/transpiled/deployment.js +28 -20
- package/transpiled/deployment.js.map +1 -1
- package/transpiled/directives/auth/Authorization.d.ts +2 -3
- package/transpiled/directives/auth/Authorization.js +26 -12
- package/transpiled/directives/auth/Authorization.js.map +1 -1
- package/transpiled/directives/auth/Delegate.d.ts +10 -0
- package/transpiled/directives/auth/Delegate.js +34 -0
- package/transpiled/directives/auth/Delegate.js.map +1 -0
- package/transpiled/directives/auth/Incept.js +3 -2
- package/transpiled/directives/auth/Incept.js.map +1 -1
- package/transpiled/directives/auth/Role.d.ts +4 -1
- package/transpiled/directives/auth/Role.js +20 -14
- package/transpiled/directives/auth/Role.js.map +1 -1
- package/transpiled/directives/cache/Cache.d.ts +5 -5
- package/transpiled/directives/cache/Cache.js +10 -4
- package/transpiled/directives/cache/Cache.js.map +1 -1
- package/transpiled/directives/cache/Control.d.ts +2 -1
- package/transpiled/directives/cache/Control.js +29 -12
- package/transpiled/directives/cache/Control.js.map +1 -1
- package/transpiled/directives/cors/CORS.d.ts +2 -3
- package/transpiled/directives/cors/CORS.js +13 -7
- package/transpiled/directives/cors/CORS.js.map +1 -1
- package/transpiled/directives/dev/Development.d.ts +3 -3
- package/transpiled/directives/dev/Development.js +1 -1
- package/transpiled/directives/dev/Development.js.map +1 -1
- package/transpiled/directives/index.d.ts +2 -2
- package/transpiled/directives/index.js +5 -3
- package/transpiled/directives/index.js.map +1 -1
- package/transpiled/directives/io/Directive.d.ts +8 -0
- package/transpiled/directives/io/Directive.js +3 -0
- package/transpiled/directives/io/Directive.js.map +1 -0
- package/transpiled/directives/io/IO.d.ts +9 -0
- package/transpiled/directives/io/IO.js +33 -0
- package/transpiled/directives/io/IO.js.map +1 -0
- package/transpiled/directives/io/Input.d.ts +11 -0
- package/transpiled/directives/{octets/Permute.js → io/Input.js} +33 -26
- package/transpiled/directives/io/Input.js.map +1 -0
- package/transpiled/directives/io/Message.d.ts +1 -0
- package/transpiled/directives/io/Message.js +3 -0
- package/transpiled/directives/io/Message.js.map +1 -0
- package/transpiled/directives/io/Output.d.ts +13 -0
- package/transpiled/directives/io/Output.js +76 -0
- package/transpiled/directives/io/Output.js.map +1 -0
- package/transpiled/directives/io/index.d.ts +2 -0
- package/transpiled/directives/io/index.js +6 -0
- package/transpiled/directives/io/index.js.map +1 -0
- package/transpiled/directives/io/schemas.d.ts +7 -0
- package/transpiled/directives/io/schemas.js +14 -0
- package/transpiled/directives/io/schemas.js.map +1 -0
- package/transpiled/directives/octets/Context.d.ts +3 -3
- package/transpiled/directives/octets/Context.js +4 -2
- package/transpiled/directives/octets/Context.js.map +1 -1
- package/transpiled/directives/octets/Delete.d.ts +3 -2
- package/transpiled/directives/octets/Delete.js +3 -1
- package/transpiled/directives/octets/Delete.js.map +1 -1
- package/transpiled/directives/octets/Directive.d.ts +8 -0
- package/transpiled/directives/octets/Directive.js +8 -0
- package/transpiled/directives/octets/Directive.js.map +1 -0
- package/transpiled/directives/octets/Fetch.d.ts +3 -2
- package/transpiled/directives/octets/Fetch.js +3 -1
- package/transpiled/directives/octets/Fetch.js.map +1 -1
- package/transpiled/directives/octets/List.d.ts +3 -2
- package/transpiled/directives/octets/List.js +3 -1
- package/transpiled/directives/octets/List.js.map +1 -1
- package/transpiled/directives/octets/Octets.d.ts +4 -4
- package/transpiled/directives/octets/Octets.js +2 -4
- package/transpiled/directives/octets/Octets.js.map +1 -1
- package/transpiled/directives/octets/Store.d.ts +3 -2
- package/transpiled/directives/octets/Store.js +10 -3
- package/transpiled/directives/octets/Store.js.map +1 -1
- package/transpiled/directives/octets/Workflow.d.ts +3 -2
- package/transpiled/directives/octets/Workflow.js +9 -2
- package/transpiled/directives/octets/Workflow.js.map +1 -1
- package/transpiled/directives/octets/types.d.ts +0 -5
- package/transpiled/directives/require/Directive.d.ts +4 -0
- package/transpiled/directives/require/Directive.js +3 -0
- package/transpiled/directives/require/Directive.js.map +1 -0
- package/transpiled/directives/require/Headers.d.ts +7 -0
- package/transpiled/directives/require/Headers.js +19 -0
- package/transpiled/directives/require/Headers.js.map +1 -0
- package/transpiled/directives/require/Require.d.ts +9 -0
- package/transpiled/directives/require/Require.js +27 -0
- package/transpiled/directives/require/Require.js.map +1 -0
- package/transpiled/directives/require/index.d.ts +2 -0
- package/transpiled/directives/require/index.js +6 -0
- package/transpiled/directives/require/index.js.map +1 -0
- package/transpiled/directives/vary/Directive.d.ts +2 -1
- package/transpiled/directives/vary/Embed.d.ts +2 -1
- package/transpiled/directives/vary/Embed.js +8 -6
- package/transpiled/directives/vary/Embed.js.map +1 -1
- package/transpiled/directives/vary/Vary.d.ts +3 -3
- package/transpiled/directives/vary/Vary.js +3 -3
- package/transpiled/directives/vary/Vary.js.map +1 -1
- package/transpiled/directives/vary/embeddings/Authority.d.ts +5 -0
- package/transpiled/directives/vary/embeddings/Authority.js +10 -0
- package/transpiled/directives/vary/embeddings/Authority.js.map +1 -0
- package/transpiled/directives/vary/embeddings/Embedding.d.ts +2 -1
- package/transpiled/directives/vary/embeddings/Header.js +8 -6
- package/transpiled/directives/vary/embeddings/Header.js.map +1 -1
- package/transpiled/directives/vary/embeddings/Language.js +1 -1
- package/transpiled/directives/vary/embeddings/Language.js.map +1 -1
- package/transpiled/directives/vary/embeddings/Parameter.d.ts +7 -0
- package/transpiled/directives/vary/embeddings/Parameter.js +14 -0
- package/transpiled/directives/vary/embeddings/Parameter.js.map +1 -0
- package/transpiled/directives/vary/embeddings/index.d.ts +2 -2
- package/transpiled/directives/vary/embeddings/index.js +8 -4
- package/transpiled/directives/vary/embeddings/index.js.map +1 -1
- package/transpiled/exceptions.d.ts +3 -2
- package/transpiled/exceptions.js +13 -7
- package/transpiled/exceptions.js.map +1 -1
- package/transpiled/root.js +5 -0
- package/transpiled/root.js.map +1 -1
- package/transpiled/schemas.d.ts +1 -1
- package/transpiled/schemas.js +2 -2
- package/transpiled/schemas.js.map +1 -1
- package/transpiled/tsconfig.tsbuildinfo +1 -1
- package/components/identity.basic/operations/create.d.ts +0 -10
- package/components/identity.basic/operations/create.js +0 -10
- package/components/identity.basic/operations/create.js.map +0 -1
- package/components/identity.basic/source/create.ts +0 -18
- package/components/identity.federation/operations/create.d.ts +0 -10
- package/components/identity.federation/operations/create.js.map +0 -1
- package/components/identity.federation/operations/schemas.d.ts +0 -59
- package/components/identity.federation/operations/schemas.js +0 -9
- package/components/identity.federation/operations/schemas.js.map +0 -1
- package/components/identity.federation/operations/types.js.map +0 -1
- package/components/identity.federation/source/schemas.ts +0 -61
- package/components/octets.storage/operations/permute.js +0 -7
- package/source/HTTP/Server.test.ts +0 -126
- package/source/directives/octets/Permute.ts +0 -43
- package/transpiled/directives/octets/Permute.d.ts +0 -10
- package/transpiled/directives/octets/Permute.js.map +0 -1
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
Feature: Token credentials with authorities
|
|
2
|
+
|
|
3
|
+
Scenario: Tokens are scoped to authorities
|
|
4
|
+
Given the annotation:
|
|
5
|
+
"""yaml
|
|
6
|
+
authorities:
|
|
7
|
+
one: the.one.com
|
|
8
|
+
two: the.two.com
|
|
9
|
+
/:
|
|
10
|
+
/:id:
|
|
11
|
+
auth:id: id
|
|
12
|
+
GET:
|
|
13
|
+
dev:stub: Hello
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
# create identity within the `one` authority
|
|
17
|
+
When the following request is received:
|
|
18
|
+
"""
|
|
19
|
+
POST /identity/basic/ HTTP/1.1
|
|
20
|
+
host: the.one.com
|
|
21
|
+
content-type: application/yaml
|
|
22
|
+
accept: application/yaml
|
|
23
|
+
|
|
24
|
+
username: #{{ id | set one.username }}
|
|
25
|
+
password: '#{{ password 8 | set one.password }}'
|
|
26
|
+
"""
|
|
27
|
+
Then the following reply is sent:
|
|
28
|
+
"""
|
|
29
|
+
201 Created
|
|
30
|
+
"""
|
|
31
|
+
When the following request is received:
|
|
32
|
+
"""
|
|
33
|
+
GET /identity/ HTTP/1.1
|
|
34
|
+
host: the.one.com
|
|
35
|
+
accept: application/yaml
|
|
36
|
+
authorization: Basic #{{ basic one }}
|
|
37
|
+
"""
|
|
38
|
+
Then the following reply is sent:
|
|
39
|
+
"""
|
|
40
|
+
200 OK
|
|
41
|
+
authorization: Token ${{ one.token }}
|
|
42
|
+
|
|
43
|
+
id: ${{ one.id }}
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
# create identity within the `two` authority
|
|
47
|
+
When the following request is received:
|
|
48
|
+
"""
|
|
49
|
+
POST /identity/basic/ HTTP/1.1
|
|
50
|
+
host: the.two.com
|
|
51
|
+
content-type: application/yaml
|
|
52
|
+
accept: application/yaml
|
|
53
|
+
|
|
54
|
+
username: #{{ id | set two.username }}
|
|
55
|
+
password: '#{{ password 8 | set two.password }}'
|
|
56
|
+
"""
|
|
57
|
+
Then the following reply is sent:
|
|
58
|
+
"""
|
|
59
|
+
201 Created
|
|
60
|
+
"""
|
|
61
|
+
When the following request is received:
|
|
62
|
+
"""
|
|
63
|
+
GET /identity/ HTTP/1.1
|
|
64
|
+
host: the.two.com
|
|
65
|
+
accept: application/yaml
|
|
66
|
+
authorization: Basic #{{ basic two }}
|
|
67
|
+
"""
|
|
68
|
+
Then the following reply is sent:
|
|
69
|
+
"""
|
|
70
|
+
200 OK
|
|
71
|
+
authorization: Token ${{ two.token }}
|
|
72
|
+
|
|
73
|
+
id: ${{ two.id }}
|
|
74
|
+
"""
|
|
75
|
+
|
|
76
|
+
# access `one` authority
|
|
77
|
+
When the following request is received:
|
|
78
|
+
"""
|
|
79
|
+
GET /${{ one.id }}/ HTTP/1.1
|
|
80
|
+
host: the.one.com
|
|
81
|
+
authorization: Token ${{ one.token }}
|
|
82
|
+
"""
|
|
83
|
+
Then the following reply is sent:
|
|
84
|
+
"""
|
|
85
|
+
200 OK
|
|
86
|
+
"""
|
|
87
|
+
When the following request is received:
|
|
88
|
+
"""
|
|
89
|
+
GET /${{ two.id }}/ HTTP/1.1
|
|
90
|
+
host: the.one.com
|
|
91
|
+
authorization: Token ${{ two.token }}
|
|
92
|
+
"""
|
|
93
|
+
Then the following reply is sent:
|
|
94
|
+
"""
|
|
95
|
+
401 Unauthorized
|
|
96
|
+
"""
|
|
97
|
+
|
|
98
|
+
# access `two` authority
|
|
99
|
+
When the following request is received:
|
|
100
|
+
"""
|
|
101
|
+
GET /${{ one.id }}/ HTTP/1.1
|
|
102
|
+
host: the.two.com
|
|
103
|
+
authorization: Token ${{ one.token }}
|
|
104
|
+
"""
|
|
105
|
+
Then the following reply is sent:
|
|
106
|
+
"""
|
|
107
|
+
401 Unauthorized
|
|
108
|
+
"""
|
|
109
|
+
When the following request is received:
|
|
110
|
+
"""
|
|
111
|
+
GET /${{ two.id }}/ HTTP/1.1
|
|
112
|
+
host: the.two.com
|
|
113
|
+
authorization: Token ${{ two.token }}
|
|
114
|
+
"""
|
|
115
|
+
Then the following reply is sent:
|
|
116
|
+
"""
|
|
117
|
+
200 OK
|
|
118
|
+
"""
|
package/features/body.feature
CHANGED
|
@@ -5,11 +5,13 @@ Feature: Request body
|
|
|
5
5
|
"""yaml
|
|
6
6
|
exposition:
|
|
7
7
|
/:
|
|
8
|
+
io:output: true
|
|
8
9
|
POST: create
|
|
9
10
|
"""
|
|
10
11
|
When the following request is received:
|
|
11
12
|
"""
|
|
12
13
|
POST /pots/ HTTP/1.1
|
|
14
|
+
host: nex.toa.io
|
|
13
15
|
content-type: application/yaml
|
|
14
16
|
|
|
15
17
|
title: Hello
|
|
@@ -25,11 +27,13 @@ Feature: Request body
|
|
|
25
27
|
"""yaml
|
|
26
28
|
exposition:
|
|
27
29
|
/:name:
|
|
30
|
+
io:output: true
|
|
28
31
|
GET: <operation>
|
|
29
32
|
"""
|
|
30
33
|
When the following request is received:
|
|
31
34
|
"""
|
|
32
35
|
GET /echo/world/ HTTP/1.1
|
|
36
|
+
host: nex.toa.io
|
|
33
37
|
accept: text/plain
|
|
34
38
|
"""
|
|
35
39
|
Then the following reply is sent:
|
package/features/cache.feature
CHANGED
|
@@ -1,19 +1,55 @@
|
|
|
1
|
+
@security
|
|
1
2
|
Feature: Caching
|
|
2
3
|
|
|
3
4
|
Background:
|
|
4
5
|
Given the `identity.basic` database contains:
|
|
5
6
|
# developer:secret
|
|
6
7
|
# user:12345
|
|
7
|
-
| _id | username | password |
|
|
8
|
-
| b70a7dbca6b14a2eaac8a9eb4b2ff4db | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
8
|
+
| _id | authority | username | password |
|
|
9
|
+
| b70a7dbca6b14a2eaac8a9eb4b2ff4db | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
9
10
|
Given the `identity.roles` database contains:
|
|
10
11
|
| _id | identity | role |
|
|
11
12
|
| 775a648d054e4ce1a65f8f17e5b51803 | b70a7dbca6b14a2eaac8a9eb4b2ff4db | developer |
|
|
12
13
|
|
|
14
|
+
Scenario: Default caching
|
|
15
|
+
Given the annotation:
|
|
16
|
+
"""yaml
|
|
17
|
+
/:
|
|
18
|
+
anonymous: true
|
|
19
|
+
GET:
|
|
20
|
+
dev:stub: foo
|
|
21
|
+
/private:
|
|
22
|
+
auth:role: developer
|
|
23
|
+
GET:
|
|
24
|
+
dev:stub: bar
|
|
25
|
+
"""
|
|
26
|
+
When the following request is received:
|
|
27
|
+
"""
|
|
28
|
+
GET / HTTP/1.1
|
|
29
|
+
host: nex.toa.io
|
|
30
|
+
"""
|
|
31
|
+
Then the reply does not contain:
|
|
32
|
+
"""
|
|
33
|
+
cache-control:
|
|
34
|
+
"""
|
|
35
|
+
When the following request is received:
|
|
36
|
+
"""
|
|
37
|
+
GET /private/ HTTP/1.1
|
|
38
|
+
host: nex.toa.io
|
|
39
|
+
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
40
|
+
"""
|
|
41
|
+
Then the following reply is sent:
|
|
42
|
+
"""
|
|
43
|
+
200 OK
|
|
44
|
+
|
|
45
|
+
cache-control: private
|
|
46
|
+
"""
|
|
47
|
+
|
|
13
48
|
Scenario: Caching successful response
|
|
14
49
|
Given the annotation:
|
|
15
50
|
"""yaml
|
|
16
51
|
/:
|
|
52
|
+
io:output: true
|
|
17
53
|
anonymous: true
|
|
18
54
|
GET:
|
|
19
55
|
cache:control: max-age=60000
|
|
@@ -22,6 +58,7 @@ Feature: Caching
|
|
|
22
58
|
When the following request is received:
|
|
23
59
|
"""
|
|
24
60
|
GET / HTTP/1.1
|
|
61
|
+
host: nex.toa.io
|
|
25
62
|
accept: text/plain
|
|
26
63
|
"""
|
|
27
64
|
Then the following reply is sent:
|
|
@@ -37,6 +74,7 @@ Feature: Caching
|
|
|
37
74
|
Given the annotation:
|
|
38
75
|
"""yaml
|
|
39
76
|
/:
|
|
77
|
+
io:output: true
|
|
40
78
|
cache:control: max-age=30000
|
|
41
79
|
GET:
|
|
42
80
|
anonymous: true
|
|
@@ -51,9 +89,22 @@ Feature: Caching
|
|
|
51
89
|
GET:
|
|
52
90
|
dev:stub: hello
|
|
53
91
|
"""
|
|
92
|
+
When the following request is received:
|
|
93
|
+
"""
|
|
94
|
+
GET /identity/ HTTP/1.1
|
|
95
|
+
host: nex.toa.io
|
|
96
|
+
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
97
|
+
"""
|
|
98
|
+
Then the following reply is sent:
|
|
99
|
+
"""
|
|
100
|
+
200 OK
|
|
101
|
+
authorization: Token ${{ token }}
|
|
102
|
+
cache-control: private
|
|
103
|
+
"""
|
|
54
104
|
When the following request is received:
|
|
55
105
|
"""
|
|
56
106
|
GET / HTTP/1.1
|
|
107
|
+
host: nex.toa.io
|
|
57
108
|
accept: text/plain
|
|
58
109
|
"""
|
|
59
110
|
Then the following reply is sent:
|
|
@@ -67,8 +118,9 @@ Feature: Caching
|
|
|
67
118
|
When the following request is received:
|
|
68
119
|
"""
|
|
69
120
|
GET /foo/ HTTP/1.1
|
|
121
|
+
host: nex.toa.io
|
|
70
122
|
accept: text/plain
|
|
71
|
-
authorization:
|
|
123
|
+
authorization: Token ${{ token }}
|
|
72
124
|
"""
|
|
73
125
|
Then the following reply is sent:
|
|
74
126
|
"""
|
|
@@ -81,8 +133,9 @@ Feature: Caching
|
|
|
81
133
|
When the following request is received:
|
|
82
134
|
"""
|
|
83
135
|
GET /bar/ HTTP/1.1
|
|
136
|
+
host: nex.toa.io
|
|
84
137
|
accept: text/plain
|
|
85
|
-
authorization:
|
|
138
|
+
authorization: Token ${{ token }}
|
|
86
139
|
"""
|
|
87
140
|
Then the following reply is sent:
|
|
88
141
|
"""
|
|
@@ -109,6 +162,7 @@ Feature: Caching
|
|
|
109
162
|
When the following request is received:
|
|
110
163
|
"""
|
|
111
164
|
POST / HTTP/1.1
|
|
165
|
+
host: nex.toa.io
|
|
112
166
|
accept: application/yaml
|
|
113
167
|
"""
|
|
114
168
|
Then the reply does not contain:
|
|
@@ -120,6 +174,7 @@ Feature: Caching
|
|
|
120
174
|
Given the annotation:
|
|
121
175
|
"""yaml
|
|
122
176
|
/:
|
|
177
|
+
io:output: true
|
|
123
178
|
auth:role: developer
|
|
124
179
|
cache:exact: max-age=60000, public
|
|
125
180
|
GET:
|
|
@@ -127,8 +182,21 @@ Feature: Caching
|
|
|
127
182
|
"""
|
|
128
183
|
When the following request is received:
|
|
129
184
|
"""
|
|
130
|
-
GET / HTTP/1.1
|
|
185
|
+
GET /identity/ HTTP/1.1
|
|
186
|
+
host: nex.toa.io
|
|
131
187
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
188
|
+
"""
|
|
189
|
+
Then the following reply is sent:
|
|
190
|
+
"""
|
|
191
|
+
200 OK
|
|
192
|
+
authorization: Token ${{ token }}
|
|
193
|
+
cache-control: private
|
|
194
|
+
"""
|
|
195
|
+
When the following request is received:
|
|
196
|
+
"""
|
|
197
|
+
GET / HTTP/1.1
|
|
198
|
+
host: nex.toa.io
|
|
199
|
+
authorization: Token ${{ token }}
|
|
132
200
|
accept: text/plain
|
|
133
201
|
|
|
134
202
|
"""
|
|
@@ -152,9 +220,48 @@ Feature: Caching
|
|
|
152
220
|
When the following request is received:
|
|
153
221
|
"""
|
|
154
222
|
GET / HTTP/1.1
|
|
223
|
+
host: nex.toa.io
|
|
155
224
|
accept: text/plain
|
|
156
225
|
"""
|
|
157
226
|
Then the reply does not contain:
|
|
158
227
|
"""
|
|
159
228
|
cache-control:
|
|
160
229
|
"""
|
|
230
|
+
|
|
231
|
+
Scenario: Private responses are sent with `vary: authorization`
|
|
232
|
+
Given the `identity.basic` database contains:
|
|
233
|
+
| _id | authority | username | password |
|
|
234
|
+
| efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
235
|
+
And the annotation:
|
|
236
|
+
"""yaml
|
|
237
|
+
/:
|
|
238
|
+
/:id:
|
|
239
|
+
auth:id: id
|
|
240
|
+
cache:control: max-age=10000
|
|
241
|
+
GET:
|
|
242
|
+
dev:stub: Keep it
|
|
243
|
+
"""
|
|
244
|
+
When the following request is received:
|
|
245
|
+
"""
|
|
246
|
+
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
247
|
+
host: nex.toa.io
|
|
248
|
+
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
249
|
+
"""
|
|
250
|
+
Then the following reply is sent:
|
|
251
|
+
"""
|
|
252
|
+
200 OK
|
|
253
|
+
authorization: Token ${{ token }}
|
|
254
|
+
cache-control: private
|
|
255
|
+
"""
|
|
256
|
+
When the following request is received:
|
|
257
|
+
"""
|
|
258
|
+
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
259
|
+
host: nex.toa.io
|
|
260
|
+
authorization: Token ${{ token }}
|
|
261
|
+
"""
|
|
262
|
+
Then the following reply is sent:
|
|
263
|
+
"""
|
|
264
|
+
200 OK
|
|
265
|
+
cache-control: private, max-age=10000
|
|
266
|
+
vary: authorization
|
|
267
|
+
"""
|
package/features/cors.feature
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
@security
|
|
1
2
|
Feature: CORS Support
|
|
2
3
|
|
|
3
4
|
Scenario: Using CORS
|
|
@@ -12,6 +13,7 @@ Feature: CORS Support
|
|
|
12
13
|
When the following request is received:
|
|
13
14
|
"""
|
|
14
15
|
OPTIONS / HTTP/1.1
|
|
16
|
+
host: nex.toa.io
|
|
15
17
|
origin: https://hello.world
|
|
16
18
|
"""
|
|
17
19
|
Then the following reply is sent:
|
|
@@ -19,15 +21,16 @@ Feature: CORS Support
|
|
|
19
21
|
204 No Content
|
|
20
22
|
access-control-allow-origin: https://hello.world
|
|
21
23
|
access-control-allow-methods: GET, POST, PUT, PATCH, DELETE
|
|
22
|
-
access-control-allow-headers: accept, authorization, content-type
|
|
24
|
+
access-control-allow-headers: accept, authorization, content-type, etag, if-match, if-none-match
|
|
23
25
|
access-control-allow-credentials: true
|
|
24
26
|
access-control-max-age: 3600
|
|
25
|
-
cache-control:
|
|
27
|
+
cache-control: max-age=3600
|
|
26
28
|
vary: origin
|
|
27
29
|
"""
|
|
28
30
|
When the following request is received:
|
|
29
31
|
"""
|
|
30
32
|
GET /foo/ HTTP/1.1
|
|
33
|
+
host: nex.toa.io
|
|
31
34
|
origin: https://hello.world
|
|
32
35
|
"""
|
|
33
36
|
Then the following reply is sent:
|
|
@@ -49,6 +52,7 @@ Feature: CORS Support
|
|
|
49
52
|
When the following request is received:
|
|
50
53
|
"""
|
|
51
54
|
GET /bar/ HTTP/1.1
|
|
55
|
+
host: nex.toa.io
|
|
52
56
|
origin: https://hello.world
|
|
53
57
|
"""
|
|
54
58
|
Then the following reply is sent:
|
|
@@ -61,6 +65,7 @@ Feature: CORS Support
|
|
|
61
65
|
When the following request is received:
|
|
62
66
|
"""
|
|
63
67
|
GET /foo/ HTTP/1.1
|
|
68
|
+
host: nex.toa.io
|
|
64
69
|
origin: https://hello.world
|
|
65
70
|
"""
|
|
66
71
|
Then the following reply is sent:
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
Feature: Debugging
|
|
2
|
+
|
|
3
|
+
Scenario: Operation call
|
|
4
|
+
Given the `identity.basic` database contains:
|
|
5
|
+
| _id | authority | username | password |
|
|
6
|
+
| efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
7
|
+
And the `identity.roles` database contains:
|
|
8
|
+
| _id | identity | role |
|
|
9
|
+
| 775a648d054e4ce1a65f8f17e5b51803 | efe3a65ebbee47ed95a73edd911ea328 | developer |
|
|
10
|
+
And the annotation:
|
|
11
|
+
"""yaml
|
|
12
|
+
debug: true
|
|
13
|
+
"""
|
|
14
|
+
And the `greeter` is running with the following manifest:
|
|
15
|
+
"""yaml
|
|
16
|
+
exposition:
|
|
17
|
+
/:
|
|
18
|
+
auth:role: developer
|
|
19
|
+
io:output: true
|
|
20
|
+
GET: greet
|
|
21
|
+
"""
|
|
22
|
+
When the following request is received:
|
|
23
|
+
"""
|
|
24
|
+
GET /greeter/ HTTP/1.1
|
|
25
|
+
host: nex.toa.io
|
|
26
|
+
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
27
|
+
accept: text/plain
|
|
28
|
+
"""
|
|
29
|
+
Then the following reply is sent:
|
|
30
|
+
"""
|
|
31
|
+
200 OK
|
|
32
|
+
|
|
33
|
+
Hello
|
|
34
|
+
"""
|
|
@@ -4,6 +4,7 @@ Feature: Directives
|
|
|
4
4
|
Given the annotation:
|
|
5
5
|
"""yaml
|
|
6
6
|
/:
|
|
7
|
+
io:output: true
|
|
7
8
|
anonymous: true
|
|
8
9
|
GET:
|
|
9
10
|
dev:stub:
|
|
@@ -12,6 +13,7 @@ Feature: Directives
|
|
|
12
13
|
When the following request is received:
|
|
13
14
|
"""
|
|
14
15
|
GET / HTTP/1.1
|
|
16
|
+
host: nex.toa.io
|
|
15
17
|
accept: application/json
|
|
16
18
|
"""
|
|
17
19
|
Then the following reply is sent:
|
|
@@ -26,6 +28,7 @@ Feature: Directives
|
|
|
26
28
|
Given the annotation:
|
|
27
29
|
"""yaml
|
|
28
30
|
/:
|
|
31
|
+
io:output: true
|
|
29
32
|
anonymous: true
|
|
30
33
|
dev:stub:
|
|
31
34
|
hello: again
|
|
@@ -36,6 +39,7 @@ Feature: Directives
|
|
|
36
39
|
When the following request is received:
|
|
37
40
|
"""
|
|
38
41
|
GET /pots/ HTTP/1.1
|
|
42
|
+
host: nex.toa.io
|
|
39
43
|
accept: application/yaml
|
|
40
44
|
"""
|
|
41
45
|
Then the following reply is sent:
|
|
@@ -48,6 +52,7 @@ Feature: Directives
|
|
|
48
52
|
When the following request is received:
|
|
49
53
|
"""
|
|
50
54
|
GET /pots/non-existent/ HTTP/1.1
|
|
55
|
+
host: nex.toa.io
|
|
51
56
|
accept: application/yaml
|
|
52
57
|
"""
|
|
53
58
|
Then the following reply is sent:
|
package/features/dynamic.feature
CHANGED
|
@@ -11,12 +11,14 @@ Feature: Dynamic tree updates
|
|
|
11
11
|
"""yaml
|
|
12
12
|
exposition:
|
|
13
13
|
/:
|
|
14
|
+
io:output: true
|
|
14
15
|
isolated: true
|
|
15
16
|
GET: enumerate
|
|
16
17
|
"""
|
|
17
18
|
When the following request is received:
|
|
18
19
|
"""
|
|
19
20
|
GET /pots/ HTTP/1.1
|
|
21
|
+
host: nex.toa.io
|
|
20
22
|
"""
|
|
21
23
|
Then the following reply is sent:
|
|
22
24
|
"""
|
|
@@ -27,11 +29,13 @@ Feature: Dynamic tree updates
|
|
|
27
29
|
"""yaml
|
|
28
30
|
exposition:
|
|
29
31
|
/:
|
|
32
|
+
io:output: true
|
|
30
33
|
GET: enumerate
|
|
31
34
|
"""
|
|
32
35
|
When the following request is received:
|
|
33
36
|
"""
|
|
34
37
|
GET /pots/ HTTP/1.1
|
|
38
|
+
host: nex.toa.io
|
|
35
39
|
accept: application/yaml
|
|
36
40
|
"""
|
|
37
41
|
Then the following reply is sent:
|
|
@@ -44,23 +48,27 @@ Feature: Dynamic tree updates
|
|
|
44
48
|
"""yaml
|
|
45
49
|
exposition:
|
|
46
50
|
/:id:
|
|
51
|
+
io:output: true
|
|
47
52
|
GET: observe
|
|
48
53
|
"""
|
|
49
54
|
Then the `pots` is stopped
|
|
50
55
|
Then the `pots` is running with the following manifest:
|
|
51
56
|
"""yaml
|
|
52
57
|
exposition:
|
|
53
|
-
/:
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
/:
|
|
59
|
+
io:output: true
|
|
60
|
+
/:id:
|
|
61
|
+
GET: observe
|
|
62
|
+
/big:
|
|
63
|
+
GET:
|
|
64
|
+
endpoint: enumerate
|
|
65
|
+
query:
|
|
66
|
+
criteria: volume>200
|
|
60
67
|
"""
|
|
61
68
|
When the following request is received:
|
|
62
69
|
"""
|
|
63
70
|
GET /pots/big/ HTTP/1.1
|
|
71
|
+
host: nex.toa.io
|
|
64
72
|
accept: application/yaml
|
|
65
73
|
"""
|
|
66
74
|
Then the following reply is sent:
|
|
@@ -73,6 +81,7 @@ Feature: Dynamic tree updates
|
|
|
73
81
|
"""yaml
|
|
74
82
|
exposition:
|
|
75
83
|
/big:
|
|
84
|
+
io:output: true
|
|
76
85
|
GET:
|
|
77
86
|
endpoint: enumerate
|
|
78
87
|
query:
|
|
@@ -83,6 +92,7 @@ Feature: Dynamic tree updates
|
|
|
83
92
|
"""yaml
|
|
84
93
|
exposition:
|
|
85
94
|
/big:
|
|
95
|
+
io:output: true
|
|
86
96
|
GET:
|
|
87
97
|
endpoint: enumerate
|
|
88
98
|
query:
|
|
@@ -91,6 +101,7 @@ Feature: Dynamic tree updates
|
|
|
91
101
|
When the following request is received:
|
|
92
102
|
"""
|
|
93
103
|
GET /pots/big/?criteria=temperature>50 HTTP/1.1
|
|
104
|
+
host: nex.toa.io
|
|
94
105
|
accept: application/yaml
|
|
95
106
|
"""
|
|
96
107
|
Then the following reply is sent:
|
package/features/errors.feature
CHANGED
|
@@ -8,11 +8,14 @@ Feature: Errors
|
|
|
8
8
|
When the following request is received:
|
|
9
9
|
"""
|
|
10
10
|
GET <path> HTTP/1.1
|
|
11
|
-
|
|
11
|
+
host: nex.toa.io
|
|
12
|
+
accept: text/plain
|
|
12
13
|
"""
|
|
13
14
|
Then the following reply is sent:
|
|
14
15
|
"""
|
|
15
16
|
404 Not Found
|
|
17
|
+
|
|
18
|
+
Route not found
|
|
16
19
|
"""
|
|
17
20
|
Examples:
|
|
18
21
|
| path |
|
|
@@ -28,6 +31,7 @@ Feature: Errors
|
|
|
28
31
|
When the following request is received:
|
|
29
32
|
"""
|
|
30
33
|
GET /basic/greeter HTTP/1.1
|
|
34
|
+
host: nex.toa.io
|
|
31
35
|
accept: application/json
|
|
32
36
|
"""
|
|
33
37
|
Then the following reply is sent:
|
|
@@ -43,10 +47,11 @@ Feature: Errors
|
|
|
43
47
|
When the following request is received:
|
|
44
48
|
"""
|
|
45
49
|
PATCH /greeter/ HTTP/1.1
|
|
50
|
+
host: nex.toa.io
|
|
46
51
|
accept: application/yaml
|
|
47
52
|
"""
|
|
48
53
|
Then the following reply is sent:
|
|
49
|
-
"""
|
|
54
|
+
"""
|
|
50
55
|
405 Method Not Allowed
|
|
51
56
|
"""
|
|
52
57
|
|
|
@@ -54,10 +59,11 @@ Feature: Errors
|
|
|
54
59
|
When the following request is received:
|
|
55
60
|
"""
|
|
56
61
|
COPY /basic/greeter/ HTTP/1.1
|
|
62
|
+
host: nex.toa.io
|
|
57
63
|
accept: application/yaml
|
|
58
64
|
"""
|
|
59
65
|
Then the following reply is sent:
|
|
60
|
-
"""
|
|
66
|
+
"""
|
|
61
67
|
501 Not Implemented
|
|
62
68
|
"""
|
|
63
69
|
|
|
@@ -71,6 +77,7 @@ Feature: Errors
|
|
|
71
77
|
When the following request is received:
|
|
72
78
|
"""
|
|
73
79
|
POST /pots/ HTTP/1.1
|
|
80
|
+
host: nex.toa.io
|
|
74
81
|
accept: application/yaml
|
|
75
82
|
content-type: application/yaml
|
|
76
83
|
|
|
@@ -95,6 +102,7 @@ Feature: Errors
|
|
|
95
102
|
When the following request is received:
|
|
96
103
|
"""
|
|
97
104
|
GET /pots/?limit=1001 HTTP/1.1
|
|
105
|
+
host: nex.toa.io
|
|
98
106
|
accept: text/plain
|
|
99
107
|
"""
|
|
100
108
|
Then the following reply is sent:
|
|
@@ -118,6 +126,7 @@ Feature: Errors
|
|
|
118
126
|
When the following request is received:
|
|
119
127
|
"""
|
|
120
128
|
GET /pots/hot/?criteria=volume>500 HTTP/1.1
|
|
129
|
+
host: nex.toa.io
|
|
121
130
|
accept: text/plain
|
|
122
131
|
"""
|
|
123
132
|
Then the following reply is sent:
|
|
@@ -125,7 +134,7 @@ Feature: Errors
|
|
|
125
134
|
400 Bad Request
|
|
126
135
|
content-type: text/plain
|
|
127
136
|
|
|
128
|
-
Query criteria is closed
|
|
137
|
+
Query criteria is closed
|
|
129
138
|
"""
|
|
130
139
|
|
|
131
140
|
Scenario: Additional query parameters
|
|
@@ -139,6 +148,7 @@ Feature: Errors
|
|
|
139
148
|
When the following request is received:
|
|
140
149
|
"""
|
|
141
150
|
GET /pots/?foo=bar HTTP/1.1
|
|
151
|
+
host: nex.toa.io
|
|
142
152
|
accept: text/plain
|
|
143
153
|
"""
|
|
144
154
|
Then the following reply is sent:
|
|
@@ -158,6 +168,7 @@ Feature: Errors
|
|
|
158
168
|
When the following request is received:
|
|
159
169
|
"""
|
|
160
170
|
GET / HTTP/1.1
|
|
171
|
+
host: nex.toa.io
|
|
161
172
|
authorization: Basic
|
|
162
173
|
accept: text/plain
|
|
163
174
|
"""
|
|
@@ -180,6 +191,7 @@ Feature: Errors
|
|
|
180
191
|
When the following request is received:
|
|
181
192
|
"""
|
|
182
193
|
GET / HTTP/1.1
|
|
194
|
+
host: nex.toa.io
|
|
183
195
|
accept: text/plain
|
|
184
196
|
"""
|
|
185
197
|
Then the following reply is sent:
|
|
@@ -197,12 +209,14 @@ Feature: Errors
|
|
|
197
209
|
"""yaml
|
|
198
210
|
/:
|
|
199
211
|
GET:
|
|
212
|
+
io:output: true
|
|
200
213
|
anonymous: true
|
|
201
214
|
dev:stub: hello
|
|
202
215
|
"""
|
|
203
216
|
When the following request is received:
|
|
204
217
|
"""
|
|
205
218
|
GET / HTTP/1.1
|
|
219
|
+
host: nex.toa.io
|
|
206
220
|
accept: image/jpeg
|
|
207
221
|
"""
|
|
208
222
|
Then the following reply is sent:
|