feat(batch5): implement jetstream error helpers and group01 constructors
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
// Copyright 2020-2026 The NATS Authors
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
|
||||
using Shouldly;
|
||||
|
||||
namespace ZB.MOM.NatsNet.Server.Tests.JetStream;
|
||||
|
||||
public sealed class JetStreamErrorsGeneratedConstructorsTests
|
||||
{
|
||||
[Fact]
|
||||
public void ConstructorSurface_Group01()
|
||||
{
|
||||
JsApiErrors.NewJSAccountResourcesExceededError().ErrCode.ShouldBe(JsApiErrors.AccountResourcesExceeded.ErrCode);
|
||||
JsApiErrors.NewJSAtomicPublishContainsDuplicateMessageError().ErrCode.ShouldBe(JsApiErrors.AtomicPublishContainsDuplicateMessage.ErrCode);
|
||||
JsApiErrors.NewJSAtomicPublishDisabledError().ErrCode.ShouldBe(JsApiErrors.AtomicPublishDisabled.ErrCode);
|
||||
JsApiErrors.NewJSAtomicPublishIncompleteBatchError().ErrCode.ShouldBe(JsApiErrors.AtomicPublishIncompleteBatch.ErrCode);
|
||||
JsApiErrors.NewJSAtomicPublishInvalidBatchCommitError().ErrCode.ShouldBe(JsApiErrors.AtomicPublishInvalidBatchCommit.ErrCode);
|
||||
JsApiErrors.NewJSAtomicPublishInvalidBatchIDError().ErrCode.ShouldBe(JsApiErrors.AtomicPublishInvalidBatchID.ErrCode);
|
||||
JsApiErrors.NewJSAtomicPublishMissingSeqError().ErrCode.ShouldBe(JsApiErrors.AtomicPublishMissingSeq.ErrCode);
|
||||
JsApiErrors.NewJSBadRequestError().ErrCode.ShouldBe(JsApiErrors.BadRequest.ErrCode);
|
||||
JsApiErrors.NewJSClusterIncompleteError().ErrCode.ShouldBe(JsApiErrors.ClusterIncomplete.ErrCode);
|
||||
JsApiErrors.NewJSClusterNotActiveError().ErrCode.ShouldBe(JsApiErrors.ClusterNotActive.ErrCode);
|
||||
JsApiErrors.NewJSClusterNotAssignedError().ErrCode.ShouldBe(JsApiErrors.ClusterNotAssigned.ErrCode);
|
||||
JsApiErrors.NewJSClusterNotAvailError().ErrCode.ShouldBe(JsApiErrors.ClusterNotAvail.ErrCode);
|
||||
JsApiErrors.NewJSClusterNotLeaderError().ErrCode.ShouldBe(JsApiErrors.ClusterNotLeader.ErrCode);
|
||||
JsApiErrors.NewJSClusterPeerNotMemberError().ErrCode.ShouldBe(JsApiErrors.ClusterPeerNotMember.ErrCode);
|
||||
|
||||
JsApiErrors.NewJSAtomicPublishTooLargeBatchError(512).Description.ShouldBe("atomic publish batch is too large: 512");
|
||||
JsApiErrors.NewJSAtomicPublishUnsupportedHeaderBatchError("Nats-Msg-Id").Description.ShouldBe("atomic publish unsupported header used: Nats-Msg-Id");
|
||||
JsApiErrors.NewJSClusterNoPeersError(new InvalidOperationException("no peers")).Description.ShouldBe("no peers");
|
||||
|
||||
var expected = new JsApiError { Code = 499, ErrCode = 9090, Description = "override" };
|
||||
var fromOverride = JsApiErrors.NewJSAccountResourcesExceededError(JsApiErrors.Unless(expected));
|
||||
fromOverride.Code.ShouldBe(expected.Code);
|
||||
fromOverride.ErrCode.ShouldBe(expected.ErrCode);
|
||||
fromOverride.Description.ShouldBe(expected.Description);
|
||||
ReferenceEquals(fromOverride, expected).ShouldBeFalse();
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
// Copyright 2020-2026 The NATS Authors
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
|
||||
using System.Reflection;
|
||||
using Shouldly;
|
||||
|
||||
namespace ZB.MOM.NatsNet.Server.Tests.JetStream;
|
||||
@@ -97,4 +98,39 @@ public sealed class JetStreamErrorsTests
|
||||
JsApiErrors.NewJSPeerRemapError(JsApiErrors.Unless(new Exception("other error"))),
|
||||
peerRemap).ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseOpts_WithUnlessApiErrorOption_ReturnsOverride()
|
||||
{
|
||||
var parseOpts = typeof(JsApiErrors).GetMethod(
|
||||
"ParseOpts",
|
||||
BindingFlags.NonPublic | BindingFlags.Static);
|
||||
|
||||
parseOpts.ShouldNotBeNull();
|
||||
|
||||
var expected = new JsApiError { Code = 401, ErrCode = 2048, Description = "override" };
|
||||
var result = parseOpts.Invoke(
|
||||
null,
|
||||
[new JsApiErrors.ErrorOption[] { JsApiErrors.Unless(expected) }]);
|
||||
|
||||
result.ShouldBeAssignableTo<JsApiError>()
|
||||
.ErrCode.ShouldBe(expected.ErrCode);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToReplacerArgs_WithStringErrorAndObject_ConvertsToStringValues()
|
||||
{
|
||||
var toReplacerArgs = typeof(JsApiErrors).GetMethod(
|
||||
"ToReplacerArgs",
|
||||
BindingFlags.NonPublic | BindingFlags.Static);
|
||||
|
||||
toReplacerArgs.ShouldNotBeNull();
|
||||
|
||||
var result = toReplacerArgs.Invoke(
|
||||
null,
|
||||
[new object?[] { "{string}", "value", "{error}", new InvalidOperationException("boom"), "{number}", 42 }]);
|
||||
|
||||
result.ShouldBeAssignableTo<string[]>()
|
||||
.ShouldBe(["{string}", "value", "{error}", "boom", "{number}", "42"]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user