public void IntrospectedUnion_PropertyCheck() { var serverBuilder = new TestServerBuilder(); var server = serverBuilder.AddGraphType <SodaFountainController>() .Build(); var proxy = new SodaTypeUnionProxy(); var schema = new IntrospectedSchema(server.Schema); schema.Rebuild(); var spected = schema.FindIntrospectedType(proxy.Name); spected.Initialize(schema); Assert.AreEqual(proxy.Name, spected.Name); Assert.AreEqual(proxy.Description, spected.Description); Assert.AreEqual(TypeKind.UNION, spected.Kind); Assert.AreEqual(2, spected.PossibleTypes.Count); Assert.IsTrue(spected.PossibleTypes.Any(x => x.Name == "SodaTypeA")); Assert.IsTrue(spected.PossibleTypes.Any(x => x.Name == "SodaTypeB")); Assert.IsNull(spected.Fields); Assert.IsNull(spected.Interfaces); Assert.IsNull(spected.EnumValues); Assert.IsNull(spected.InputFields); Assert.IsNull(spected.OfType); }
public void Introspected_ListType_NotNullType_NotNullList_PropertyCheck() { var serverBuilder = new TestServerBuilder(); var server = serverBuilder.AddGraphType <string>() .Build(); var schema = new IntrospectedSchema(server.Schema); schema.Rebuild(); var scalar = GraphQLProviders.ScalarProvider.RetrieveScalar(typeof(string)); var spected = schema.FindIntrospectedType(scalar); var wrapped = Introspection.WrapBaseTypeWithModifiers(spected, GraphTypeExpression.RequiredListRequiredItem); Assert.AreEqual(TypeKind.NON_NULL, wrapped.Kind); var unwrappedList = wrapped.OfType; Assert.AreEqual(TypeKind.LIST, unwrappedList.Kind); var unwrappedItemType = unwrappedList.OfType; Assert.AreEqual(TypeKind.NON_NULL, unwrappedItemType.Kind); var itemType = unwrappedItemType.OfType; Assert.AreEqual(spected, itemType); }
public void Introspected_ListType_PropertyCheck() { var serverBuilder = new TestServerBuilder(); var server = serverBuilder.AddGraphType <string>() .Build(); var schema = new IntrospectedSchema(server.Schema); schema.Rebuild(); var scalar = GraphQLProviders.ScalarProvider.RetrieveScalar(typeof(string)); var spected = schema.FindIntrospectedType(scalar); var wrapped = Introspection.WrapBaseTypeWithModifiers(spected, MetaGraphTypes.IsList); Assert.AreEqual(TypeKind.LIST, wrapped.Kind); Assert.IsNull(wrapped.Fields); Assert.IsNull(wrapped.Interfaces); Assert.IsNull(wrapped.PossibleTypes); Assert.IsNull(wrapped.EnumValues); Assert.IsNull(wrapped.InputFields); Assert.IsNull(wrapped.Name); Assert.IsNull(wrapped.Description); Assert.AreEqual(spected, wrapped.OfType); }
public void IntrospectedEnum_PropertyCheck() { var serverBuilder = new TestServerBuilder(TestOptions.UseCodeDeclaredNames); var server = serverBuilder .AddGraphType <IntrospectableEnum>() .Build(); var template = TemplateHelper.CreateEnumTemplate <IntrospectableEnum>(); var schema = new IntrospectedSchema(server.Schema); schema.Rebuild(); var enumGraphType = server.CreateGraphType(typeof(IntrospectableEnum), TypeKind.ENUM).GraphType as IEnumGraphType; Assert.IsNotNull(enumGraphType); var spected = schema.FindIntrospectedType(enumGraphType); Assert.AreEqual(enumGraphType.Name, spected.Name); Assert.AreEqual(enumGraphType.Description, spected.Description); Assert.AreEqual(enumGraphType.Kind, spected.Kind); Assert.IsNotNull(spected.EnumValues); var expected1 = template.Values[0]; var expected2 = template.Values[1]; var val1 = spected.EnumValues[0]; var val2 = spected.EnumValues[1]; Assert.AreEqual(expected1.Name, val1.Name); Assert.AreEqual(expected1.Description, val1.Description); Assert.AreEqual(expected1.IsDeprecated, val1.IsDeprecated); Assert.AreEqual(expected1.DeprecationReason, val1.DeprecationReason); Assert.AreEqual(expected2.Name, val2.Name); Assert.AreEqual(expected2.Description, val2.Description); Assert.AreEqual(expected2.IsDeprecated, val2.IsDeprecated); Assert.AreEqual(expected2.DeprecationReason, val2.DeprecationReason); Assert.IsNull(spected.Fields); Assert.IsNull(spected.Interfaces); Assert.IsNull(spected.PossibleTypes); Assert.IsNull(spected.InputFields); Assert.IsNull(spected.OfType); }
public void Introspected_NotNullType_WhenSuppliedANotNullType_ThrowsException() { var serverBuilder = new TestServerBuilder(); var server = serverBuilder.AddGraphType <string>() .Build(); var schema = new IntrospectedSchema(server.Schema); schema.Rebuild(); var scalar = GraphQLProviders.ScalarProvider.RetrieveScalar(typeof(string)); var spected = schema.FindIntrospectedType(scalar); var wrapped = Introspection.WrapBaseTypeWithModifiers(spected, MetaGraphTypes.IsNotNull); Assert.Throws <GraphTypeDeclarationException>(() => { var _ = new IntrospectedType(wrapped, TypeKind.NON_NULL); }); }
/// <summary> /// Processes the given <see cref="IGraphFieldRequest" /> against this instance /// performing the operation as defined by this entity and generating a response. /// </summary> /// <param name="resolutionContext">The resolution context containing the request and the /// runtime information needed to resolve it.</param> /// <param name="cancelToken">The cancel token monitoring the execution of a graph request.</param> /// <returns>Task<IGraphPipelineResponse>.</returns> public Task Resolve(FieldResolutionContext resolutionContext, CancellationToken cancelToken = default) { if (!resolutionContext.Arguments.TryGetArgument <string>("name", out var name)) { resolutionContext.Messages.Critical("Required Argument 'name' not found."); } else { var type = _schema.FindIntrospectedType(name); if (type == null || !type.Publish) { resolutionContext.Messages.Info($"Unknown graph type. The type '{name}' does not exist on the '{_schema.Name}' schema"); } else { resolutionContext.Result = type; } } return(Task.CompletedTask); }
public void IntrospectedSchema_PropertyCheck() { var serverBuilder = new TestServerBuilder(); serverBuilder.AddGraphType <string>(); var server = serverBuilder.Build(); var schema = new IntrospectedSchema(server.Schema); schema.Rebuild(); Assert.AreEqual(server.Schema.Name, schema.Name); Assert.IsNotNull(schema.FindGraphType(Constants.ScalarNames.STRING)); Assert.IsNotNull(schema.FindIntrospectedType(Constants.ScalarNames.STRING)); Assert.AreEqual(11, schema.KnownTypes.Count()); Assert.IsNotNull(schema.QueryType); Assert.IsNull(schema.MutationType); Assert.IsNull(schema.SubscriptionType); Assert.IsNotNull(schema.Directives); Assert.AreEqual(2, schema.Directives.Count()); // skip , include }
public void IntrospectedInputValueType_PropertyCheck() { var serverBuilder = new TestServerBuilder(TestOptions.UseCodeDeclaredNames) .AddGraphType <SodaCanBuildingController>(); var server = serverBuilder.Build(); var schema = new IntrospectedSchema(server.Schema); schema.Rebuild(); var graphType = schema.FindGraphType("Query_buildings") as IObjectGraphType; var spected = schema.FindIntrospectedType("Query_buildings"); Assert.IsNotNull(graphType); Assert.AreEqual(graphType.Name, spected.Name); Assert.AreEqual(graphType.Description, spected.Description); Assert.AreEqual(graphType.Kind, spected.Kind); Assert.AreEqual(1, spected.Fields.Count); var expectedField = graphType.Fields[nameof(SodaCanBuildingController.AddNewBuilding)]; var field = spected.Fields[0]; Assert.AreEqual(expectedField.Name, field.Name); Assert.AreEqual(1, field.Arguments.Count); var expectedArg = expectedField.Arguments["building"]; var arg1 = field.Arguments[0]; Assert.IsNotNull(arg1); Assert.AreEqual(expectedArg.Name, arg1.Name); Assert.AreEqual(expectedArg.Description, arg1.Description); Assert.AreEqual(expectedArg.DefaultValue, arg1.DefaultValue); // the type SodaCanBuildingData is used as input type "BuildngInput" for arg1 var introspectedInputType = schema.FindIntrospectedType("BuildingInput"); Assert.IsNotNull(introspectedInputType); Assert.AreEqual(introspectedInputType, arg1.IntrospectedGraphType); Assert.AreEqual(TypeKind.INPUT_OBJECT, introspectedInputType.Kind); Assert.AreEqual(3, introspectedInputType.InputFields.Count); var inputField1 = introspectedInputType.InputFields.Single(x => x.Name == "Name"); Assert.AreEqual(null, inputField1.Description); Assert.AreEqual(null, inputField1.DefaultValue); Assert.AreEqual(TypeKind.SCALAR, inputField1.IntrospectedGraphType.Kind); var inputField2 = introspectedInputType.InputFields.Single(x => x.Name == "Address"); Assert.AreEqual(null, inputField2.Description); Assert.AreEqual(null, inputField2.DefaultValue); Assert.AreEqual(TypeKind.SCALAR, inputField2.IntrospectedGraphType.Kind); var inputField3 = introspectedInputType.InputFields.Single(x => x.Name == "Capacity"); Assert.AreEqual(null, inputField3.Description); Assert.AreEqual(null, inputField3.DefaultValue); Assert.AreEqual(TypeKind.NON_NULL, inputField3.IntrospectedGraphType.Kind); Assert.AreEqual(TypeKind.ENUM, inputField3.IntrospectedGraphType.OfType.Kind); }
public void IntrospectedObject_PropertyCheck() { var serverBuilder = new TestServerBuilder(TestOptions.UseCodeDeclaredNames); var server = serverBuilder .AddGraphType <IntrospectableObject>() .Build(); var template = TemplateHelper.CreateObjectTemplate <IntrospectableObject>(); var schema = new IntrospectedSchema(server.Schema); schema.Rebuild(); var ogt = server.Schema.KnownTypes.FindGraphType(typeof(IntrospectableObject)) as IObjectGraphType; var spected = schema.FindIntrospectedType(ogt); Assert.AreEqual(ogt.Name, spected.Name); Assert.AreEqual(ogt.Description, spected.Description); Assert.AreEqual(ogt.Kind, spected.Kind); Assert.IsNotNull(spected.Fields); Assert.AreEqual(3, spected.Fields.Count); var expected0 = template.FieldTemplates[$"[type]/{nameof(IntrospectableObject)}/{nameof(IntrospectableObject.Method1)}"]; var expected1 = template.FieldTemplates[$"[type]/{nameof(IntrospectableObject)}/{nameof(IntrospectableObject.Method2)}"]; var expected2 = template.FieldTemplates[$"[type]/{nameof(IntrospectableObject)}/{nameof(IntrospectableObject.Prop1)}"]; var field0 = spected.Fields.FirstOrDefault(x => x.Name == nameof(IntrospectableObject.Method1)); var field1 = spected.Fields.FirstOrDefault(x => x.Name == nameof(IntrospectableObject.Method2)); var field2 = spected.Fields.FirstOrDefault(x => x.Name == nameof(IntrospectableObject.Prop1)); Assert.IsNotNull(field0); Assert.AreEqual(field0.Name, expected0.Name); Assert.AreEqual(nameof(TwoPropertyObject), field0.IntrospectedGraphType.Name); Assert.AreEqual(field0.Description, expected0.Description); Assert.AreEqual(field0.IsDeprecated, expected0.IsDeprecated); Assert.AreEqual(field0.DeprecationReason, expected0.DeprecationReason); Assert.AreEqual(2, field0.Arguments.Count); var arg1 = field0.Arguments[0]; var arg2 = field0.Arguments[1]; Assert.IsNotNull(arg1); Assert.AreEqual(expected0.Arguments[0].Name, arg1.Name); Assert.AreEqual(expected0.Arguments[0].Description, arg1.Description); var expectedDefault = $"\"{expected0.Arguments[0].DefaultValue}\""; Assert.AreEqual(expectedDefault, arg1.DefaultValue); Assert.IsNotNull(arg2); Assert.AreEqual(expected0.Arguments[1].Name, arg2.Name); Assert.AreEqual(expected0.Arguments[1].Description, arg2.Description); Assert.AreEqual(expected0.Arguments[1].DefaultValue?.ToString(), arg2.DefaultValue); Assert.IsNotNull(field1); Assert.AreEqual(field1.Name, expected1.Name); Assert.AreEqual(nameof(TwoPropertyObjectV2), field1.IntrospectedGraphType.Name); Assert.AreEqual(field1.Description, expected1.Description); Assert.AreEqual(field1.IsDeprecated, expected1.IsDeprecated); Assert.AreEqual(field1.DeprecationReason, expected1.DeprecationReason); Assert.AreEqual(0, field1.Arguments.Count); Assert.IsNotNull(field2); Assert.AreEqual(field2.Name, expected2.Name); Assert.AreEqual(TypeKind.NON_NULL, field2.IntrospectedGraphType.Kind); Assert.AreEqual(TypeKind.SCALAR, field2.IntrospectedGraphType.OfType.Kind); Assert.AreEqual(Constants.ScalarNames.LONG, field2.IntrospectedGraphType.OfType.Name); Assert.AreEqual(field2.Description, expected2.Description); Assert.AreEqual(field2.IsDeprecated, expected2.IsDeprecated); Assert.AreEqual(field2.DeprecationReason, expected2.DeprecationReason); Assert.AreEqual(0, field2.Arguments.Count); // the not null wrapper should all be null Assert.IsNull(field2.IntrospectedGraphType.Fields); Assert.IsNull(field2.IntrospectedGraphType.EnumValues); Assert.IsNull(field2.IntrospectedGraphType.Interfaces); Assert.IsNull(field2.IntrospectedGraphType.PossibleTypes); Assert.IsNull(field2.IntrospectedGraphType.InputFields); Assert.IsNull(field2.IntrospectedGraphType.Name); Assert.IsNull(field2.IntrospectedGraphType.Description); // objects shoudl always return an interface collection even if empty Assert.IsNotNull(spected.Interfaces); Assert.AreEqual(0, spected.Interfaces.Count); Assert.IsNull(spected.EnumValues); Assert.IsNull(spected.PossibleTypes); Assert.IsNull(spected.InputFields); Assert.IsNull(spected.OfType); }