Skip to content

Commit 402dc5f

Browse files
authored
Fix bug with claim fields nullified during approve (#2409)
1 parent 33615eb commit 402dc5f

File tree

6 files changed

+51
-4
lines changed

6 files changed

+51
-4
lines changed

src/JoinRpg.Domain.Test/FieldSaveHelperTest.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,26 @@
22
using JoinRpg.DataModel.Mocks;
33
using JoinRpg.Domain.CharacterFields;
44
using JoinRpg.PrimitiveTypes.ProjectMetadata;
5+
using JoinRpg.TestHelpers;
56
using Shouldly;
67
using Xunit;
8+
using Xunit.Abstractions;
79

810
namespace JoinRpg.Domain.Test;
911

1012
public class FieldSaveHelperTest
1113
{
1214
private MockedProject _original = null!; // Should be initialized per fact
15+
private readonly ITestOutputHelper testOutputHelper;
1316

14-
private static FieldSaveHelper InitFieldSaveHelper()
17+
public FieldSaveHelperTest(ITestOutputHelper testOutputHelper)
1518
{
16-
return new FieldSaveHelper(new MockedFieldDefaultValueGenerator());
19+
this.testOutputHelper = testOutputHelper;
20+
}
21+
22+
private FieldSaveHelper InitFieldSaveHelper()
23+
{
24+
return new FieldSaveHelper(new MockedFieldDefaultValueGenerator(), new XUnitLogger<FieldSaveHelper>(testOutputHelper));
1725
}
1826

1927
[Fact]

src/JoinRpg.Domain/CharacterFields/FieldSaveHelper.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using JoinRpg.DataModel;
22
using JoinRpg.PrimitiveTypes.ProjectMetadata;
3+
using Microsoft.Extensions.Logging;
34

45
namespace JoinRpg.Domain.CharacterFields;
56

@@ -9,10 +10,12 @@ namespace JoinRpg.Domain.CharacterFields;
910
public class FieldSaveHelper
1011
{
1112
private readonly IFieldDefaultValueGenerator generator;
13+
private readonly ILogger<FieldSaveHelper> logger;
1214

13-
public FieldSaveHelper(IFieldDefaultValueGenerator generator)
15+
public FieldSaveHelper(IFieldDefaultValueGenerator generator, ILogger<FieldSaveHelper> logger)
1416
{
1517
this.generator = generator;
18+
this.logger = logger;
1619
}
1720

1821
/// <summary>
@@ -66,6 +69,8 @@ private IReadOnlyCollection<FieldWithPreviousAndNewValue> SaveCharacterFieldsImp
6669
{
6770
var strategy = CreateStrategy(currentUserId, character, claim, projectInfo);
6871

72+
logger.LogDebug("Selected saving strategy as {strategyName}", strategy.GetType().Name);
73+
6974
var fields = strategy.GetFields().ToDictionary(f => f.Field.ProjectFieldId);
7075

7176
AssignValues(newFieldValue, fields, strategy);

src/JoinRpg.Domain/JoinRpg.Domain.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
<ItemGroup>
1313
<PackageReference Include="Autofac" Version="7.1.0" />
1414
<PackageReference Include="JetBrains.Annotations" Version="2022.3.1" />
15+
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.1" />
1516
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
1617
</ItemGroup>
1718
</Project>

src/JoinRpg.Services.Impl/ClaimServiceImpl.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,13 +347,14 @@ public async Task ApproveByMaster(int projectId, int claimId, string commentText
347347
MarkCharacterChangedIfApproved(claim);
348348
Debug.Assert(claim.Character != null, "claim.Character != null");
349349
claim.Character.ApprovedClaimId = claim.ClaimId;
350+
claim.Character.ApprovedClaim = claim; // Used in SaveCharacterFields
350351
claim.Character.IsHot = false;
351352

352353
//We need to re-save fields here. Reasons:
353354
// 1. If we created character during approving, we need to set name for character
354355
// 2. M.b. we need to move some field values from Claim to Characters
355356
// 3. (2) Could activate changing of special groups
356-
// ReSharper disable once MustUseReturnValue we don't need send email here
357+
// we don't need send to show updated fields in email here, so ignore return result.
357358
_ = fieldSaveHelper.SaveCharacterFields(CurrentUserId, claim, new Dictionary<int, string?>(), projectInfo);
358359

359360
await UnitOfWork.SaveChangesAsync();

src/JoinRpg.TestHelpers/JoinRpg.TestHelpers.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<AssemblyTitle>JoinRpg.TestHelpers</AssemblyTitle>
55
</PropertyGroup>
66
<ItemGroup>
7+
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.1" />
78
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.7.2" />
89
<PackageReference Include="Shouldly" Version="4.2.1" />
910
<PackageReference Include="xunit" Version="2.5.1" />
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using Microsoft.Extensions.Logging;
2+
using Xunit.Abstractions;
3+
4+
namespace JoinRpg.TestHelpers;
5+
public class XUnitLogger<T> : ILogger<T>, IDisposable
6+
{
7+
private ITestOutputHelper _output;
8+
9+
public XUnitLogger(ITestOutputHelper output)
10+
{
11+
_output = output;
12+
}
13+
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func<TState, Exception, string> formatter)
14+
{
15+
_output.WriteLine(state?.ToString());
16+
}
17+
18+
public bool IsEnabled(LogLevel logLevel)
19+
{
20+
return true;
21+
}
22+
23+
public IDisposable? BeginScope<TState>(TState state) where TState : notnull
24+
{
25+
return this;
26+
}
27+
28+
public void Dispose()
29+
{
30+
}
31+
}

0 commit comments

Comments
 (0)