Interfaces

Specification

Interfaces are created as instances of InterfaceType.

Creating interface

Define with non-null scalar field


        [Fact]
        public void Define_interface()
        {
            /* Given */
            /* When */
            _builder.Interface("NamedEntity", out var namedEntity)
                .Connections(connect => connect
                .Field(namedEntity, "name", ScalarType.NonNullString));

            var schema = _builder.Build();

            /* Then */
            var namedEntityFields = schema.GetFields(namedEntity.Name);
            Assert.Equal("NamedEntity", namedEntity.Name);
            Assert.Single(namedEntityFields, fk => fk.Key == "name"
                                                    && (NonNull) fk.Value.Type == ScalarType.NonNullString);
        }

Implementing interface

Object implements interface


        [Fact]
        public void Implement_interface()
        {
            /* Given */
            _builder.Interface("NamedEntity", out var namedEntity)
                .Connections(connect => connect
                .Field(namedEntity, "name", ScalarType.NonNullString));

            _builder.Object("Person", out var person, interfaces: new []{namedEntity})
                .Connections(connect => connect
                .Field(person, "name", ScalarType.NonNullString));

            /* When */
            //todo: interfaces should be behind a connection
            var implements = person.Implements(namedEntity);

            /* Then */
            Assert.True(implements);
        }