mishima-nexus-client-csharp/tests/Robotico.Nexus.Client.Tests/TestSupport/FakeDocumentEngineService.cs

46 lines
2.0 KiB
C#
Raw Normal View History

using Grpc.Core;
using Mishima.Nexus.Wire.V1;
namespace Robotico.Nexus.Client.Tests.TestSupport;
/// <summary>
/// In-memory fake standing in for a real Nexus document engine host — only the RPCs used by
/// <see cref="Robotico.Nexus.Client.Document.NexusDocumentClient"/> (Ping + single-document CRUD).
/// </summary>
public sealed class FakeDocumentEngineService : NexusDocumentEngineService.NexusDocumentEngineServiceBase
{
private readonly Dictionary<(string Collection, string Id), string> _documents = [];
/// <inheritdoc />
public override Task<DocumentPingResponse> Ping(DocumentPingRequest request, ServerCallContext context)
{
NexusStatus? failure = FakeNexusTriggers.TryStatusFailure(context);
return Task.FromResult(new DocumentPingResponse { Status = failure ?? NexusStatuses.Ok, EngineVersion = "fake" });
}
/// <inheritdoc />
public override Task<DocumentUpsertResponse> UpsertDocument(DocumentUpsertRequest request, ServerCallContext context)
{
_documents[(request.CollectionName, request.DocumentId)] = request.JsonBody;
return Task.FromResult(new DocumentUpsertResponse { Status = NexusStatuses.Ok });
}
/// <inheritdoc />
public override Task<DocumentGetResponse> GetDocument(DocumentGetRequest request, ServerCallContext context)
{
if (_documents.TryGetValue((request.CollectionName, request.DocumentId), out string? body))
{
return Task.FromResult(new DocumentGetResponse { Status = NexusStatuses.Ok, Found = true, JsonBody = body });
}
return Task.FromResult(new DocumentGetResponse { Status = NexusStatuses.Ok, Found = false });
}
/// <inheritdoc />
public override Task<DocumentDeleteResponse> DeleteDocument(DocumentDeleteRequest request, ServerCallContext context)
{
_documents.Remove((request.CollectionName, request.DocumentId));
return Task.FromResult(new DocumentDeleteResponse { Status = NexusStatuses.Ok });
}
}