|
5 | 5 | require 'apollo-federation/schema' |
6 | 6 | require 'apollo-federation/field' |
7 | 7 | require 'apollo-federation/object' |
| 8 | +require 'apollo-federation/interface' |
8 | 9 |
|
9 | 10 | RSpec.describe ApolloFederation::ServiceField do |
10 | 11 | let(:base_schema) do |
@@ -144,6 +145,64 @@ def execute_sdl(schema) |
144 | 145 | ) |
145 | 146 | end |
146 | 147 |
|
| 148 | + it 'returns valid SDL for interface types' do |
| 149 | + base_interface = Module.new do |
| 150 | + include GraphQL::Schema::Interface |
| 151 | + include ApolloFederation::Interface |
| 152 | + |
| 153 | + graphql_name 'Interface' |
| 154 | + end |
| 155 | + |
| 156 | + product = Module.new do |
| 157 | + include base_interface |
| 158 | + |
| 159 | + graphql_name 'Product' |
| 160 | + |
| 161 | + key fields: :upc |
| 162 | + field :upc, String, null: false |
| 163 | + end |
| 164 | + |
| 165 | + book = Class.new(base_object) do |
| 166 | + implements product |
| 167 | + |
| 168 | + graphql_name 'Book' |
| 169 | + |
| 170 | + extend_type |
| 171 | + |
| 172 | + key fields: :upc |
| 173 | + field :upc, String, null: false, external: true |
| 174 | + end |
| 175 | + |
| 176 | + pen = Class.new(base_object) do |
| 177 | + implements product |
| 178 | + |
| 179 | + graphql_name 'Pen' |
| 180 | + |
| 181 | + key fields: :upc |
| 182 | + field :upc, String, null: false |
| 183 | + end |
| 184 | + |
| 185 | + schema = Class.new(base_schema) do |
| 186 | + orphan_types book, pen |
| 187 | + end |
| 188 | + |
| 189 | + expect(execute_sdl(schema)).to match_sdl( |
| 190 | + <<~GRAPHQL, |
| 191 | + type Book implements Product @extends @key(fields: "upc") { |
| 192 | + upc: String! @external |
| 193 | + } |
| 194 | +
|
| 195 | + type Pen implements Product @key(fields: "upc") { |
| 196 | + upc: String! |
| 197 | + } |
| 198 | +
|
| 199 | + interface Product @key(fields: "upc") { |
| 200 | + upc: String! |
| 201 | + } |
| 202 | + GRAPHQL |
| 203 | + ) |
| 204 | + end |
| 205 | + |
147 | 206 | context 'when a Query object is provided' do |
148 | 207 | it 'returns valid SDL for @key directives' do |
149 | 208 | product = Class.new(base_object) do |
|
0 commit comments