fix: preserve search input and add choseong lookup

This commit is contained in:
2026-07-21 11:23:42 +09:00
parent 5ccf8b8ffd
commit b6208c0971
11 changed files with 801 additions and 64 deletions

View File

@@ -66,6 +66,48 @@ public sealed class LegacyParityStockSearchServiceTests
call => Assert.Equal(string.Empty, call.Spec.Parameters[0].Value));
}
[Fact]
public async Task InitialConsonantSearch_FiltersOnlyLegacySearchCandidatesInProviderOrder()
{
var executor = new RecordingExecutor(new Dictionary<string, DataTable>
{
["LEGACY_PARITY_KOSPI_MASTER"] = Table(
("삼성전자", "005930")),
["LEGACY_PARITY_KOSDAQ_MASTER"] = Table(
("삼성중공업", "010140")),
["LEGACY_PARITY_NXT_KOSPI_MASTER"] = Table(
("삼성전자(NXT)", "005930"),
("삼성화재(NXT)", "000810")),
["LEGACY_PARITY_NXT_KOSDAQ_MASTER"] = Table(
("카카오게임즈(NXT)", "293490")),
["LEGACY_PARITY_KOSPI"] = Table(
("삼성전자", "005930"),
("서울반도체", "046890")),
["LEGACY_PARITY_KOSDAQ"] = Table(
("삼성중공업", "010140")),
["LEGACY_PARITY_NXT_KOSPI"] = Table(
("삼성전자(NXT)", "005930")),
["LEGACY_PARITY_NXT_KOSDAQ"] = Table()
});
var service = new LegacyParityStockSearchService(executor);
var result = await service.SearchAsync("ㅅㅅ");
Assert.Equal(
["삼성전자", "삼성중공업", "삼성전자(NXT)"],
result.DisplayNames);
Assert.DoesNotContain("삼성화재(NXT)", result.DisplayNames);
Assert.NotNull(result.ResolveLastByDisplayName("삼성화재(NXT)"));
Assert.Equal(8, executor.Calls.Count);
Assert.All(
executor.Calls.Where(call => !call.TableName.EndsWith("_MASTER", StringComparison.Ordinal)),
call => Assert.Equal(string.Empty, call.Spec.Parameters[0].Value));
Assert.Contains(
executor.Calls,
call => call.TableName == "LEGACY_PARITY_NXT_KOSPI" &&
call.Spec.Sql.Contains("N_ONLINE", StringComparison.Ordinal));
}
private static DataTable Table(params (string Name, string Code)[] rows)
{
var table = new DataTable();