@@ -181,6 +181,80 @@ class EntityTypeMergerSpec extends Specification {
181
181
actualFieldNames containsInAnyOrder(" requiredField" , " testField2" , " ExternalFieldResolver" , " testField1" )
182
182
}
183
183
184
+ def " merge Into Base Type prunes deprecated base field success" (){
185
+ given :
186
+
187
+ TypeSystemDefinition typeSystemDefinition = createTypeSystemDefinition()
188
+
189
+ FieldDefinition requiredField = buildFieldDefinition(" requiredField" )
190
+
191
+ FieldDefinition entityRequiredField = buildFieldDefinition(" requiredField" )
192
+ entityRequiredField. getDirectives(). add(buildDirective(buildDirectiveDefinition(" external" ), emptyList()))
193
+
194
+ FieldDefinition deprecatedField = buildFieldDefinition(" deprecatedField" )
195
+ deprecatedField. getDirectives(). add(buildDirective(buildDirectiveDefinition(" deprecated" ), emptyList()))
196
+
197
+ FieldDefinition extField = buildFieldDefinition(" deprecatedField" )
198
+
199
+
200
+ ObjectTypeDefinition baseObjectType =
201
+ buildObjectTypeDefinition(" EntityType" , Arrays . asList(
202
+ requiredField,
203
+ deprecatedField,
204
+ ))
205
+
206
+ ObjectTypeExtensionDefinition objectTypeExtension =
207
+ buildObjectTypeExtensionDefinition(" EntityType" , Arrays . asList(
208
+ entityRequiredField,
209
+ extField
210
+ ))
211
+
212
+ typeSystemDefinition. setTypeExtension(objectTypeExtension)
213
+
214
+ entityMergingContextMock. getBaseType() >> baseObjectType
215
+ entityMergingContextMock. getExtensionSystemDefinition() >> typeSystemDefinition
216
+
217
+ unifiedXtextGraphMock. getFieldResolverContexts() >> fieldResolverContexts
218
+
219
+ Map<String , FederationMetadata > federationMetadataMap = new HashMap<> ()
220
+
221
+ FederationMetadata baseFederationMetadataMock = Mock (FederationMetadata . class)
222
+ FederationMetadata extFederationMetadataMock = Mock (FederationMetadata . class)
223
+
224
+ FederationMetadata.EntityMetadata baseEntityMetaDataMock = Mock (FederationMetadata.EntityMetadata . class)
225
+ Set<String > baseFields = Sets . newHashSet(" requiredField" , " deprecatedField" )
226
+ baseEntityMetaDataMock. getFields() >> baseFields
227
+
228
+ FederationMetadata.EntityMetadata extEntityMetaDataMock = Mock (FederationMetadata.EntityMetadata . class)
229
+ Set<String > extFields = Sets . newHashSet( " deprecatedField" )
230
+ extEntityMetaDataMock. getFields() >> extFields
231
+
232
+ baseFederationMetadataMock. getEntityMetadataByName(" EntityType" ) >> baseEntityMetaDataMock
233
+ extFederationMetadataMock. getEntityMetadataByName(" EntityType" ) >> extEntityMetaDataMock
234
+
235
+ federationMetadataMap. put(" baseService" , baseFederationMetadataMock)
236
+ federationMetadataMap. put(" extService" , extFederationMetadataMock)
237
+
238
+ unifiedXtextGraphMock. getFederationMetadataByNamespace() >> federationMetadataMap
239
+ entityMergingContextMock. getTypename() >> " EntityType"
240
+
241
+ when :
242
+ TypeDefinition actual = subjectUnderTest. mergeIntoBaseType(entityMergingContextMock, unifiedXtextGraphMock)
243
+
244
+ then :
245
+ actual == baseObjectType
246
+ List<FieldDefinition > actualFieldDefinitions = getFieldDefinitions(actual)
247
+ actualFieldDefinitions. size() == 2
248
+
249
+ baseFields. size() == 1
250
+ baseFields containsInAnyOrder(" requiredField" )
251
+
252
+ List<String > actualFieldNames = actualFieldDefinitions. stream()
253
+ .map({ fieldDefinition -> fieldDefinition. getName() })
254
+ .collect(Collectors . toList())
255
+ actualFieldNames containsInAnyOrder(" requiredField" , " deprecatedField" )
256
+ }
257
+
184
258
def " merge Into Base Type interface Type Definition success" () {
185
259
// TODO
186
260
}
0 commit comments