Skip to content

Commit c4586cb

Browse files
committed
Set CodeSystem.Content to Complete when cached
Update FhirService to mark a CodeSystem's Content as Complete when its CodeGroup contains cached codes. Applies to GetCodeSystemById and GetCodeSystems (list) paths. Add unit tests to verify: a cached code system becomes Complete, an empty cached code system preserves its Content, and existing duplicate-code test now asserts Content is Complete. Ensures returned FHIR CodeSystem resources correctly reflect cached expansions.
1 parent f5ba413 commit c4586cb

2 files changed

Lines changed: 71 additions & 1 deletion

File tree

DotNet/ServiceTests/UnitTests/Terminology/Services/FhirServiceTests.cs

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1394,6 +1394,69 @@ public void GetValueSets_ReturnsListOfValueSets()
13941394

13951395
#region GetCodeSystems Tests
13961396

1397+
[Fact]
1398+
public void GetCodeSystemById_WithCachedCodes_SetsContentToComplete()
1399+
{
1400+
// Arrange
1401+
var codeSystemId = "test-code-system";
1402+
var codeSystem = new CodeSystem
1403+
{
1404+
Id = codeSystemId,
1405+
Content = CodeSystemContentMode.Fragment
1406+
};
1407+
var mockCodeGroup = new CodeGroup
1408+
{
1409+
Id = codeSystemId,
1410+
Type = CodeGroup.CodeGroupTypes.CodeSystem,
1411+
Resource = codeSystem,
1412+
Codes = new Dictionary<string, List<Code>>
1413+
{
1414+
{ "http://test.system", new List<Code> { new() { Value = "test-code", Display = "Test Code" } } }
1415+
}
1416+
};
1417+
1418+
_mockCacheService
1419+
.Setup(x => x.GetCodeGroupById(CodeGroup.CodeGroupTypes.CodeSystem, codeSystemId, It.IsAny<string>()))
1420+
.Returns(mockCodeGroup);
1421+
1422+
// Act
1423+
var result = _service.GetCodeSystemById(codeSystemId);
1424+
1425+
// Assert
1426+
Assert.NotNull(result);
1427+
Assert.Equal(CodeSystemContentMode.Complete, result.Content);
1428+
}
1429+
1430+
[Fact]
1431+
public void GetCodeSystemById_WithoutCachedCodes_PreservesContentMode()
1432+
{
1433+
// Arrange
1434+
var codeSystemId = "test-empty-code-system";
1435+
var codeSystem = new CodeSystem
1436+
{
1437+
Id = codeSystemId,
1438+
Content = CodeSystemContentMode.NotPresent
1439+
};
1440+
var mockCodeGroup = new CodeGroup
1441+
{
1442+
Id = codeSystemId,
1443+
Type = CodeGroup.CodeGroupTypes.CodeSystem,
1444+
Resource = codeSystem,
1445+
Codes = new Dictionary<string, List<Code>>()
1446+
};
1447+
1448+
_mockCacheService
1449+
.Setup(x => x.GetCodeGroupById(CodeGroup.CodeGroupTypes.CodeSystem, codeSystemId, It.IsAny<string>()))
1450+
.Returns(mockCodeGroup);
1451+
1452+
// Act
1453+
var result = _service.GetCodeSystemById(codeSystemId);
1454+
1455+
// Assert
1456+
Assert.NotNull(result);
1457+
Assert.Equal(CodeSystemContentMode.NotPresent, result.Content);
1458+
}
1459+
13971460
[Fact]
13981461
public void GetCodeSystems_WithDuplicateCode_EmitsSingleConceptWithLastDisplay()
13991462
{
@@ -1433,6 +1496,7 @@ public void GetCodeSystems_WithDuplicateCode_EmitsSingleConceptWithLastDisplay()
14331496
// Assert
14341497
var codeSystem = Assert.IsType<CodeSystem>(Assert.Single(result.Entry).Resource);
14351498
var concept = Assert.Single(codeSystem.Concept);
1499+
Assert.Equal(CodeSystemContentMode.Complete, codeSystem.Content);
14361500
Assert.Equal(code, concept.Code);
14371501
Assert.Equal("last display", concept.Display);
14381502
}

DotNet/Terminology/Services/FhirService.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,11 @@ public CodeSystem GetCodeSystemById(string id)
183183
throw new KeyNotFoundException($"Code system not found with ID {id}");
184184
}
185185

186-
return codeGroup.Resource as CodeSystem;
186+
var codeSystem = codeGroup.Resource as CodeSystem;
187+
if(codeSystem != null && codeGroup.Codes.Values.Any(c => c.Count > 0))
188+
codeSystem.Content = CodeSystemContentMode.Complete;
189+
190+
return codeSystem;
187191
}
188192

189193
public Bundle GetCodeSystems(string? url, SummaryType? summary)
@@ -212,6 +216,8 @@ public Bundle GetCodeSystems(string? url, SummaryType? summary)
212216
}
213217

214218
CodeSystem clone = (CodeSystem)codeGroup.Resource.DeepCopy();
219+
if (codeGroup.Codes.Values.Any(c => c.Count > 0))
220+
clone.Content = CodeSystemContentMode.Complete;
215221

216222
if (summary != SummaryType.True)
217223
{

0 commit comments

Comments
 (0)