106 lines
4.6 KiB
C#
106 lines
4.6 KiB
C#
using AyCode.Core.Extensions;
|
|
using AyCode.Core.Serializers.Jsons;
|
|
using AyCode.Services.SignalRs;
|
|
|
|
namespace AyCode.Services.Tests.SignalRs;
|
|
|
|
[TestClass]
|
|
public class PostJsonDataMessageTests
|
|
{
|
|
[TestMethod]
|
|
public void Debug_CreatePostMessage_ForInt()
|
|
{
|
|
var message = CreatePostMessageTest(42);
|
|
|
|
Console.WriteLine($"Message type: {message.GetType().Name}");
|
|
|
|
if (message is SignalPostJsonDataMessage<IdMessage> idMsg)
|
|
{
|
|
Console.WriteLine($"PostDataJson: {idMsg.PostDataJson}");
|
|
Console.WriteLine($"PostData.Ids.Count: {idMsg.PostData.Ids.Count}");
|
|
Console.WriteLine($"PostData.Ids[0]: {idMsg.PostData.Ids[0]}");
|
|
}
|
|
|
|
var bytes = message.ToBinary();
|
|
Console.WriteLine($"Binary bytes: {bytes.Length}");
|
|
|
|
var deserialized = bytes.BinaryTo<SignalPostJsonDataMessage<IdMessage>>();
|
|
Console.WriteLine($"Deserialized PostDataJson: {deserialized?.PostDataJson}");
|
|
Console.WriteLine($"Deserialized PostData type: {deserialized?.PostData?.GetType().Name}");
|
|
Console.WriteLine($"Deserialized PostData.Ids.Count: {deserialized?.PostData?.Ids.Count}");
|
|
|
|
Assert.IsNotNull(deserialized?.PostData);
|
|
Assert.AreEqual(1, deserialized.PostData.Ids.Count);
|
|
}
|
|
|
|
[TestMethod]
|
|
[DataRow(42)]
|
|
[DataRow("45")]
|
|
[DataRow(true)]
|
|
public void IdMessage_FullRoundTrip_AnyParameter(object testValue)
|
|
{
|
|
dynamic GetValueByType(object value)
|
|
{
|
|
if (value is int valueInt) return valueInt;
|
|
if (value is bool valueBool) return valueBool;
|
|
if (value is string valueString) return valueString;
|
|
|
|
Assert.Fail($"Type of testValue not implemented");
|
|
return null;
|
|
}
|
|
|
|
Console.WriteLine("=== Step 1: Client creates message ===");
|
|
var idMessage = new IdMessage(GetValueByType(testValue));
|
|
Console.WriteLine($"IdMessage.Ids[0]: '{idMessage.Ids[0]}'");
|
|
|
|
var clientMessage = new SignalPostJsonDataMessage<IdMessage>(idMessage);
|
|
Console.WriteLine($"Client PostDataJson: '{clientMessage.PostDataJson}'");
|
|
|
|
Console.WriteLine("\n=== Step 2: Binary serialization ===");
|
|
var bytes = clientMessage.ToBinary();
|
|
Console.WriteLine($"Binary bytes: {bytes.Length}");
|
|
|
|
Console.WriteLine("\n=== Step 3: Server deserializes ===");
|
|
var serverMessage = bytes.BinaryTo<SignalPostJsonDataMessage<IdMessage>>();
|
|
Console.WriteLine($"Server PostDataJson: '{serverMessage?.PostDataJson}'");
|
|
Console.WriteLine($"Server PostData.Ids.Count: {serverMessage?.PostData?.Ids.Count}");
|
|
Console.WriteLine($"Server PostData.Ids[0]: '{serverMessage?.PostData?.Ids[0]}'");
|
|
|
|
Console.WriteLine("\n=== Step 4: Server deserializes parameter ===");
|
|
var paramJson = serverMessage!.PostData.Ids[0];
|
|
Console.WriteLine($"Parameter JSON: '{paramJson}'");
|
|
var paramValue = AcJsonDeserializer.Deserialize(paramJson, testValue.GetType());
|
|
Console.WriteLine($"Deserialized value: {paramValue}");
|
|
|
|
Console.WriteLine("\n=== Step 5: Service method returns ===");
|
|
var serviceResult = $"{paramValue}";
|
|
Console.WriteLine($"Service result: '{serviceResult}'");
|
|
|
|
Console.WriteLine("\n=== Step 6: Server creates response ===");
|
|
var response = new SignalResponseDataMessage(100, SignalResponseStatus.Success, serviceResult, AcJsonSerializerOptions.Default);
|
|
Console.WriteLine($"Response created with Binary bytes: {response.ResponseData?.Length ?? 0}");
|
|
|
|
Console.WriteLine("\n=== Step 7: Response Binary ===");
|
|
var responseBytes = response.ToBinary();
|
|
Console.WriteLine($"Response Binary bytes: {responseBytes.Length}");
|
|
|
|
Console.WriteLine("\n=== Step 8: Client deserializes response ===");
|
|
var clientResponse = responseBytes.BinaryTo<SignalResponseDataMessage>();
|
|
Console.WriteLine($"Client Response Status: {clientResponse?.Status}");
|
|
|
|
Console.WriteLine("\n=== Step 9: Client deserializes to string ===");
|
|
var finalResult = clientResponse?.GetResponseData<string>();
|
|
Console.WriteLine($"Final result: '{finalResult}'");
|
|
Assert.AreEqual(GetValueByType(testValue).ToString(), finalResult);
|
|
}
|
|
|
|
private static ISignalRMessage CreatePostMessageTest<TPostData>(TPostData postData)
|
|
{
|
|
var type = typeof(TPostData);
|
|
|
|
if (type == typeof(string) || type.IsEnum || type.IsValueType || type == typeof(DateTime))
|
|
return new SignalPostJsonDataMessage<IdMessage>(new IdMessage(postData!));
|
|
|
|
return new SignalPostJsonDataMessage<TPostData>(postData);
|
|
}
|
|
} |