Skip to content

Commit 362f6f0

Browse files
committed
fix: issues with tests
1 parent b8ee456 commit 362f6f0

2 files changed

Lines changed: 60 additions & 17 deletions

File tree

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using SgfDevs.Dev.EventSync;
34
using SgfDevs.Dev.EventSync.Sessionize;
45
using Xunit;
@@ -8,28 +9,63 @@ namespace SgfDevs.Tests;
89
public class PresenterMemberMatcherTests
910
{
1011
[Fact]
11-
public void BuildSearchTerms_IncludesNormalizedNameOnce()
12+
public void MatchPresenters_AssignsMemberKeyWhenExactlyOneMemberMatches()
1213
{
13-
var result = PresenterMemberMatcher.BuildSearchTerms("Bertram Gilfoyle");
14+
var memberKey = Guid.NewGuid();
15+
var matcher = CreateMatcher(new Dictionary<string, IReadOnlyList<Guid>>
16+
{
17+
["bertram gilfoyle"] = [memberKey]
18+
});
1419

15-
Assert.Equal(["bertram gilfoyle", "Bertram Gilfoyle"], result);
20+
var result = Assert.Single(matcher.MatchPresenters([new ImportedPresenterPlan("speaker-1", "Bertram Gilfoyle", null)]));
21+
22+
Assert.Equal(memberKey, result.MatchedMemberKey);
23+
}
24+
25+
[Fact]
26+
public void MatchPresenters_LeavesPresenterUnchangedWhenNoMembersMatch()
27+
{
28+
var matcher = CreateMatcher(new Dictionary<string, IReadOnlyList<Guid>>());
29+
30+
var result = Assert.Single(matcher.MatchPresenters([new ImportedPresenterPlan("speaker-1", "Bertram Gilfoyle", null)]));
31+
32+
Assert.Null(result.MatchedMemberKey);
1633
}
1734

1835
[Fact]
19-
public void GetMatchedMemberKey_ReturnsSingleKeyWhenExactlyOneMatchExists()
36+
public void MatchPresenters_LeavesPresenterUnchangedWhenMultipleMembersMatch()
2037
{
21-
var key = Guid.NewGuid();
38+
var matcher = CreateMatcher(new Dictionary<string, IReadOnlyList<Guid>>
39+
{
40+
["bertram gilfoyle"] = [Guid.NewGuid(), Guid.NewGuid()]
41+
});
2242

23-
var result = PresenterMemberMatcher.GetMatchedMemberKey([key]);
43+
var result = Assert.Single(matcher.MatchPresenters([new ImportedPresenterPlan("speaker-1", "Bertram Gilfoyle", null)]));
2444

25-
Assert.Equal(key, result);
45+
Assert.Null(result.MatchedMemberKey);
2646
}
2747

2848
[Fact]
29-
public void GetMatchedMemberKey_ReturnsNullWhenMultipleMatchesExist()
49+
public void MatchPresenters_DeduplicatesSameMemberReturnedByMultipleSearchTerms()
3050
{
31-
var result = PresenterMemberMatcher.GetMatchedMemberKey([Guid.NewGuid(), Guid.NewGuid()]);
51+
var memberKey = Guid.NewGuid();
52+
var matcher = CreateMatcher(new Dictionary<string, IReadOnlyList<Guid>>
53+
{
54+
["bertram gilfoyle"] = [memberKey],
55+
["Bertram Gilfoyle"] = [memberKey]
56+
});
57+
58+
var result = Assert.Single(matcher.MatchPresenters([new ImportedPresenterPlan("speaker-1", "Bertram Gilfoyle", null)]));
59+
60+
Assert.Equal(memberKey, result.MatchedMemberKey);
61+
}
3262

33-
Assert.Null(result);
63+
private static PresenterMemberMatcher CreateMatcher(IReadOnlyDictionary<string, IReadOnlyList<Guid>> resultsBySearchTerm)
64+
{
65+
return new PresenterMemberMatcher(searchTerm =>
66+
resultsBySearchTerm.TryGetValue(searchTerm, out var result)
67+
? result
68+
: []);
3469
}
70+
3571
}

SgfDevs/Dev/EventSync/PresenterMemberMatcher.cs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,16 @@ namespace SgfDevs.Dev.EventSync;
1010

1111
public class PresenterMemberMatcher
1212
{
13-
private readonly IMemberService _memberService;
13+
private readonly Func<string, IReadOnlyList<Guid>> _findMembersByDisplayName;
1414

1515
public PresenterMemberMatcher(IMemberService memberService)
1616
{
17-
_memberService = memberService;
17+
_findMembersByDisplayName = searchTerm => FindMembersByDisplayName(memberService, searchTerm);
18+
}
19+
20+
internal PresenterMemberMatcher(Func<string, IReadOnlyList<Guid>> findMembersByDisplayName)
21+
{
22+
_findMembersByDisplayName = findMembersByDisplayName;
1823
}
1924

2025
public IReadOnlyList<ImportedPresenterPlan> MatchPresenters(IReadOnlyList<ImportedPresenterPlan> presenters)
@@ -32,12 +37,12 @@ private ImportedPresenterPlan MatchPresenter(ImportedPresenterPlan presenter)
3237
: presenter;
3338
}
3439

35-
internal static Guid? GetMatchedMemberKey(IReadOnlyList<Guid> memberKeys)
40+
private static Guid? GetMatchedMemberKey(IReadOnlyList<Guid> memberKeys)
3641
{
3742
return memberKeys.Count == 1 ? memberKeys[0] : null;
3843
}
3944

40-
internal static IReadOnlyList<string> BuildSearchTerms(string? name)
45+
private static IReadOnlyList<string> BuildSearchTerms(string? name)
4146
{
4247
var normalizedName = NormalizeName(name);
4348
if (string.IsNullOrWhiteSpace(normalizedName))
@@ -68,7 +73,7 @@ internal static IReadOnlyList<string> BuildSearchTerms(string? name)
6873
return GetMatchedMemberKey(memberKeys);
6974
}
7075

71-
internal static string NormalizeName(string? name)
76+
private static string NormalizeName(string? name)
7277
{
7378
if (string.IsNullOrWhiteSpace(name))
7479
{
@@ -81,13 +86,15 @@ internal static string NormalizeName(string? name)
8186
.ToLowerInvariant();
8287
}
8388

84-
private IReadOnlyList<Guid> FindMembersByDisplayName(string searchTerm)
89+
private IReadOnlyList<Guid> FindMembersByDisplayName(string searchTerm) => _findMembersByDisplayName(searchTerm);
90+
91+
private static IReadOnlyList<Guid> FindMembersByDisplayName(IMemberService memberService, string searchTerm)
8592
{
8693
const int pageIndex = 0;
8794
const int pageSize = 10;
8895
long totalRecords;
8996

90-
return _memberService
97+
return memberService
9198
.FindMembersByDisplayName(searchTerm, pageIndex, pageSize, out totalRecords, StringPropertyMatchType.Exact)
9299
.Select(member => member.Key)
93100
.ToList();

0 commit comments

Comments
 (0)