Skip to content

Commit def6d30

Browse files
authored
Amended to move any associated one login user to retained person during merge (#2969)
### Context https://trello.com/c/14ZB8ztv/2182-update-merge-records-journey-with-one-login-considerations
1 parent 27a4917 commit def6d30

8 files changed

Lines changed: 62 additions & 7 deletions

File tree

TeachingRecordSystem/src/TeachingRecordSystem.Core/Models/OneLoginUserMatchRoute.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ public enum OneLoginUserMatchRoute
55
Automatic = 1,
66
Interactive = 2,
77
TrnToken = 3,
8-
Support = 4,
8+
SupportUi = 4,
99
GetAnIdentityUser = 5,
1010
TrnRequest = 6
1111
}

TeachingRecordSystem/src/TeachingRecordSystem.Core/Services/Persons/PersonService.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,21 @@ public async Task MergePersonsAsync(MergePersonsOptions options, ProcessContext
328328
deactivatingPerson.MergedWithPersonId = options.RetainedPersonId;
329329
deactivatingPerson.UpdatedOn = now;
330330

331+
// If the deactivated person was associated with a One Login User, transfer that association to the retained person
332+
var oneLoginUser = await dbContext.OneLoginUsers
333+
.SingleOrDefaultAsync(u => u.PersonId == deactivatingPerson.PersonId);
334+
335+
if (oneLoginUser is not null)
336+
{
337+
oneLoginUser.SetMatched(
338+
now,
339+
retainedPerson.PersonId,
340+
OneLoginUserMatchRoute.SupportUi,
341+
matchedAttributes: null);
342+
343+
// Events to be added in follow up work
344+
}
345+
331346
await dbContext.SaveChangesAsync();
332347

333348
await eventPublisher.PublishEventAsync(

TeachingRecordSystem/src/TeachingRecordSystem.Core/Services/SupportTasks/OneLoginUserIdVerification/OneLoginUserIdVerificationSupportTaskService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ await oneLoginService.SetUserMatchedAsync(
125125
{
126126
OneLoginUserSubject = supportTask.OneLoginUserSubject!,
127127
MatchedPersonId = options.MatchedPersonId,
128-
MatchRoute = OneLoginUserMatchRoute.Support,
128+
MatchRoute = OneLoginUserMatchRoute.SupportUi,
129129
MatchedAttributes = options.MatchedAttributes
130130
},
131131
processContext);

TeachingRecordSystem/src/TeachingRecordSystem.SupportUi/Pages/SupportTasks/ConnectOneLoginUser/Connect.cshtml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public async Task<IActionResult> OnPostAsync()
4444
oneLoginUser.SetMatched(
4545
clock.UtcNow,
4646
PersonDetail!.PersonId,
47-
OneLoginUserMatchRoute.Support,
47+
OneLoginUserMatchRoute.SupportUi,
4848
matchedAttributes);
4949

5050
await dbContext.SaveChangesAsync();

TeachingRecordSystem/tests/TeachingRecordSystem.Core.Tests/Services/OneLogin/OneLoginServiceTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public async Task SetUserMatchedAsync_UserIsNotVerified_ThrowsInvalidOperationEx
7979
{
8080
OneLoginUserSubject = oneLoginUser.Subject,
8181
MatchedPersonId = Guid.NewGuid(),
82-
MatchRoute = OneLoginUserMatchRoute.Support,
82+
MatchRoute = OneLoginUserMatchRoute.SupportUi,
8383
MatchedAttributes = []
8484
};
8585

@@ -103,7 +103,7 @@ public async Task SetUserMatchedAsync_SetsMatchedPropertiesOnUser()
103103
{
104104
OneLoginUserSubject = oneLoginUser.Subject,
105105
MatchedPersonId = matchedPerson.PersonId,
106-
MatchRoute = OneLoginUserMatchRoute.Support,
106+
MatchRoute = OneLoginUserMatchRoute.SupportUi,
107107
MatchedAttributes = [
108108
KeyValuePair.Create(PersonMatchedAttribute.FirstName, matchedPerson.FirstName),
109109
KeyValuePair.Create(PersonMatchedAttribute.LastName, matchedPerson.LastName)

TeachingRecordSystem/tests/TeachingRecordSystem.Core.Tests/Services/Persons/PersonServiceTests.cs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1103,6 +1103,46 @@ await WithDbContextAsync(async dbContext =>
11031103
});
11041104
}
11051105

1106+
[Fact]
1107+
public async Task MergePersonsAsync_PersonToDeactivateIsAssociatedWithOneLoginUser_AssociatesThatOneLoginUserWithRetainedPerson()
1108+
{
1109+
// Arrange
1110+
var personToRetain = await TestData.CreatePersonAsync();
1111+
var personToDeactivate = await TestData.CreatePersonAsync();
1112+
var oneLoginUser = await TestData.CreateOneLoginUserAsync(
1113+
personId: personToDeactivate.PersonId,
1114+
verifiedInfo: ([personToDeactivate.FirstName, personToDeactivate.LastName], personToDeactivate.DateOfBirth));
1115+
var evidenceFileId = Guid.NewGuid();
1116+
var evidenceFileName = "evidence.jpg";
1117+
var comments = Faker.Lorem.Paragraph();
1118+
1119+
var options = new MergePersonsOptions(
1120+
personToDeactivate.PersonId,
1121+
personToRetain.PersonId,
1122+
personToRetain.Person.Details,
1123+
new()
1124+
{
1125+
FileId = evidenceFileId,
1126+
Name = evidenceFileName
1127+
},
1128+
comments);
1129+
1130+
var processContext = new ProcessContext(ProcessType.PersonMerging, Clock.UtcNow, SystemUser.SystemUserId);
1131+
1132+
// Act
1133+
await WithServiceAsync(s => s.MergePersonsAsync(options, processContext));
1134+
1135+
// Assert
1136+
await WithDbContextAsync(async dbContext =>
1137+
{
1138+
var updatedOneLoginUser = await dbContext.OneLoginUsers
1139+
.SingleAsync(o => o.Subject == oneLoginUser.Subject);
1140+
Assert.Equal(personToRetain.PersonId, updatedOneLoginUser.PersonId);
1141+
Assert.Equal(Clock.UtcNow, updatedOneLoginUser.MatchedOn);
1142+
Assert.Equal(OneLoginUserMatchRoute.SupportUi, updatedOneLoginUser.MatchRoute);
1143+
});
1144+
}
1145+
11061146
private Task WithServiceAsync(Func<PersonService, Task> action, params object[] arguments) =>
11071147
WithServiceAsync<PersonService>(action, arguments);
11081148

TeachingRecordSystem/tests/TeachingRecordSystem.Core.Tests/Services/SupportTasks/OneLoginUserIdVerification/OneLoginUserIdVerificationSupportTaskServiceTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ public async Task ResolveSupportTaskAsync_WithVerifiedAndConnectedOutcome_Closes
209209
Assert.Collection(updatedOneLoginUser.VerifiedDatesOfBirth, dob => Assert.Equal(data.StatedDateOfBirth, dob));
210210
Assert.Equal(matchedPerson.PersonId, updatedOneLoginUser.PersonId);
211211
Assert.Equal(Clock.UtcNow, updatedOneLoginUser.MatchedOn);
212-
Assert.Equal(OneLoginUserMatchRoute.Support, updatedOneLoginUser.MatchRoute);
212+
Assert.Equal(OneLoginUserMatchRoute.SupportUi, updatedOneLoginUser.MatchRoute);
213213
Assert.NotNull(updatedOneLoginUser.MatchedAttributes);
214214

215215
await BackgroundJobScheduler.ExecuteDeferredJobsAsync();

TeachingRecordSystem/tests/TeachingRecordSystem.SupportUi.Tests/PageTests/SupportTasks/ConnectOneLoginUser/ConnectTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ await WithDbContextAsync(async dbContext =>
162162

163163
oneLoginUser = await dbContext.OneLoginUsers.SingleAsync(u => u.Subject == oneLoginUser.Subject);
164164
Assert.Equal(person.PersonId, oneLoginUser.PersonId);
165-
Assert.Equal(OneLoginUserMatchRoute.Support, oneLoginUser.MatchRoute);
165+
Assert.Equal(OneLoginUserMatchRoute.SupportUi, oneLoginUser.MatchRoute);
166166
Assert.NotEmpty(oneLoginUser.MatchedAttributes!);
167167
});
168168
}

0 commit comments

Comments
 (0)