Skip to content

Commit 95735a7

Browse files
committed
full test
1 parent 8cbc4fa commit 95735a7

File tree

3 files changed

+81
-11
lines changed

3 files changed

+81
-11
lines changed

src/Foundatio.CommandQuery.MongoDB/EntityCommandHandler.cs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ protected EntityCommandHandler(IMongoDatabase database, IMapper mapper)
1515
{
1616
}
1717

18-
public virtual async ValueTask<Result<TReadModel?>> HandleAsync(
18+
public virtual async ValueTask<Result<TReadModel>> HandleAsync(
1919
CreateEntity<TCreateModel, TReadModel> request,
2020
CancellationToken cancellationToken = default)
2121
{
@@ -24,6 +24,8 @@ protected EntityCommandHandler(IMongoDatabase database, IMapper mapper)
2424

2525
// create new entity from model
2626
var entity = Mapper.Map<TCreateModel, TEntity>(request.Model);
27+
if (entity == null)
28+
return Result<TReadModel>.BadRequest("Could not map create model.");
2729

2830
// apply create metadata
2931
if (entity is ITrackCreated createdModel)
@@ -45,11 +47,13 @@ await Collection
4547

4648
// convert to read model
4749
var readModel = Mapper.Map<TEntity, TReadModel>(entity);
50+
if (readModel == null)
51+
return Result<TReadModel>.NotFound("Could not map read model.");
4852

49-
return Result<TReadModel?>.Success(readModel);
53+
return Result<TReadModel>.Success(readModel);
5054
}
5155

52-
public virtual async ValueTask<Result<TReadModel?>> HandleAsync(
56+
public virtual async ValueTask<Result<TReadModel>> HandleAsync(
5357
UpdateEntity<TKey, TUpdateModel, TReadModel> request,
5458
CancellationToken cancellationToken = default)
5559
{
@@ -63,7 +67,7 @@ await Collection
6367
.ConfigureAwait(false);
6468

6569
if (entity == null && !request.Upsert)
66-
return Result<TReadModel?>.NotFound($"Entity with id '{request.Id}' not found.");
70+
return Result<TReadModel>.NotFound($"Entity with id '{request.Id}' not found.");
6771

6872
// create entity if not found
6973
if (entity == null)
@@ -97,12 +101,14 @@ await Collection
97101

98102
// return read model
99103
var result = Mapper.Map<TEntity, TReadModel>(entity);
104+
if (result == null)
105+
return Result<TReadModel>.NotFound("Could not map read model.");
100106

101-
return Result<TReadModel?>.Success(result);
107+
return Result<TReadModel>.Success(result);
102108
}
103109

104110

105-
public virtual async ValueTask<Result<TReadModel?>> HandleAsync(
111+
public virtual async ValueTask<Result<TReadModel>> HandleAsync(
106112
DeleteEntity<TKey, TReadModel> request,
107113
CancellationToken cancellationToken = default)
108114
{
@@ -115,7 +121,7 @@ await Collection
115121
.ConfigureAwait(false);
116122

117123
if (entity == null)
118-
return Result<TReadModel?>.NotFound($"Entity with id '{request.Id}' not found.");
124+
return Result<TReadModel>.NotFound($"Entity with id '{request.Id}' not found.");
119125

120126
// apply update metadata
121127
if (entity is ITrackUpdated updateEntity)
@@ -147,7 +153,9 @@ await Collection
147153

148154
// return read model
149155
var result = Mapper.Map<TEntity, TReadModel>(entity);
156+
if (result == null)
157+
return Result<TReadModel>.NotFound("Could not map read model.");
150158

151-
return Result<TReadModel?>.Success(result);
159+
return Result<TReadModel>.Success(result);
152160
}
153161
}

src/Foundatio.CommandQuery.MongoDB/EntityQueryHandler.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ protected EntityQueryHandler(IMongoDatabase database, IMapper mapper)
1919
{
2020
}
2121

22-
public virtual async ValueTask<Result<TReadModel?>> HandleAsync(
22+
public virtual async ValueTask<Result<TReadModel>> HandleAsync(
2323
GetEntity<TKey, TReadModel> request,
2424
CancellationToken cancellationToken = default)
2525
{
@@ -33,8 +33,10 @@ protected EntityQueryHandler(IMongoDatabase database, IMapper mapper)
3333

3434
// convert entity to read model
3535
var readModel = Mapper.Map<TEntity, TReadModel>(result);
36+
if (readModel == null)
37+
return Result<TReadModel>.NotFound("Could not map read model.");
3638

37-
return Result<TReadModel?>.Success(readModel);
39+
return Result<TReadModel>.Success(readModel);
3840

3941
}
4042

tests/Foundatio.CommandQuery.MongoDB.Tests/PriorityTests.cs

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Foundatio.CommandQuery.MongoDB.Tests.Domain.Models;
33
using Foundatio.CommandQuery.MongoDB.Tests.Fixtures;
44
using Foundatio.CommandQuery.MongoDB.Tests.Mocks;
5+
using Foundatio.CommandQuery.Queries;
56

67
using MediatR.CommandQuery.MongoDB.Tests;
78

@@ -17,7 +18,7 @@ public PriorityTests(ITestOutputHelper output, DatabaseFixture databaseFixture)
1718
}
1819

1920
[Fact]
20-
public async Task CreateEntity()
21+
public async Task FullTest()
2122
{
2223
var mediator = Services.GetService<IMediator>();
2324
mediator.Should().NotBeNull();
@@ -46,5 +47,64 @@ public async Task CreateEntity()
4647
created.Description.Should().Be(createModel.Description);
4748
created.DisplayOrder.Should().Be(createModel.DisplayOrder);
4849

50+
// get entity
51+
var getCommand = new GetEntity<string, PriorityReadModel>(MockPrincipal.Default, created.Id);
52+
var getResult = await mediator.InvokeAsync<Result<PriorityReadModel>>(getCommand);
53+
getResult.Should().NotBeNull();
54+
55+
getResult.IsSuccess.Should().BeTrue();
56+
getResult.Value.Should().NotBeNull();
57+
58+
var readModel = (PriorityReadModel)getResult;
59+
readModel.Should().NotBeNull();
60+
readModel.Id.Should().Be(created.Id);
61+
readModel.Name.Should().Be(createModel.Name);
62+
readModel.Description.Should().Be(createModel.Description);
63+
64+
// query entity
65+
var queryDefinition = new QueryDefinition
66+
{
67+
Page = 1,
68+
PageSize = 10,
69+
Sorts = [new() { Name = nameof(PriorityReadModel.Name) }]
70+
};
71+
72+
var queryCommand = new QueryEntities<PriorityReadModel>(MockPrincipal.Default, queryDefinition);
73+
74+
var queryResult = await mediator.InvokeAsync<Result<QueryResult<PriorityReadModel>>>(queryCommand);
75+
queryResult.Should().NotBeNull();
76+
77+
var queryModel = (QueryResult<PriorityReadModel>)queryResult;
78+
queryModel.Should().NotBeNull();
79+
queryModel.Data.Should().NotBeNull();
80+
queryModel.Total.Should().BeGreaterThan(0);
81+
82+
// update entity
83+
PriorityUpdateModel updateRequest = new()
84+
{
85+
Name = createModel.Name + " Updated",
86+
Description = createModel.Description + " Updated",
87+
DisplayOrder = createModel.DisplayOrder + 1,
88+
IsActive = !createModel.IsActive
89+
};
90+
var updateCommand = new UpdateEntity<string, PriorityUpdateModel, PriorityReadModel>(MockPrincipal.Default, created.Id, updateRequest);
91+
92+
var updateResult = await mediator.InvokeAsync<Result<PriorityReadModel>>(updateCommand);
93+
updateResult.Should().NotBeNull();
94+
95+
updateResult.IsSuccess.Should().BeTrue();
96+
updateResult.Value.Should().NotBeNull();
97+
98+
var updatedModel = (PriorityReadModel)updateResult;
99+
updatedModel.Should().NotBeNull();
100+
updatedModel.Id.Should().Be(created.Id);
101+
updatedModel.Name.Should().Be(updateRequest.Name);
102+
updatedModel.Description.Should().Be(updateRequest.Description);
103+
104+
// delete entity
105+
var deleteCommand = new DeleteEntity<string, PriorityReadModel>(MockPrincipal.Default, created.Id);
106+
var deleteResult = await mediator.InvokeAsync<Result<PriorityReadModel>>(deleteCommand);
107+
deleteResult.Should().NotBeNull();
108+
deleteResult.IsSuccess.Should().BeTrue();
49109
}
50110
}

0 commit comments

Comments
 (0)