Skip to content

Commit fbd4492

Browse files
Merge pull request #106 from TransactionProcessing/task/#104_refactorsubscriptionworker
Refactor Subscription Worker
2 parents 2899e19 + 8abc02b commit fbd4492

31 files changed

Lines changed: 1848 additions & 11 deletions

.github/workflows/createrelease.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ jobs:
2929
run: |
3030
echo "ASPNETCORE_ENVIRONMENT are > ${ASPNETCORE_ENVIRONMENT}"
3131
dotnet test "Shared.Tests\Shared.Tests.csproj"
32+
dotnet test "Shared.EventStore.Tests\Shared.EventStore.Tests.csproj"
3233
3334
- name: Build Nuget Packages
3435
run: |

.github/workflows/pullrequest.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,4 @@ jobs:
2626
run: |
2727
echo "ASPNETCORE_ENVIRONMENT are > ${ASPNETCORE_ENVIRONMENT}"
2828
dotnet test "Shared.Tests\Shared.Tests.csproj"
29+
dotnet test "Shared.EventStore.Tests\Shared.EventStore.Tests.csproj"
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
namespace Shared.EventStore.Tests
2+
{
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Threading;
6+
using System.Threading.Tasks;
7+
using EventHandling;
8+
using General;
9+
using Logger;
10+
using Shouldly;
11+
using SubscriptionWorker;
12+
using Xunit;
13+
14+
public class PersistentSubscriptionTests
15+
{
16+
public PersistentSubscriptionTests()
17+
{
18+
Shared.Logger.Logger.Initialise(NullLogger.Instance);
19+
20+
TypeMap.AddType<EstateCreatedEvent>("EstateCreatedEvent");
21+
}
22+
23+
[Fact]
24+
public async Task PersistentSubscription_CanBeCreatedAndReceiveEventsSingleEventHandler()
25+
{
26+
PersistentSubscriptionDetails persistentSubscriptionDetails = new("$ce-test", "local-1");
27+
List<IDomainEventHandler> eventHandlers = new();
28+
TestDomainEventHandler eventHandler = new();
29+
InMemoryPersistentSubscriptionsClient persistentSubscriptionsClient = new();
30+
CancellationToken cancellationToken = CancellationToken.None;
31+
32+
eventHandlers.Add(eventHandler);
33+
34+
var persistentSubscription = PersistentSubscription.Create(persistentSubscriptionsClient, persistentSubscriptionDetails, eventHandlers);
35+
36+
await persistentSubscription.ConnectToSubscription(cancellationToken);
37+
38+
persistentSubscription.Connected.ShouldBeTrue();
39+
40+
String @event = "{\r\n \"estateId\": \"4fc2692f-067a-443e-8006-335bf2732248\",\r\n \"estateName\": \"Demo Estate\"\r\n}\t";
41+
42+
//Manually add events.
43+
persistentSubscriptionsClient.WriteEvent(@event, "EstateCreatedEvent", cancellationToken);
44+
45+
//Crude - but a decent start point
46+
eventHandler.DomainEvents.Count.ShouldBe(1);
47+
}
48+
49+
[Fact]
50+
public async Task PersistentSubscription_CanBeCreatedAndFilterOutSystemEvent()
51+
{
52+
PersistentSubscriptionDetails persistentSubscriptionDetails = new("$ce-test", "local-1");
53+
List<IDomainEventHandler> eventHandlers = new();
54+
TestDomainEventHandler eventHandler = new();
55+
InMemoryPersistentSubscriptionsClient persistentSubscriptionsClient = new();
56+
CancellationToken cancellationToken = CancellationToken.None;
57+
58+
eventHandlers.Add(eventHandler);
59+
60+
var persistentSubscription =
61+
PersistentSubscription.Create(persistentSubscriptionsClient, persistentSubscriptionDetails, eventHandlers);
62+
63+
await persistentSubscription.ConnectToSubscription(cancellationToken);
64+
65+
persistentSubscription.Connected.ShouldBeTrue();
66+
67+
String @event = "";
68+
69+
//Manually add events.
70+
persistentSubscriptionsClient.WriteEvent(@event, "$", cancellationToken);
71+
72+
//Crude - but a decent start point
73+
eventHandler.DomainEvents.Count.ShouldBe(0);
74+
}
75+
76+
[Fact]
77+
public async Task PersistentSubscription_CanBeCreatedAndReceiveEventsMultipleEventHandler()
78+
{
79+
PersistentSubscriptionDetails persistentSubscriptionDetails = new("$ce-test", "local-1");
80+
List<IDomainEventHandler> eventHandlers = new();
81+
TestDomainEventHandler eventHandler1 = new();
82+
TestDomainEventHandler eventHandler2 = new();
83+
InMemoryPersistentSubscriptionsClient persistentSubscriptionsClient = new();
84+
CancellationToken cancellationToken = CancellationToken.None;
85+
86+
eventHandlers.AddRange(new[] { eventHandler1, eventHandler2 });
87+
88+
var persistentSubscription =
89+
PersistentSubscription.Create(persistentSubscriptionsClient, persistentSubscriptionDetails, eventHandlers);
90+
91+
await persistentSubscription.ConnectToSubscription(cancellationToken);
92+
93+
persistentSubscription.Connected.ShouldBeTrue();
94+
95+
String @event = "{\r\n \"estateId\": \"4fc2692f-067a-443e-8006-335bf2732248\",\r\n \"estateName\": \"Demo Estate\"\r\n}\t";
96+
97+
//Manually add events.
98+
persistentSubscriptionsClient.WriteEvent(@event, "EstateCreatedEvent", cancellationToken);
99+
100+
//Crude - but a decent start point
101+
eventHandler1.DomainEvents.Count.ShouldBe(1);
102+
eventHandler2.DomainEvents.Count.ShouldBe(1);
103+
}
104+
}
105+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net5.0</TargetFramework>
5+
6+
<IsPackable>false</IsPackable>
7+
</PropertyGroup>
8+
9+
<ItemGroup>
10+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" />
11+
<PackageReference Include="Moq" Version="4.16.0" />
12+
<PackageReference Include="Shouldly" Version="4.0.3" />
13+
<PackageReference Include="xunit" Version="2.4.1" />
14+
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
15+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
16+
<PrivateAssets>all</PrivateAssets>
17+
</PackageReference>
18+
<PackageReference Include="coverlet.collector" Version="3.0.2">
19+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
20+
<PrivateAssets>all</PrivateAssets>
21+
</PackageReference>
22+
</ItemGroup>
23+
24+
<ItemGroup>
25+
<ProjectReference Include="..\Shared.EventStore\Shared.EventStore.csproj" />
26+
</ItemGroup>
27+
28+
</Project>
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
namespace Shared.EventStore.Tests
2+
{
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Threading;
6+
using System.Threading.Tasks;
7+
using Shouldly;
8+
using SubscriptionWorker;
9+
using Xunit;
10+
11+
public class SubscriptionRepositoryTests
12+
{
13+
#region Methods
14+
15+
[Fact]
16+
public async Task SubscriptionRepository_GetSubscriptions_ReturnsSubscriptions()
17+
{
18+
List<PersistentSubscriptionInfo> allSubscriptions = (TestData.GetPersistentSubscriptions_DemoEstate());
19+
20+
Func<CancellationToken, Task<List<PersistentSubscriptionInfo>>> GetAllSubscriptions = async token => allSubscriptions;
21+
22+
ISubscriptionRepository subscriptionRepository = SubscriptionRepository.Create(GetAllSubscriptions);
23+
24+
PersistentSubscriptions list = await subscriptionRepository.GetSubscriptions(true, CancellationToken.None);
25+
26+
list.PersistentSubscriptionInfo.Count.ShouldBe(allSubscriptions.Count);
27+
}
28+
29+
#endregion
30+
}
31+
}

0 commit comments

Comments
 (0)