Skip to content

Commit aaa2ba2

Browse files
committed
feat: TaskCreation_FailsForOne_NotifiesOnceAndAllowsSavingItToTheRestOfRepositories
1 parent 4b0b0a5 commit aaa2ba2

2 files changed

Lines changed: 55 additions & 12 deletions

File tree

Desktop.Tests/UnitTests/TaskCreationViewModelTests.cs

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Desktop.Common;
1+
using System.Threading.Tasks;
2+
using Desktop.Common;
23
using Desktop.Tasks;
34
using Desktop.Tests.TestAPI;
45
using FluentAssertions;
@@ -10,10 +11,15 @@ namespace Desktop.Tests.UnitTests;
1011

1112
public class TaskCreationViewModelTests
1213
{
14+
private const string TaskCreationFailedMessage =
15+
"Task creation has failed due to " +
16+
"an internal error. The Task won't be created. " +
17+
"Please, try again later.";
18+
1319
[Test]
1420
public void TaskCreation_Fails_MessageNotifiesUserAndTasksIsNotAddedToTheList()
1521
{
16-
var repository = new InMemoryTaskRepository([AnyDesktopTask()]);
22+
var repository = new InMemoryTaskRepository([]);
1723
repository.FailAlways();
1824
var messageNotifierMock = new Mock<IMessageNotifier>();
1925
var sut = new TaskCreationViewModel(
@@ -24,9 +30,46 @@ public void TaskCreation_Fails_MessageNotifiesUserAndTasksIsNotAddedToTheList()
2430
sut.SaveTask.Execute((closeable.Object, "Any name", "Any description"));
2531

2632
messageNotifierMock.Verify(x => x.Notify(
27-
"Task creation has failed due to " +
28-
"an internal error. The Task won't be created. " +
29-
"Please, try again later."));
33+
TaskCreationFailedMessage));
3034
sut.CreatedTask.Should().BeNull();
3135
}
36+
37+
[Test]
38+
public async Task
39+
TaskCreation_FailsForOne_NotifiesOnceAndAllowsSavingItToTheRestOfRepositories()
40+
{
41+
// Arrange.
42+
var aRepository = new InMemoryTaskRepository([]);
43+
aRepository.FailAlways();
44+
var anotherRepository = new InMemoryTaskRepository([]);
45+
46+
var messageNotifierMock = new Mock<IMessageNotifier>();
47+
var sut = new TaskCreationViewModel(
48+
messageNotifierMock.Object,
49+
[aRepository, anotherRepository]);
50+
var closeable = new Mock<ICloseable>();
51+
52+
// Act.
53+
var taskName = "Any name";
54+
var taskDescription = "Any description";
55+
sut.SaveTask.Execute((closeable.Object, taskName, taskDescription));
56+
57+
// Assert.
58+
messageNotifierMock.Verify(
59+
x => x.Notify(TaskCreationFailedMessage),
60+
Times.Once);
61+
var createdTask = DesktopTask(taskName, taskDescription);
62+
sut.CreatedTask.Should().BeEquivalentTo(
63+
createdTask,
64+
options => options
65+
.ComparingByMembers<Domain.Task>()
66+
.Excluding(x => x.Id));
67+
68+
var result = await anotherRepository.All();
69+
result.Tasks.Should().ContainEquivalentOf(
70+
createdTask,
71+
options => options
72+
.ComparingByMembers<Domain.Task>()
73+
.Excluding(x => x.Id));
74+
}
3275
}

Desktop/Tasks/TaskCreationViewModel.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,23 @@ public TaskCreationViewModel(
1717

1818
CreatedTask = new Task(taskName, taskDescription);
1919

20+
var anySucceeded = false;
2021
foreach (var repository in taskRepositories)
2122
{
2223
var creationResult = await repository.Save(CreatedTask);
2324

24-
if (!creationResult.Succeeded)
25-
{
25+
if (creationResult.Succeeded)
26+
anySucceeded = true;
27+
else
2628
messageNotifier.Notify(
2729
"Task creation has failed due to " +
2830
"an internal error. The Task won't be created. " +
2931
"Please, try again later.");
30-
31-
CreatedTask = null;
32-
33-
break;
34-
}
3532
}
3633

34+
if (!anySucceeded)
35+
CreatedTask = null;
36+
3737
closeable!.Close();
3838
});
3939
}

0 commit comments

Comments
 (0)