using System; using System.Threading; using System.Threading.Tasks; using Microsoft.VisualStudio.TestTools.UnitTesting; using StrawberryShake; using Tgstation.Server.Client.GraphQL; namespace Tgstation.Server.Tests.Live { static class GraphQLServerClientExtensions { public static async ValueTask RunQueryEnsureNoErrors( this IGraphQLServerClient serverClient, Func>> operationExecutor, CancellationToken cancellationToken) where TResultData : class { var result = await serverClient.RunOperation(operationExecutor, cancellationToken); result.EnsureNoErrors(); return result.Data; } public static async ValueTask RunMutationEnsureNoErrors( this IGraphQLServerClient serverClient, Func>> operationExecutor, Func payloadSelector, CancellationToken cancellationToken) where TResultData : class { var result = await serverClient.RunOperation(operationExecutor, cancellationToken); result.EnsureNoErrors(); var data = payloadSelector(result.Data); Assert.AreNotSame(result.Data, data, "Select the mutation payload from the operation result!"); var errorsObject = data.GetType().GetProperty("Errors").GetValue(data); if (errorsObject != null) { var errorsCount = (int)errorsObject.GetType().GetProperty("Count").GetValue(errorsObject); Assert.AreEqual(0, errorsCount); } return data; } } }