Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 980
Improve Input/Output with normalizers#2495
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Uh oh!
There was an error while loading. Please reload this page.
Changes from all commits
File filter
Filter by extension
Conversations
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -27,7 +27,7 @@ Feature: GraphQL mutation support | ||
| And the response should be in JSON | ||
| And the header "Content-Type" should be equal to "application/json" | ||
| And the JSON node "data.__type.fields[0].name" should contain "delete" | ||
| And the JSON node "data.__type.fields[0].description" should match '/^Deletes a [A-z0-9]+\.$/' | ||
| And the JSON node "data.__type.fields[0].description" should match '/^Deletes a [A-z0-9]+.$/' | ||
| And the JSON node "data.__type.fields[0].type.name" should match "/^delete[A-z0-9]+Payload$/" | ||
| And the JSON node "data.__type.fields[0].type.kind" should be equal to "OBJECT" | ||
| And the JSON node "data.__type.fields[0].args[0].name" should be equal to "input" | ||
| @@ -310,7 +310,7 @@ Feature: GraphQL mutation support | ||
| When I send the following GraphQL request: | ||
| """ | ||
| mutation { | ||
| createDummyDtoNoInput(input: {foo: "A new one", bar: 3, clientMutationId: "myId"}) { | ||
| createDummyDtoNoInput(input: {lorem: "A new one", ipsum: 3, clientMutationId: "myId"}) { | ||
| clientMutationId | ||
| } | ||
| } | ||
| @@ -323,7 +323,19 @@ Feature: GraphQL mutation support | ||
| { | ||
| "errors": [ | ||
| { | ||
| "message": "Field \"foo\" is not defined by type createDummyDtoNoInputInput.", | ||
dunglas marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| "message": "Field createDummyDtoNoInputInput.id of required type ID! was not provided.", | ||
| "extensions": { | ||
| "category": "graphql" | ||
| }, | ||
| "locations": [ | ||
| { | ||
| "line": 2, | ||
| "column": 32 | ||
| } | ||
| ] | ||
| }, | ||
| { | ||
| "message": "Field \"lorem\" is not defined by type createDummyDtoNoInputInput.", | ||
| "extensions": { | ||
| "category": "graphql" | ||
| }, | ||
| @@ -335,14 +347,14 @@ Feature: GraphQL mutation support | ||
| ] | ||
| }, | ||
| { | ||
| "message": "Field \"bar\" is not defined by type createDummyDtoNoInputInput.", | ||
| "message": "Field \"ipsum\" is not defined by type createDummyDtoNoInputInput.", | ||
| "extensions": { | ||
| "category": "graphql" | ||
| }, | ||
| "locations": [ | ||
| { | ||
| "line": 2, | ||
| "column": 51 | ||
| "column": 53 | ||
| } | ||
| ] | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,212 @@ | ||
| Feature: DTO input and output | ||
| In order to use a hypermedia API | ||
| As a client software developer | ||
| I need to be able to use DTOs on my resources as Input or Output objects. | ||
| @createSchema | ||
| Scenario: Create a resource with a custom Input | ||
| When I add "Content-Type" header equal to "application/ld+json" | ||
| And I send a "POST" request to "/dummy_dto_customs" with body: | ||
| """ | ||
| { | ||
| "foo": "test", | ||
| "bar": 1 | ||
| } | ||
| """ | ||
| Then the response status code should be 201 | ||
| And the response should be in JSON | ||
| And the header "Content-Type" should be equal to "application/ld+json; charset=utf-8" | ||
| And the JSON should be equal to: | ||
| """ | ||
| { | ||
| "@context": "/contexts/DummyDtoCustom", | ||
| "@id": "/dummy_dto_customs/1", | ||
| "@type": "DummyDtoCustom", | ||
| "lorem": "test", | ||
| "ipsum": "1", | ||
| "id": 1 | ||
| } | ||
| """ | ||
| @createSchema | ||
| Scenario: Get an item with a custom output | ||
| Given there is a DummyCustomDto | ||
| When I send a "GET" request to "/dummy_dto_custom_output/1" | ||
| Then the response status code should be 200 | ||
| And the response should be in JSON | ||
| And the header "Content-Type" should be equal to "application/ld+json; charset=utf-8" | ||
| And the JSON should be a superset of: | ||
| """ | ||
| { | ||
| "@context": { | ||
| "@vocab": "http://example.com/docs.jsonld#", | ||
| "hydra": "http://www.w3.org/ns/hydra/core#", | ||
| "foo": { | ||
| "@type": "@id" | ||
| }, | ||
| "bar": { | ||
| "@type": "@id" | ||
| } | ||
| }, | ||
| "@type": "CustomOutputDto", | ||
| "foo": "test", | ||
| "bar": 1 | ||
| } | ||
| """ | ||
| @createSchema | ||
| Scenario: Get a collection with a custom output | ||
| Given there are 2 DummyCustomDto | ||
| When I send a "GET" request to "/dummy_dto_custom_output" | ||
| Then the response status code should be 200 | ||
| And the response should be in JSON | ||
| And the header "Content-Type" should be equal to "application/ld+json; charset=utf-8" | ||
| And the JSON should be a superset of: | ||
| """ | ||
| { | ||
| "@context": "/contexts/DummyDtoCustom", | ||
| "@id": "/dummy_dto_customs", | ||
| "@type": "hydra:Collection", | ||
| "hydra:member": [ | ||
| { | ||
| "foo": "test", | ||
| "bar": 1 | ||
| }, | ||
| { | ||
| "foo": "test", | ||
| "bar": 2 | ||
| } | ||
| ], | ||
| "hydra:totalItems": 2 | ||
| } | ||
| """ | ||
| @createSchema | ||
| Scenario: Create a DummyCustomDto object without output | ||
| When I add "Content-Type" header equal to "application/ld+json" | ||
| And I send a "POST" request to "/dummy_dto_custom_post_without_output" with body: | ||
| """ | ||
| { | ||
| "lorem": "test", | ||
| "ipsum": "1" | ||
| } | ||
| """ | ||
| Then the response status code should be 201 | ||
| And the response should be empty | ||
| @createSchema | ||
| Scenario: Create and update a DummyInputOutput | ||
| When I add "Content-Type" header equal to "application/ld+json" | ||
| And I send a "POST" request to "/dummy_dto_input_outputs" with body: | ||
| """ | ||
| { | ||
| "foo": "test", | ||
| "bar": 1 | ||
| } | ||
| """ | ||
| Then the response status code should be 201 | ||
| And the JSON should be a superset of: | ||
| """ | ||
| { | ||
| "@context": { | ||
| "@vocab": "http://example.com/docs.jsonld#", | ||
| "hydra": "http://www.w3.org/ns/hydra/core#", | ||
| "baz": { | ||
| "@type": "@id" | ||
| }, | ||
| "bat": { | ||
| "@type": "@id" | ||
| } | ||
| }, | ||
| "@type": "OutputDto", | ||
| "baz": 1, | ||
| "bat": "test" | ||
| } | ||
| """ | ||
| When I add "Content-Type" header equal to "application/ld+json" | ||
| And I send a "PUT" request to "/dummy_dto_input_outputs/1" with body: | ||
| """ | ||
| { | ||
| "foo": "test", | ||
| "bar": 2 | ||
| } | ||
| """ | ||
| Then the response status code should be 200 | ||
| And the JSON should be a superset of: | ||
| """ | ||
| { | ||
| "@context": { | ||
| "@vocab": "http:\/\/example.com\/docs.jsonld#", | ||
| "hydra": "http:\/\/www.w3.org\/ns\/hydra\/core#", | ||
| "baz": { | ||
| "@type": "@id" | ||
| }, | ||
| "bat": { | ||
| "@type": "@id" | ||
| } | ||
| }, | ||
| "@type": "OutputDto", | ||
| "baz": 2, | ||
| "bat": "test" | ||
| } | ||
| """ | ||
| @!mongodb | ||
soyuka marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| @createSchema | ||
| Scenario: Use DTO with relations on User | ||
| When I add "Content-Type" header equal to "application/ld+json" | ||
| And I send a "POST" request to "/users" with body: | ||
| """ | ||
| { | ||
| "username": "soyuka", | ||
| "plainPassword": "a real password", | ||
| "email": "soyuka@example.com" | ||
| } | ||
| """ | ||
| Then the response status code should be 201 | ||
| When I add "Content-Type" header equal to "application/ld+json" | ||
| And I send a "PUT" request to "/users/recover/1" with body: | ||
| """ | ||
| { | ||
| "user": "/users/1" | ||
| } | ||
| """ | ||
| Then the response status code should be 200 | ||
| And the JSON should be a superset of: | ||
| """ | ||
| { | ||
| "@context": { | ||
| "@vocab": "http://example.com/docs.jsonld#", | ||
| "hydra": "http://www.w3.org/ns/hydra/core#", | ||
| "dummy": { | ||
| "@type": "@id" | ||
| } | ||
| }, | ||
| "@type": "RecoverPasswordOutput", | ||
| "dummy": "/dummies/1" | ||
| } | ||
| """ | ||
| @!mongodb | ||
| @createSchema | ||
| Scenario: Create a resource that has a non-resource DTO relation. | ||
| When I add "Content-Type" header equal to "application/ld+json" | ||
| And I send a "POST" request to "/non_relation_resources" with body: | ||
| """ | ||
| {"relation": {"foo": "test"}} | ||
| """ | ||
| Then the response status code should be 201 | ||
| And the response should be in JSON | ||
| And the header "Content-Type" should be equal to "application/ld+json; charset=utf-8" | ||
| And the JSON should be equal to: | ||
| """ | ||
| { | ||
| "@context": "/contexts/NonRelationResource", | ||
| "@id": "/non_relation_resources/1", | ||
| "@type": "NonRelationResource", | ||
| "relation": { | ||
| "foo": "test" | ||
| }, | ||
| "id": 1 | ||
| } | ||
| """ | ||
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.