using ZB.MOM.WW.LmxProxy.Client.Domain;

namespace ZB.MOM.WW.LmxProxy.Client.IntegrationTests;

public class WriteTests : IntegrationTestBase
{
    [Fact]
    public async Task WriteAndReadBack_StringValue()
    {
        string testValue = $"IntTest-{DateTime.UtcNow:HHmmss}";
        await Client!.WriteAsync("TestChildObject.TestString",
            new TypedValue { StringValue = testValue });

        await Task.Delay(500); // Allow time for write to propagate
        var vtq = await Client.ReadAsync("TestChildObject.TestString");
        Assert.Equal(testValue, vtq.Value);
    }

    [Fact]
    public async Task WriteWithReadOnlyKey_ThrowsPermissionDenied()
    {
        using var readOnlyClient = CreateClient(ReadOnlyApiKey);
        await readOnlyClient.ConnectAsync();

        var ex = await Assert.ThrowsAsync<Grpc.Core.RpcException>(
            () => readOnlyClient.WriteAsync("TestChildObject.TestString",
                new TypedValue { StringValue = "should-fail" }));
        Assert.Equal(Grpc.Core.StatusCode.PermissionDenied, ex.StatusCode);
    }
}
