Skip to content

Commit 57e0436

Browse files
feat: add more unit tests for demo use cases
1 parent 87fec9c commit 57e0436

File tree

2 files changed

+144
-0
lines changed

2 files changed

+144
-0
lines changed

src/3-Tests/Application.Tests.Unit/UseCases/DemoThings/CreateDemoThingTests.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
using CanBeYours.Application.Tests.Unit.Fixtures;
22
using CanBeYours.Application.UseCases.DemoThings.CreateDemoThing;
33
using CanBeYours.Core.Domain.DemoThings;
4+
using CanBeYours.Core.Resources;
5+
using CodeBlock.DevKit.Core.Exceptions;
6+
using CodeBlock.DevKit.Core.Resources;
7+
using CodeBlock.DevKit.Domain.Exceptions;
48
using FluentAssertions;
59
using Microsoft.Extensions.Logging;
610
using NSubstitute;
@@ -27,6 +31,44 @@ public async Task DemoThing_is_created()
2731
await RequestDispatcher!.Received(1).PublishEvent(Arg.Any<DemoThingCreated>());
2832
}
2933

34+
[Fact]
35+
public async Task DemoThing_is_not_created_if_name_is_not_provided()
36+
{
37+
//Arrange
38+
var expectedError = new DomainException(
39+
nameof(CoreResource.Required),
40+
typeof(CoreResource),
41+
new List<MessagePlaceholder> { MessagePlaceholder.CreateResource(SharedResource.DemoThing_Name, typeof(SharedResource)) }
42+
);
43+
var existedDemoThing = DemoThings.FirstOrDefault();
44+
var request = new CreateDemoThingRequest(name: "", "Test_Description", DemoThingType.DemoType3);
45+
46+
//Act
47+
Func<Task> act = async () => await createDemoThingUseCase.Handle(request, CancellationToken.None);
48+
49+
//Assert
50+
await act.Should().ThrowAsync<DomainException>().Where(e => e.Message.Equals(expectedError.Message));
51+
}
52+
53+
[Fact]
54+
public async Task DemoThing_is_not_created_if_description_is_not_provided()
55+
{
56+
//Arrange
57+
var expectedError = new DomainException(
58+
nameof(CoreResource.Required),
59+
typeof(CoreResource),
60+
new List<MessagePlaceholder> { MessagePlaceholder.CreateResource(SharedResource.DemoThing_Description, typeof(SharedResource)) }
61+
);
62+
var existedDemoThing = DemoThings.FirstOrDefault();
63+
var request = new CreateDemoThingRequest(name: "Test Name", description: "", type: DemoThingType.DemoType3);
64+
65+
//Act
66+
Func<Task> act = async () => await createDemoThingUseCase.Handle(request, CancellationToken.None);
67+
68+
//Assert
69+
await act.Should().ThrowAsync<DomainException>().Where(e => e.Message.Equals(expectedError.Message));
70+
}
71+
3072
protected override void TestClassFixtureSetup()
3173
{
3274
var logger = Substitute.For<ILogger<CreateDemoThingUseCase>>();
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
using CanBeYours.Application.Tests.Unit.Fixtures;
2+
using CanBeYours.Application.UseCases.DemoThings.UpdateDemoThing;
3+
using CanBeYours.Core.Domain.DemoThings;
4+
using CanBeYours.Core.Resources;
5+
using CodeBlock.DevKit.Core.Exceptions;
6+
using CodeBlock.DevKit.Core.Resources;
7+
using CodeBlock.DevKit.Domain.Exceptions;
8+
using FluentAssertions;
9+
using Microsoft.Extensions.Logging;
10+
using NSubstitute;
11+
using ApplicationException = CodeBlock.DevKit.Application.Exceptions.ApplicationException;
12+
13+
namespace CanBeYours.Application.Tests.Unit.UseCases.DemoThings;
14+
15+
public class UpdateDemoThingTests : TestsBaseFixture
16+
{
17+
private UpdateDemoThingUseCase updateDemoThingUseCase;
18+
19+
public UpdateDemoThingTests() { }
20+
21+
[Fact]
22+
public async Task DemoThing_is_updated()
23+
{
24+
//Arrange
25+
var existedDemoThing = DemoThings.FirstOrDefault();
26+
var request = new UpdateDemoThingRequest(existedDemoThing.Id, "Updated Name", "Updated Description", DemoThingType.DemoType2);
27+
28+
//Act
29+
var result = await updateDemoThingUseCase.Handle(request, CancellationToken.None);
30+
31+
//Assert
32+
result.EntityId.Should().NotBeNull();
33+
await RequestDispatcher!.Received(1).PublishEvent(Arg.Any<DemoThingUpdated>());
34+
}
35+
36+
[Fact]
37+
public async Task DemoThing_is_not_updated_if_name_is_not_provided()
38+
{
39+
//Arrange
40+
var expectedError = new DomainException(
41+
nameof(CoreResource.Required),
42+
typeof(CoreResource),
43+
new List<MessagePlaceholder> { MessagePlaceholder.CreateResource(SharedResource.DemoThing_Name, typeof(SharedResource)) }
44+
);
45+
var existedDemoThing = DemoThings.FirstOrDefault();
46+
var request = new UpdateDemoThingRequest(existedDemoThing.Id, "", "Updated Description", DemoThingType.DemoType2);
47+
48+
//Act
49+
Func<Task> act = async () => await updateDemoThingUseCase.Handle(request, CancellationToken.None);
50+
51+
//Assert
52+
await act.Should().ThrowAsync<DomainException>().Where(e => e.Message.Equals(expectedError.Message));
53+
}
54+
55+
[Fact]
56+
public async Task DemoThing_is_not_updated_if_description_is_not_provided()
57+
{
58+
//Arrange
59+
var expectedError = new DomainException(
60+
nameof(CoreResource.Required),
61+
typeof(CoreResource),
62+
new List<MessagePlaceholder> { MessagePlaceholder.CreateResource(SharedResource.DemoThing_Description, typeof(SharedResource)) }
63+
);
64+
var existedDemoThing = DemoThings.FirstOrDefault();
65+
var request = new UpdateDemoThingRequest(existedDemoThing.Id, "Updated Name", "", DemoThingType.DemoType2);
66+
67+
//Act
68+
Func<Task> act = async () => await updateDemoThingUseCase.Handle(request, CancellationToken.None);
69+
70+
//Assert
71+
await act.Should().ThrowAsync<DomainException>().Where(e => e.Message.Equals(expectedError.Message));
72+
}
73+
74+
[Fact]
75+
public async Task DemoThing_is_not_updated_if_id_not_existed()
76+
{
77+
//Arrange
78+
var notExistedId = Guid.NewGuid().ToString();
79+
var request = new UpdateDemoThingRequest(notExistedId, "Updated Name", "Updated Description", DemoThingType.DemoType2);
80+
var expectedError = new ApplicationException(
81+
nameof(CoreResource.Record_Not_Found),
82+
typeof(CoreResource),
83+
new List<MessagePlaceholder>
84+
{
85+
MessagePlaceholder.CreateResource(SharedResource.DemoThing, typeof(SharedResource)),
86+
MessagePlaceholder.CreatePlainText(notExistedId),
87+
}
88+
);
89+
90+
//Act
91+
Func<Task> act = async () => await updateDemoThingUseCase.Handle(request, CancellationToken.None);
92+
93+
//Assert
94+
await act.Should().ThrowAsync<ApplicationException>().Where(e => e.Message.Equals(expectedError.Message));
95+
}
96+
97+
protected override void TestClassFixtureSetup()
98+
{
99+
var logger = Substitute.For<ILogger<UpdateDemoThingUseCase>>();
100+
updateDemoThingUseCase = new UpdateDemoThingUseCase(DemoThingRepository, RequestDispatcher, logger);
101+
}
102+
}

0 commit comments

Comments
 (0)