Directives
Directive types are created as instance of DirectiveDefinition
. When used with other types instances of Directive
are used.
Built-in directives for executable documents are:
@include(if: Boolean!)
: Only include this field in the result if the argument is true.@skip(if: Boolean!)
: Skip this field if the argument is true.
Built-in directives for schema documents are:
@deprecated(reason: String)
: Marks an element of a GraphQL schema as no longer supported.@specifiedBy(url: String!)
: Exposes a URL that specifies the behaviour of this scalar.
For custom schema directive see Apply Directives for example.
Examples
using Tanka.GraphQL.Language.Nodes.TypeSystem;
using Xunit;
namespace Tanka.GraphQL.Language.Tests.Nodes;
public class DirectiveDefinitionFacts
{
[Fact]
public void FromBytes()
{
/* Given */
/* When */
DirectiveDefinition original = "directive @a(x: Int, y: Float) on FIELD"u8;
/* Then */
Assert.Equal("a", original.Name);
}
[Fact]
public void FromString()
{
/* Given */
/* When */
DirectiveDefinition original = "directive @a(x: Int, y: Float) on FIELD";
/* Then */
Assert.Equal("a", original.Name);
}
[Fact]
public void WithDescription()
{
/* Given */
DirectiveDefinition original = @"directive @a on SCHEMA";
/* When */
DirectiveDefinition modified = original
.WithDescription("Description");
/* Then */
Assert.Null(original.Description);
Assert.Equal("Description", modified.Description);
}
[Fact]
public void WithName()
{
/* Given */
DirectiveDefinition original = @"directive @a on SCHEMA";
/* When */
DirectiveDefinition modified = original
.WithName("b");
/* Then */
Assert.Equal("a", original.Name);
Assert.Equal("b", modified.Name);
}
[Fact]
public void WithArguments()
{
/* Given */
DirectiveDefinition original = @"directive @a on SCHEMA";
/* When */
DirectiveDefinition modified = original
.WithArguments(new InputValueDefinition[] { "x: Int" });
/* Then */
Assert.Equal(1, modified.Arguments?.Count);
}
[Fact]
public void WithDirectiveLocations()
{
/* Given */
DirectiveDefinition original = @"directive @a on SCHEMA";
/* When */
DirectiveDefinition modified = original
.WithDirectiveLocations(new[] { "FIELD" });
/* Then */
string location = Assert.Single(modified.DirectiveLocations);
Assert.Equal("FIELD", location);
}
}
using System.Collections.Generic;
using System.Linq;
using Tanka.GraphQL.Language.Nodes;
using Xunit;
namespace Tanka.GraphQL.Language.Tests.Nodes;
public class DirectiveFacts
{
[Fact]
public void FromBytes()
{
/* Given */
/* When */
Directive original = "@a(x: 100, y: 100)"u8;
/* Then */
Assert.Equal("a", original.Name);
Assert.NotNull(original.Arguments);
Assert.Equal(2, original.Arguments?.Count);
}
[Fact]
public void FromString()
{
/* Given */
/* When */
Directive original = "@a(x: 100, y: 100)";
/* Then */
Assert.Equal("a", original.Name);
Assert.NotNull(original.Arguments);
Assert.Equal(2, original.Arguments?.Count);
}
[Fact]
public void WithArguments()
{
/* Given */
Directive original = "@a(x: 100, y: 100)";
/* When */
Directive modified = original
.WithArguments(
new List<Argument>(original.Arguments ?? Enumerable.Empty<Argument>())
.Concat(new[] { new Argument("x", new IntValue(100)) }).ToList()
);
/* Then */
Assert.Equal(2, original.Arguments?.Count);
Assert.Equal(3, modified.Arguments?.Count);
}
[Fact]
public void WithName()
{
/* Given */
Directive original = "@a(x: 100, y: 100)";
/* When */
Directive modified = original
.WithName("b");
/* Then */
Assert.Equal("a", original.Name);
Assert.Equal("b", modified.Name);
}
}