Skip to content

Commit e9cbfd4

Browse files
author
Bart Koelman
committed
Added tests for fire-and-forget
1 parent e126c60 commit e9cbfd4

33 files changed

+1507
-130
lines changed

JsonApiDotNetCore.sln.DotSettings

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,7 @@ $left$ = $right$;</s:String>
621621
<s:Boolean x:Key="/Default/UserDictionary/Words/=Assignee/@EntryIndexedValue">True</s:Boolean>
622622
<s:Boolean x:Key="/Default/UserDictionary/Words/=Injectables/@EntryIndexedValue">True</s:Boolean>
623623
<s:Boolean x:Key="/Default/UserDictionary/Words/=linebreaks/@EntryIndexedValue">True</s:Boolean>
624+
<s:Boolean x:Key="/Default/UserDictionary/Words/=Microservices/@EntryIndexedValue">True</s:Boolean>
624625
<s:Boolean x:Key="/Default/UserDictionary/Words/=navigations/@EntryIndexedValue">True</s:Boolean>
625626
<s:Boolean x:Key="/Default/UserDictionary/Words/=playlists/@EntryIndexedValue">True</s:Boolean>
626627
<s:Boolean x:Key="/Default/UserDictionary/Words/=Rewriter/@EntryIndexedValue">True</s:Boolean>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// @formatter:wrap_chained_method_calls chop_always
66
// @formatter:keep_existing_linebreaks true
77

8-
namespace JsonApiDotNetCoreExampleTests.IntegrationTests.ResourceDefinitions.Writing.TransactionalOutboxPattern
8+
namespace JsonApiDotNetCoreExampleTests.IntegrationTests.ResourceDefinitions.Writing
99
{
1010
internal sealed class DomainFakers : FakerContainer
1111
{
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using JsonApiDotNetCore.Resources;
55
using JsonApiDotNetCore.Resources.Annotations;
66

7-
namespace JsonApiDotNetCoreExampleTests.IntegrationTests.ResourceDefinitions.Writing.TransactionalOutboxPattern
7+
namespace JsonApiDotNetCoreExampleTests.IntegrationTests.ResourceDefinitions.Writing
88
{
99
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
1010
public sealed class DomainGroup : Identifiable<Guid>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using JsonApiDotNetCore.Services;
55
using Microsoft.Extensions.Logging;
66

7-
namespace JsonApiDotNetCoreExampleTests.IntegrationTests.ResourceDefinitions.Writing.TransactionalOutboxPattern
7+
namespace JsonApiDotNetCoreExampleTests.IntegrationTests.ResourceDefinitions.Writing
88
{
99
public sealed class DomainGroupsController : JsonApiController<DomainGroup, Guid>
1010
{
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using JsonApiDotNetCore.Resources;
55
using JsonApiDotNetCore.Resources.Annotations;
66

7-
namespace JsonApiDotNetCoreExampleTests.IntegrationTests.ResourceDefinitions.Writing.TransactionalOutboxPattern
7+
namespace JsonApiDotNetCoreExampleTests.IntegrationTests.ResourceDefinitions.Writing
88
{
99
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
1010
public sealed class DomainUser : Identifiable<Guid>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using JsonApiDotNetCore.Services;
55
using Microsoft.Extensions.Logging;
66

7-
namespace JsonApiDotNetCoreExampleTests.IntegrationTests.ResourceDefinitions.Writing.TransactionalOutboxPattern
7+
namespace JsonApiDotNetCoreExampleTests.IntegrationTests.ResourceDefinitions.Writing
88
{
99
public sealed class DomainUsersController : JsonApiController<DomainUser, Guid>
1010
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using JetBrains.Annotations;
2+
using Microsoft.EntityFrameworkCore;
3+
4+
namespace JsonApiDotNetCoreExampleTests.IntegrationTests.ResourceDefinitions.Writing.FireAndForgetDelivery
5+
{
6+
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
7+
public sealed class FireForgetDbContext : DbContext
8+
{
9+
public DbSet<DomainUser> Users { get; set; }
10+
public DbSet<DomainGroup> Groups { get; set; }
11+
12+
public FireForgetDbContext(DbContextOptions<FireForgetDbContext> options)
13+
: base(options)
14+
{
15+
}
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
using System;
2+
using System.Threading;
3+
using System.Threading.Tasks;
4+
using JetBrains.Annotations;
5+
using JsonApiDotNetCore.Configuration;
6+
using JsonApiDotNetCore.Middleware;
7+
using JsonApiDotNetCoreExampleTests.IntegrationTests.ResourceDefinitions.Writing.Messages;
8+
9+
namespace JsonApiDotNetCoreExampleTests.IntegrationTests.ResourceDefinitions.Writing.FireAndForgetDelivery
10+
{
11+
[UsedImplicitly(ImplicitUseKindFlags.InstantiatedNoFixedConstructorSignature)]
12+
public sealed class FireForgetGroupDefinition : MessagingGroupDefinition
13+
{
14+
private readonly MessageBroker _messageBroker;
15+
private DomainGroup _groupToDelete;
16+
17+
public FireForgetGroupDefinition(IResourceGraph resourceGraph, FireForgetDbContext dbContext, MessageBroker messageBroker)
18+
: base(resourceGraph, dbContext.Users, dbContext.Groups)
19+
{
20+
_messageBroker = messageBroker;
21+
}
22+
23+
public override async Task OnWritingAsync(DomainGroup group, OperationKind operationKind, CancellationToken cancellationToken)
24+
{
25+
if (operationKind == OperationKind.DeleteResource)
26+
{
27+
_groupToDelete = await base.GetGroupToDeleteAsync(group.Id, cancellationToken);
28+
}
29+
}
30+
31+
public override Task OnWriteSucceededAsync(DomainGroup group, OperationKind operationKind, CancellationToken cancellationToken)
32+
{
33+
return FinishWriteAsync(group, operationKind, cancellationToken);
34+
}
35+
36+
protected override Task FlushMessageAsync(OutgoingMessage message, CancellationToken cancellationToken)
37+
{
38+
return _messageBroker.PostMessageAsync(message, cancellationToken);
39+
}
40+
41+
protected override Task<DomainGroup> GetGroupToDeleteAsync(Guid groupId, CancellationToken cancellationToken)
42+
{
43+
return Task.FromResult(_groupToDelete);
44+
}
45+
}
46+
}

0 commit comments

Comments
 (0)