Skip to content

Commit 3777475

Browse files
author
Robert Mosolgo
authored
Merge pull request #1835 from cjoudrey/loads-abstract-types
Clarify that `loads:` supports abstract types
2 parents 07abd0f + 286652a commit 3777475

File tree

3 files changed

+74
-0
lines changed

3 files changed

+74
-0
lines changed

guides/mutations/mutation_classes.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,3 +153,5 @@ class Mutations::AddStar < Mutations::BaseMutation
153153
end
154154
end
155155
```
156+
157+
In the above examples, `loads:` is provided a concrete type, but it also supports abstract types (i.e. interfaces and unions).

spec/graphql/schema/relay_classic_mutation_spec.rb

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,42 @@
135135
assert_equal "August Greene", res["data"]["renameEnsemble"]["ensemble"]["name"]
136136
end
137137

138+
it "loads arguments as objects when provided an interface type" do
139+
query = <<-GRAPHQL
140+
mutation($id: ID!, $newName: String!) {
141+
renameNamedEntity(input: {namedEntityId: $id, newName: $newName}) {
142+
namedEntity {
143+
__typename
144+
name
145+
}
146+
}
147+
}
148+
GRAPHQL
149+
150+
res = Jazz::Schema.execute(query, variables: { id: "Ensemble/Robert Glasper Experiment", newName: "August Greene"})
151+
assert_equal "August Greene", res["data"]["renameNamedEntity"]["namedEntity"]["name"]
152+
assert_equal "Ensemble", res["data"]["renameNamedEntity"]["namedEntity"]["__typename"]
153+
end
154+
155+
it "loads arguments as objects when provided an union type" do
156+
query = <<-GRAPHQL
157+
mutation($id: ID!, $newName: String!) {
158+
renamePerformingAct(input: {performingActId: $id, newName: $newName}) {
159+
performingAct {
160+
__typename
161+
... on Ensemble {
162+
name
163+
}
164+
}
165+
}
166+
}
167+
GRAPHQL
168+
169+
res = Jazz::Schema.execute(query, variables: { id: "Ensemble/Robert Glasper Experiment", newName: "August Greene"})
170+
assert_equal "August Greene", res["data"]["renamePerformingAct"]["performingAct"]["name"]
171+
assert_equal "Ensemble", res["data"]["renamePerformingAct"]["performingAct"]["__typename"]
172+
end
173+
138174
it "uses the `as:` name when loading" do
139175
band_query_str = query_str.sub("renameEnsemble", "renameEnsembleAsBand")
140176
res = Jazz::Schema.execute(band_query_str, variables: { id: "Ensemble/Robert Glasper Experiment", newName: "August Greene"})

spec/support/jazz.rb

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,40 @@ def resolve
472472
end
473473
end
474474

475+
class RenameNamedEntity < GraphQL::Schema::RelayClassicMutation
476+
argument :named_entity_id, ID, required: true, loads: NamedEntity
477+
argument :new_name, String, required: true
478+
479+
field :named_entity, NamedEntity, null: false
480+
481+
def resolve(named_entity:, new_name:)
482+
# doesn't actually update the "database"
483+
dup_named_entity = named_entity.dup
484+
dup_named_entity.name = new_name
485+
486+
{
487+
named_entity: dup_named_entity
488+
}
489+
end
490+
end
491+
492+
class RenamePerformingAct < GraphQL::Schema::RelayClassicMutation
493+
argument :performing_act_id, ID, required: true, loads: PerformingAct
494+
argument :new_name, String, required: true
495+
496+
field :performing_act, PerformingAct, null: false
497+
498+
def resolve(performing_act:, new_name:)
499+
# doesn't actually update the "database"
500+
dup_performing_act = performing_act.dup
501+
dup_performing_act.name = new_name
502+
503+
{
504+
performing_act: dup_performing_act
505+
}
506+
end
507+
end
508+
475509
class RenameEnsemble < GraphQL::Schema::RelayClassicMutation
476510
argument :ensemble_id, ID, required: true, loads: Ensemble
477511
argument :new_name, String, required: true
@@ -540,6 +574,8 @@ class Mutation < BaseObject
540574
field :add_instrument, mutation: AddInstrument
541575
field :add_sitar, mutation: AddSitar
542576
field :rename_ensemble, mutation: RenameEnsemble
577+
field :rename_named_entity, mutation: RenameNamedEntity
578+
field :rename_performing_act, mutation: RenamePerformingAct
543579
field :upvote_ensembles, mutation: UpvoteEnsembles
544580
field :upvote_ensembles_as_bands, mutation: UpvoteEnsemblesAsBands
545581
field :upvote_ensembles_ids, mutation: UpvoteEnsemblesIds

0 commit comments

Comments
 (0)