69 lines
2.7 KiB
C#
69 lines
2.7 KiB
C#
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 — the RPCs used by
|
|
/// <see cref="Robotico.Nexus.Client.Document.NexusDocumentClient"/> (Ping, CRUD, GetMany).
|
|
/// </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<DocumentCollectionGetManyResponse> CollectionGetMany(
|
|
DocumentCollectionGetManyRequest request,
|
|
ServerCallContext context)
|
|
{
|
|
DocumentCollectionGetManyResponse response = new() { Status = NexusStatuses.Ok };
|
|
foreach (string id in request.DocumentIds)
|
|
{
|
|
if (!_documents.TryGetValue((request.CollectionName, id), out string? body))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
response.Documents.Add(new DocumentCollectionDocumentWire
|
|
{
|
|
DocumentId = id,
|
|
JsonBody = body,
|
|
});
|
|
}
|
|
|
|
return Task.FromResult(response);
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public override Task<DocumentDeleteResponse> DeleteDocument(DocumentDeleteRequest request, ServerCallContext context)
|
|
{
|
|
_documents.Remove((request.CollectionName, request.DocumentId));
|
|
return Task.FromResult(new DocumentDeleteResponse { Status = NexusStatuses.Ok });
|
|
}
|
|
}
|