Files
WireMock.Net/test/WireMock.Net.Tests/Matchers/ProtoBufMatcherTests.cs
Stef Heyenrath 54edf0bebc Add link to TIOBE Index on main page + fix issues (#1137)
* Add TIOBE + include SonarAnalyzer.CSharp

* .

* cp

* Copyright © WireMock.Net

* more fixes

* fix

* xpath

* if (Matchers == null || !Matchers.Any())

* if (Matchers != null)

* ?

* .

* .
2024-07-18 18:06:04 +02:00

110 lines
2.9 KiB
C#

// Copyright © WireMock.Net
#if PROTOBUF
using System;
using System.Threading.Tasks;
using FluentAssertions;
using ProtoBuf;
using WireMock.Matchers;
using WireMock.Models;
using Xunit;
namespace WireMock.Net.Tests.Matchers;
public class ProtoBufMatcherTests
{
private const string MessageType = "greet.HelloRequest";
private readonly IdOrText _protoDefinition = new(null, @"
syntax = ""proto3"";
package greet;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
");
[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).ConfigureAwait(false);
// 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).ConfigureAwait(false);
// 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);
// 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);
// 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);
// Assert
result.Score.Should().Be(MatchScores.Mismatch);
result.Exception.Should().BeOfType<ArgumentException>();
}
}
#endif