Files
WireMock.Net/test/WireMock.Net.Tests/Matchers/ProtoBufMatcherTests.cs
Stef Heyenrath 43be85a88a ct
2026-02-21 17:21:18 +01:00

108 lines
3.0 KiB
C#

// Copyright © WireMock.Net
using AwesomeAssertions;
using ProtoBuf;
using WireMock.Matchers;
using WireMock.Models;
namespace WireMock.Net.Tests.Matchers;
public class ProtoBufMatcherTests
{
private readonly CancellationToken _ct = TestContext.Current.CancellationToken;
private const string MessageType = "greet.HelloRequest";
private static IdOrTexts ProtoDefinition => new(null, @"
syntax = ""proto3"";
package greet;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
" + "\r\n// Dummy " + Guid.NewGuid());
[Fact]
public async Task ProtoBufMatcher_For_ValidProtoBuf_And_ValidMethod_DecodeAsync()
{
// Arrange
var bytes = Convert.FromBase64String("CgRzdGVm");
// Act
var matcher = new ProtoBufMatcher(() => ProtoDefinition, MessageType);
var result = await matcher.DecodeAsync(bytes, _ct);
// Assert
result.Should().BeEquivalentTo(new { name = "stef" });
}
[Fact]
public async Task ProtoBufMatcher_For_ValidProtoBuf_And_ValidMethod_NoJsonMatchers_IsMatchAsync()
{
// Arrange
var bytes = Convert.FromBase64String("CgRzdGVm");
// Act
var matcher = new ProtoBufMatcher(() => ProtoDefinition, MessageType);
var result = await matcher.IsMatchAsync(bytes, _ct);
// Assert
result.Score.Should().Be(MatchScores.Perfect);
result.Exception.Should().BeNull();
}
[Fact]
public async Task ProtoBufMatcher_For_ValidProtoBuf_And_ValidMethod_Using_JsonMatcher_IsMatchAsync()
{
// Arrange
var jsonMatcher = new JsonMatcher(new { name = "stef" });
var bytes = Convert.FromBase64String("CgRzdGVm");
// Act
var matcher = new ProtoBufMatcher(() => ProtoDefinition, MessageType, matcher: jsonMatcher);
var result = await matcher.IsMatchAsync(bytes, _ct);
// Assert
result.Score.Should().Be(MatchScores.Perfect);
result.Exception.Should().BeNull();
}
[Fact]
public async Task ProtoBufMatcher_For_InvalidProtoBuf_IsNoMatch()
{
// Arrange
var bytes = new byte[] { 1, 2, 3 };
// Act
var matcher = new ProtoBufMatcher(() => ProtoDefinition, MessageType);
var result = await matcher.IsMatchAsync(bytes, _ct);
// Assert
result.Score.Should().Be(MatchScores.Mismatch);
result.Exception.Should().BeOfType<ProtoException>();
}
[Fact]
public async Task ProtoBufMatcher_For_InvalidMethod_IsNoMatchAsync()
{
// Arrange
var bytes = Convert.FromBase64String("CgRzdGVm");
// Act
var matcher = new ProtoBufMatcher(() => ProtoDefinition, "greet.Greeter.X");
var result = await matcher.IsMatchAsync(bytes, _ct);
// Assert
result.Score.Should().Be(MatchScores.Mismatch);
result.Exception.Should().BeOfType<ArgumentException>();
}
}