mirror of
https://github.com/tgstation/tgstation-server.git
synced 2026-04-04 11:24:30 +01:00
49 lines
1.5 KiB
C#
49 lines
1.5 KiB
C#
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<TResultData> RunQueryEnsureNoErrors<TResultData>(
|
|
this IGraphQLServerClient serverClient,
|
|
Func<IGraphQLClient, Task<IOperationResult<TResultData>>> operationExecutor,
|
|
CancellationToken cancellationToken)
|
|
where TResultData : class
|
|
{
|
|
var result = await serverClient.RunOperation(operationExecutor, cancellationToken);
|
|
result.EnsureNoErrors();
|
|
return result.Data;
|
|
}
|
|
|
|
public static async ValueTask<TPayload> RunMutationEnsureNoErrors<TResultData, TPayload>(
|
|
this IGraphQLServerClient serverClient,
|
|
Func<IGraphQLClient, Task<IOperationResult<TResultData>>> operationExecutor,
|
|
Func<TResultData, TPayload> payloadSelector,
|
|
CancellationToken cancellationToken)
|
|
where TResultData : class
|
|
{
|
|
var result = await serverClient.RunOperation(operationExecutor, cancellationToken);
|
|
result.EnsureNoErrors();
|
|
var data = payloadSelector(result.Data);
|
|
Assert.AreNotSame<object>(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;
|
|
}
|
|
}
|
|
}
|