Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Text.Json;
using System.Numerics;
using System.Text.Json;
using Moq;
using NUnit.Framework;

Expand Down Expand Up @@ -53,4 +54,33 @@ public void SerializeGivenGraphQlParameterReturnsExpectedJson()
// Verify
MockParameter.Verify();
}

[Test]
public void SerializeGivenListGraphQlParameterReturnsExpectedJson()
{
// Arrange - Data
const string expected = @"{""key"":[{""param1"":1},{""param2"":true}]}";
var parameter1 = new TestGraphQlParameter();
parameter1.Set("param1", new BigInteger(1));
var parameter2 = new TestGraphQlParameter();
parameter2.Set("param2", true);
Dictionary<string, object?> parameters = new()
{
{ "key", new List<IGraphQlParameter> {parameter1, parameter2} },
};

// Arrange - Stubbing
MockParameter.Setup(mock => mock.Parameters)
.Returns(parameters)
.Verifiable($"Verify call to {nameof(MockParameter.Object.Parameters)} on ${nameof(MockParameter)}");

// Act
string actual = JsonSerializer.Serialize(MockParameter.Object, Options);

// Assert
Assert.That(actual, Is.EqualTo(expected));

// Verify
MockParameter.Verify();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace Enjin.Platform.Sdk.Tests;

public sealed class TestGraphQlParameter : GraphQlParameter<TestGraphQlParameter>
{
public TestGraphQlParameter Set<T>(string name, T? amount)
{
return SetParameter(name, amount);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Numerics;
using System.Text.Json;
using System.Text.Json.Serialization;
using JetBrains.Annotations;
Expand Down Expand Up @@ -29,11 +31,34 @@ public override TValue Read(ref Utf8JsonReader reader, Type typeToConvert, JsonS
public override void Write(Utf8JsonWriter writer, TValue value, JsonSerializerOptions options)
{
writer.WriteStartObject();

foreach (KeyValuePair<string, object?> variable in value.Parameters)
foreach (var variable in value.Parameters)
{
writer.WritePropertyName(variable.Key);
writer.WriteRawValue(JsonSerializer.Serialize(variable.Value, options));
if (variable.Value is List<IGraphQlParameter> array)
{
writer.WritePropertyName(variable.Key);
writer.WriteStartArray();
foreach (var item in array)
{
writer.WriteStartObject();
foreach (var parameter in item.Parameters)
{
writer.WritePropertyName(parameter.Key);
if (parameter.Value is BigInteger val)
writer.WriteRawValue(val.ToString(CultureInfo.InvariantCulture));
else
writer.WriteRawValue(JsonSerializer.Serialize(parameter.Value, options));
}

writer.WriteEndObject();
}

writer.WriteEndArray();
}
else
{
writer.WritePropertyName(variable.Key);
writer.WriteRawValue(JsonSerializer.Serialize(variable.Value, options));
}
}

writer.WriteEndObject();
Expand Down