mirror of
https://github.com/hapifhir/hapi-fhir.git
synced 2025-02-16 18:05:19 +00:00
Cleanup and improved Unit tests.
This commit is contained in:
parent
0788e79d51
commit
557f732e17
@ -64,7 +64,8 @@ public class TermDeferredStorageSvcImpl implements ITermDeferredStorageSvc {
|
||||
protected ITermCodeSystemDao myCodeSystemDao;
|
||||
@Autowired
|
||||
protected ITermCodeSystemVersionDao myCodeSystemVersionDao;
|
||||
@Autowired protected PlatformTransactionManager myTransactionMgr;
|
||||
@Autowired
|
||||
protected PlatformTransactionManager myTransactionMgr;
|
||||
private boolean myProcessDeferred = true;
|
||||
private List<TermCodeSystem> myDefferedCodeSystemsDeletions = Collections.synchronizedList(new ArrayList<>());
|
||||
private List<TermConcept> myDeferredConcepts = Collections.synchronizedList(new ArrayList<>());
|
||||
@ -147,7 +148,7 @@ public class TermDeferredStorageSvcImpl implements ITermDeferredStorageSvc {
|
||||
if(myCodeSystemVersionDao.findById(next.getCodeSystemVersion().getPid()).isPresent()) {
|
||||
codeCount += myCodeSystemStorageSvc.saveConcept(next);
|
||||
} else {
|
||||
ourLog.warn("Unable to save deferred TermConcept {} because Code System {} version PID {} is no longer valid. Code system may have since been updated.",
|
||||
ourLog.warn("Unable to save deferred TermConcept {} because Code System {} version PID {} is no longer valid. Code system may have since been replaced.",
|
||||
next.getCode(), next.getCodeSystemVersion().getCodeSystemDisplayName(), next.getCodeSystemVersion().getPid());
|
||||
}
|
||||
}
|
||||
@ -347,4 +348,9 @@ public class TermDeferredStorageSvcImpl implements ITermDeferredStorageSvc {
|
||||
void setConceptDaoForUnitTest(ITermConceptDao theConceptDao) {
|
||||
myConceptDao = theConceptDao;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void setCodeSystemVersionDaoForUnitTest(ITermCodeSystemVersionDao theCodeSystemVersionDao) {
|
||||
myCodeSystemVersionDao = theCodeSystemVersionDao;
|
||||
}
|
||||
}
|
||||
|
@ -1,71 +1,43 @@
|
||||
package ca.uhn.fhir.jpa.term;
|
||||
|
||||
import ca.uhn.fhir.jpa.dao.r4.BaseJpaR4Test;
|
||||
import ca.uhn.fhir.jpa.entity.TermCodeSystemVersion;
|
||||
import ca.uhn.fhir.jpa.entity.TermConcept;
|
||||
import ca.uhn.fhir.jpa.entity.TermConceptParentChildLink;
|
||||
import ca.uhn.fhir.jpa.model.entity.ResourceTable;
|
||||
import ca.uhn.fhir.rest.api.server.storage.ResourcePersistentId;
|
||||
import org.hl7.fhir.instance.model.api.IIdType;
|
||||
import org.hl7.fhir.r4.model.CodeSystem;
|
||||
import org.hl7.fhir.r4.model.CodeType;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
public class TermCodeSystemStorageSvcTest extends BaseJpaR4Test {
|
||||
|
||||
public static final String URL_MY_CODE_SYSTEM = "http://example.com/my_code_system";
|
||||
|
||||
private void createCodeSystemWithMoreThan100Concepts() {
|
||||
private CodeSystem createCodeSystemWithMoreThan100Concepts() {
|
||||
CodeSystem codeSystem = new CodeSystem();
|
||||
codeSystem.setUrl(URL_MY_CODE_SYSTEM);
|
||||
codeSystem.setContent(CodeSystem.CodeSystemContentMode.NOTPRESENT);
|
||||
|
||||
|
||||
|
||||
IIdType id = myCodeSystemDao.create(codeSystem, mySrd).getId().toUnqualified();
|
||||
|
||||
ResourceTable table = myResourceTableDao.findById(id.getIdPartAsLong()).orElseThrow(IllegalStateException::new);
|
||||
|
||||
TermCodeSystemVersion cs = new TermCodeSystemVersion();
|
||||
cs.setResource(table);
|
||||
|
||||
TermConcept parentA = new TermConcept(cs, "codeA").setDisplay("CodeA");
|
||||
cs.getConcepts().add(parentA);
|
||||
|
||||
for (int i = 0; i < 450; i++) {
|
||||
TermConcept childI = new TermConcept(cs, "subCodeA" + i).setDisplay("Sub-code A" + i);
|
||||
parentA.addChild(childI, TermConceptParentChildLink.RelationshipTypeEnum.ISA);
|
||||
for (int i = 0; i < 125; i++) {
|
||||
codeSystem.addConcept(new CodeSystem.ConceptDefinitionComponent(new CodeType("codeA " + i)));
|
||||
}
|
||||
|
||||
TermConcept parentB = new TermConcept(cs, "codeB").setDisplay("CodeB");
|
||||
cs.getConcepts().add(parentB);
|
||||
|
||||
for (int i = 0; i < 450; i++) {
|
||||
TermConcept childI = new TermConcept(cs, "subCodeB" + i).setDisplay("Sub-code B" + i);
|
||||
parentB.addChild(childI, TermConceptParentChildLink.RelationshipTypeEnum.ISA);
|
||||
}
|
||||
|
||||
myTermCodeSystemStorageSvc.storeNewCodeSystemVersion(new ResourcePersistentId(table.getId()), URL_MY_CODE_SYSTEM, "SYSTEM NAME", "SYSTEM VERSION", cs, table);
|
||||
return codeSystem;
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStoreNewCodeSystemVersionForExistingCodeSystem() throws IOException {
|
||||
CodeSystem upload = loadResourceFromClasspath(CodeSystem.class, "/bundles-009_test.json");
|
||||
public void testStoreNewCodeSystemVersionForExistingCodeSystem() {
|
||||
CodeSystem upload = createCodeSystemWithMoreThan100Concepts();
|
||||
|
||||
ResourceTable codeSystemResourceEntity = (ResourceTable)myCodeSystemDao.create(upload, mySrd).getEntity();
|
||||
|
||||
runInTransaction(() -> {
|
||||
myTermCodeSystemStorageSvc.storeNewCodeSystemVersionIfNeeded(upload, codeSystemResourceEntity);
|
||||
});
|
||||
runInTransaction(() -> myTermCodeSystemStorageSvc.storeNewCodeSystemVersionIfNeeded(upload, codeSystemResourceEntity));
|
||||
|
||||
myTerminologyDeferredStorageSvc.setProcessDeferred(true);
|
||||
myTerminologyDeferredStorageSvc.saveDeferred();
|
||||
myTerminologyDeferredStorageSvc.saveDeferred();
|
||||
|
||||
assertEquals(124, myTermConceptDao.count());
|
||||
assertEquals(125, myTermConceptDao.count());
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,7 +1,9 @@
|
||||
package ca.uhn.fhir.jpa.term;
|
||||
|
||||
import ca.uhn.fhir.jpa.api.config.DaoConfig;
|
||||
import ca.uhn.fhir.jpa.dao.data.ITermCodeSystemVersionDao;
|
||||
import ca.uhn.fhir.jpa.dao.data.ITermConceptDao;
|
||||
import ca.uhn.fhir.jpa.entity.TermCodeSystemVersion;
|
||||
import ca.uhn.fhir.jpa.entity.TermConcept;
|
||||
import ca.uhn.fhir.jpa.entity.TermConceptParentChildLink;
|
||||
import ca.uhn.fhir.jpa.term.api.ITermCodeSystemStorageSvc;
|
||||
@ -11,6 +13,8 @@ import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
import org.springframework.transaction.PlatformTransactionManager;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.same;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
@ -24,6 +28,8 @@ public class TermDeferredStorageSvcImplTest {
|
||||
private ITermCodeSystemStorageSvc myTermConceptStorageSvc;
|
||||
@Mock
|
||||
private ITermConceptDao myConceptDao;
|
||||
@Mock
|
||||
private ITermCodeSystemVersionDao myTermCodeSystemVersionDao;
|
||||
|
||||
@Test
|
||||
public void testSaveDeferredWithExecutionSuspended() {
|
||||
@ -38,16 +44,45 @@ public class TermDeferredStorageSvcImplTest {
|
||||
TermConcept concept = new TermConcept();
|
||||
concept.setCode("CODE_A");
|
||||
|
||||
TermCodeSystemVersion myTermCodeSystemVersion = new TermCodeSystemVersion();
|
||||
myTermCodeSystemVersion.setId(1L);
|
||||
concept.setCodeSystemVersion(myTermCodeSystemVersion);
|
||||
|
||||
TermDeferredStorageSvcImpl svc = new TermDeferredStorageSvcImpl();
|
||||
svc.setTransactionManagerForUnitTest(myTxManager);
|
||||
svc.setCodeSystemStorageSvcForUnitTest(myTermConceptStorageSvc);
|
||||
svc.setDaoConfigForUnitTest(new DaoConfig());
|
||||
|
||||
when(myTermCodeSystemVersionDao.findById(anyLong())).thenReturn(Optional.of(myTermCodeSystemVersion));
|
||||
svc.setCodeSystemVersionDaoForUnitTest(myTermCodeSystemVersionDao);
|
||||
svc.setProcessDeferred(true);
|
||||
svc.addConceptToStorageQueue(concept);
|
||||
svc.saveDeferred();
|
||||
|
||||
verify(myTermConceptStorageSvc, times(1)).saveConcept(same(concept));
|
||||
verifyNoMoreInteractions(myTermConceptStorageSvc);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSaveDeferred_Concept_StaleCodeSystemVersion() {
|
||||
TermConcept concept = new TermConcept();
|
||||
concept.setCode("CODE_A");
|
||||
|
||||
TermCodeSystemVersion myTermCodeSystemVersion = new TermCodeSystemVersion();
|
||||
concept.setCodeSystemVersion(myTermCodeSystemVersion);
|
||||
|
||||
TermDeferredStorageSvcImpl svc = new TermDeferredStorageSvcImpl();
|
||||
svc.setTransactionManagerForUnitTest(myTxManager);
|
||||
svc.setCodeSystemStorageSvcForUnitTest(myTermConceptStorageSvc);
|
||||
svc.setDaoConfigForUnitTest(new DaoConfig());
|
||||
|
||||
svc.setCodeSystemVersionDaoForUnitTest(myTermCodeSystemVersionDao);
|
||||
svc.setProcessDeferred(true);
|
||||
svc.addConceptToStorageQueue(concept);
|
||||
svc.saveDeferred();
|
||||
verify(myTermConceptStorageSvc, times(0)).saveConcept(same(concept));
|
||||
verifyNoMoreInteractions(myTermConceptStorageSvc);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
|
Loading…
x
Reference in New Issue
Block a user