Fluent Provider #11
20
src/Contracts/Subscribers/DataSubscriber.cs
Normal file
20
src/Contracts/Subscribers/DataSubscriber.cs
Normal file
|
@ -0,0 +1,20 @@
|
|||
using System.Collections.Immutable;
|
||||
|
||||
namespace ProSol.Messaging;
|
||||
|
||||
public sealed class DataSubscriber<TMessage> : ISubscriber<TMessage>
|
||||
{
|
||||
private readonly List<TMessage> messages = [];
|
||||
|
||||
public ImmutableArray<TMessage> Messages => [..messages];
|
||||
|
||||
public void OnCompleted()
|
||||
{
|
||||
messages.Clear();
|
||||
}
|
||||
|
||||
public void OnNext(TMessage message)
|
||||
{
|
||||
messages.Add(message);
|
||||
}
|
||||
}
|
|
@ -14,7 +14,7 @@ public abstract class TranslatorBase<TSource, TDest>
|
|||
var dest = ConvertMessage(message);
|
||||
if (dest != null && destSubscriber != null)
|
||||
{
|
||||
PublishHelper.Publish(message, destSubscriber);
|
||||
PublishHelper.Publish(dest, destSubscriber);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
global using NUnit.Framework;
|
||||
global using FakeItEasy;
|
||||
global using NUnit.Framework;
|
|
@ -10,7 +10,6 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FakeItEasy" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" />
|
||||
<PackageReference Include="NUnit" Version="3.13.3" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
|
||||
|
@ -18,8 +17,8 @@
|
|||
<PackageReference Include="coverlet.collector" Version="6.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\src\Subscriptions\Subscriptions.csproj" />
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\src\Subscriptions\Subscriptions.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
using FakeItEasy;
|
||||
using ProSol.Messaging;
|
||||
using ProSol.Messaging.Translating;
|
||||
|
||||
|
@ -12,18 +11,15 @@ public class MessageTranslatorTests
|
|||
// Arrange configs.
|
||||
string[] input = ["Hello", "World!"];
|
||||
bool[] expected = [false, true];
|
||||
List<bool> messages = [];
|
||||
|
||||
// Arrange operations.
|
||||
var fakeListener = A.Fake<ISubscriber<bool>>();
|
||||
A.CallTo(() => fakeListener.OnNext(A<bool>._))
|
||||
.Invokes((bool i) => messages.Add(i));
|
||||
var dataSubscriber = new DataSubscriber<bool>();
|
||||
|
||||
var publisher = new TestPublisher<string>();
|
||||
using var unsub = publisher
|
||||
.Translate<string, int>(x => x.Length)
|
||||
.Translate<int, bool>(x => x > 5)
|
||||
.Subscribe(fakeListener);
|
||||
.Subscribe(dataSubscriber);
|
||||
alexenko marked this conversation as resolved
|
||||
|
||||
// Act.
|
||||
foreach(var item in input)
|
||||
|
@ -32,7 +28,7 @@ public class MessageTranslatorTests
|
|||
}
|
||||
|
||||
// Assert.
|
||||
Assert.That(messages, Is.EquivalentTo(expected));
|
||||
Assert.That(dataSubscriber.Messages, Is.EquivalentTo(expected));
|
||||
}
|
||||
|
||||
public class TestPublisher<TData> : IPublisher<TData>
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FakeItEasy" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" />
|
||||
<PackageReference Include="NUnit" Version="3.13.3" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
|
||||
|
|
Loading…
Reference in a new issue
cool