-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Loading status checks…
[who-icatx/icatx-project#111]: Added unit tests for ChangeEntityParen…
…tsActionHandler
- 111-when-changing-parent-of-an-entity-update-also-the-linearization-parents
- (#69)
- 154-support-sibling-ordering-in-the-class-trees
- (#69)
- 160-Toggle_for_override_data_when_importing_Siblings_Ordering
- (#69)
- 163-create-card-view-for-linearization-view
- (#69)
- UPGRADE-to-spring-boot
- (#69)
- emit-event-on-create-projet
- (#69)
- get-all-classes-in-ontology
- (#69)
- implement-fetch-entity-type
- (#80, #69)
- implement-save-children-ordering-who
- (#69)
- main-WHO
- (#69)
- merge_main_to_main_who
- (#69)
1 parent
f1656ce
commit 79abc3e
Showing
2 changed files
with
225 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
224 changes: 224 additions & 0 deletions
224
...est/java/edu/stanford/protege/webprotege/bulkop/ChangeEntityParentsActionHandlerTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,224 @@ | ||
package edu.stanford.protege.webprotege.bulkop; | ||
|
||
import com.google.common.collect.ImmutableList; | ||
import com.google.common.collect.ImmutableSet; | ||
import edu.stanford.protege.webprotege.access.AccessManager; | ||
import edu.stanford.protege.webprotege.change.ChangeApplicationResult; | ||
import edu.stanford.protege.webprotege.change.RevisionReverterChangeListGeneratorFactory; | ||
import edu.stanford.protege.webprotege.common.ProjectId; | ||
import edu.stanford.protege.webprotege.common.UserId; | ||
import edu.stanford.protege.webprotege.entity.OWLEntityData; | ||
import edu.stanford.protege.webprotege.hierarchy.ClassHierarchyCycleDetector; | ||
import edu.stanford.protege.webprotege.hierarchy.ClassHierarchyProvider; | ||
import edu.stanford.protege.webprotege.icd.LinearizationParentChecker; | ||
import edu.stanford.protege.webprotege.icd.ReleasedClassesChecker; | ||
import edu.stanford.protege.webprotege.icd.hierarchy.ClassHierarchyRetiredClassDetector; | ||
import edu.stanford.protege.webprotege.ipc.ExecutionContext; | ||
import edu.stanford.protege.webprotege.linearization.LinearizationManager; | ||
import edu.stanford.protege.webprotege.linearization.MergeWithParentEntitiesResponse; | ||
import edu.stanford.protege.webprotege.project.chg.ChangeManager; | ||
import edu.stanford.protege.webprotege.renderer.RenderingManager; | ||
import edu.stanford.protege.webprotege.revision.Revision; | ||
import edu.stanford.protege.webprotege.revision.RevisionManager; | ||
import edu.stanford.protege.webprotege.revision.RevisionNumber; | ||
import org.junit.jupiter.api.BeforeEach; | ||
import org.junit.jupiter.api.Test; | ||
import org.mockito.Mock; | ||
import org.mockito.MockitoAnnotations; | ||
import org.semanticweb.owlapi.model.IRI; | ||
import org.semanticweb.owlapi.model.OWLClass; | ||
import org.semanticweb.owlapi.model.OWLEntity; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Optional; | ||
import java.util.Set; | ||
import java.util.concurrent.CompletableFuture; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertNotNull; | ||
import static org.junit.jupiter.api.Assertions.assertTrue; | ||
import static org.mockito.Mockito.*; | ||
|
||
class ChangeEntityParentsActionHandlerTest { | ||
|
||
@Mock | ||
private AccessManager accessManager; | ||
|
||
@Mock | ||
private ChangeManager changeManager; | ||
|
||
@Mock | ||
private ClassHierarchyProvider classHierarchyProvider; | ||
|
||
@Mock | ||
private RenderingManager renderingManager; | ||
|
||
private RevisionReverterChangeListGeneratorFactory revisionReverterFactory; | ||
|
||
@Mock | ||
private RevisionManager revisionManager; | ||
|
||
@Mock | ||
private ReleasedClassesChecker releasedClassesChecker; | ||
|
||
@Mock | ||
private ClassHierarchyRetiredClassDetector retiredClassDetector; | ||
|
||
@Mock | ||
private LinearizationManager linearizationManager; | ||
|
||
@Mock | ||
private LinearizationParentChecker linearizationParentChecker; | ||
|
||
@Mock | ||
private EditParentsChangeListGeneratorFactory changeListGeneratorFactory; | ||
|
||
@Mock | ||
private ClassHierarchyCycleDetector classCycleDetector; | ||
|
||
private ProjectId projectId; | ||
|
||
private ChangeEntityParentsActionHandler actionHandler; | ||
|
||
private ExecutionContext executionContext; | ||
|
||
@BeforeEach | ||
void setUp() { | ||
MockitoAnnotations.openMocks(this); | ||
projectId = ProjectId.generate(); | ||
|
||
RevisionNumber revisionNumber = RevisionNumber.valueOf("1"); | ||
Revision revision = new Revision(UserId.getGuest(), revisionNumber, ImmutableList.of(), 1L, "desc"); | ||
|
||
when(revisionManager.getCurrentRevision()).thenReturn(revisionNumber); | ||
when(revisionManager.getRevision(any())).thenReturn(Optional.of(revision)); | ||
|
||
revisionReverterFactory = new RevisionReverterChangeListGeneratorFactory(() -> revisionManager); | ||
|
||
executionContext = new ExecutionContext(UserId.getGuest(), ""); | ||
|
||
actionHandler = new ChangeEntityParentsActionHandler( | ||
accessManager, | ||
projectId, | ||
changeManager, | ||
changeListGeneratorFactory, | ||
classCycleDetector, | ||
revisionReverterFactory, | ||
revisionManager, | ||
classHierarchyProvider, | ||
renderingManager, | ||
releasedClassesChecker, | ||
retiredClassDetector, | ||
linearizationManager, | ||
linearizationParentChecker | ||
); | ||
} | ||
|
||
private OWLClass mockOwlEntityAsClass(OWLEntity entity, String iri) { | ||
OWLClass owlClass = mock(OWLClass.class); | ||
IRI entityIri = IRI.create(iri); | ||
when(entity.getIRI()).thenReturn(entityIri); | ||
when(entity.asOWLClass()).thenReturn(owlClass); | ||
when(owlClass.getIRI()).thenReturn(entityIri); | ||
return owlClass; | ||
} | ||
|
||
@Test | ||
void given_NoCyclesOrRetiredParents_when_ExecuteCalled_then_ResultIsValidAndEmpty() { | ||
OWLEntity entity = mock(OWLEntity.class); | ||
OWLClass entityClass = mockOwlEntityAsClass(entity, "http://example.org/entity"); | ||
|
||
OWLEntity parent = mock(OWLEntity.class); | ||
OWLClass parentClass = mockOwlEntityAsClass(parent, "http://example.org/parent"); | ||
|
||
ImmutableSet<OWLClass> parents = ImmutableSet.of(parentClass); | ||
ChangeEntityParentsAction action = new ChangeEntityParentsAction(null, projectId, parents, entityClass, "Test Commit Message"); | ||
|
||
when(releasedClassesChecker.isReleased(any())).thenReturn(true); | ||
when(retiredClassDetector.getClassesWithRetiredAncestors(any())).thenReturn(Set.of(parentClass)); | ||
OWLEntityData retiredParentData = mock(OWLEntityData.class); | ||
when(renderingManager.getRendering(parentClass)).thenReturn(retiredParentData); | ||
|
||
ChangeApplicationResult<Boolean> mockChangeResult = mock(ChangeApplicationResult.class); | ||
when(mockChangeResult.getChangeList()).thenReturn(new ArrayList<>()); | ||
|
||
when(changeManager.applyChanges(any(), any())).thenAnswer(invocation -> mockChangeResult); | ||
|
||
when(linearizationManager.mergeLinearizationsFromParents(any(), any(), any(), any())) | ||
.thenReturn(CompletableFuture.completedFuture(new MergeWithParentEntitiesResponse())); // Ensure it returns a valid response | ||
|
||
ChangeEntityParentsResult result = actionHandler.execute(action, executionContext); | ||
|
||
assertNotNull(result); | ||
assertTrue(result.classesWithRetiredParents().contains(retiredParentData)); | ||
assertTrue(result.classesWithCycle().isEmpty()); | ||
assertTrue(result.oldParentsThatArelinearizationPathParents().isEmpty()); | ||
|
||
verify(retiredClassDetector).getClassesWithRetiredAncestors(parents); | ||
} | ||
|
||
@Test | ||
void given_CyclesDetected_when_ExecuteCalled_then_ResultContainsCycles() { | ||
OWLEntity entity = mock(OWLEntity.class); | ||
OWLClass entityClass = mockOwlEntityAsClass(entity, "http://example.org/entity"); | ||
|
||
OWLEntity parent = mock(OWLEntity.class); | ||
OWLClass parentClass = mockOwlEntityAsClass(parent, "http://example.org/parent"); | ||
|
||
ImmutableSet<OWLClass> parents = ImmutableSet.of(parentClass); | ||
ChangeEntityParentsAction action = new ChangeEntityParentsAction(null, projectId, parents, entityClass, "Test Commit Message"); | ||
|
||
ChangeApplicationResult<Boolean> mockChangeResult = mock(ChangeApplicationResult.class); | ||
|
||
when(changeManager.applyChanges(any(), any())).thenAnswer(invocation -> mockChangeResult); | ||
when(mockChangeResult.getChangeList()).thenReturn(new ArrayList<>()); | ||
when(classCycleDetector.getClassesWithCycle(any())).thenReturn(Set.of(parentClass)); | ||
OWLEntityData cycleData = mock(OWLEntityData.class); | ||
when(renderingManager.getRendering(parentClass)).thenReturn(cycleData); | ||
|
||
when(linearizationManager.mergeLinearizationsFromParents(any(), any(), any(), any())) | ||
.thenReturn(CompletableFuture.completedFuture(new MergeWithParentEntitiesResponse())); | ||
|
||
ChangeEntityParentsResult result = actionHandler.execute(action, executionContext); | ||
|
||
assertNotNull(result); | ||
assertTrue(result.classesWithCycle().contains(cycleData)); | ||
assertTrue(result.classesWithRetiredParents().isEmpty()); | ||
assertTrue(result.oldParentsThatArelinearizationPathParents().isEmpty()); | ||
|
||
verify(classCycleDetector).getClassesWithCycle(any()); | ||
} | ||
|
||
@Test | ||
void given_LinearizationPathParents_when_ExecuteCalled_then_ResultContainsLinearizationPathParents() { | ||
OWLEntity entity = mock(OWLEntity.class); | ||
OWLClass entityClass = mockOwlEntityAsClass(entity, "http://example.org/entity"); | ||
|
||
IRI linearizationParentIri = IRI.create("http://example.org/linearizationParent"); | ||
Set<IRI> removedParents = Set.of(linearizationParentIri); | ||
|
||
OWLEntity linearizationParent = mock(OWLEntity.class); | ||
OWLClass linearizationParentClass = mockOwlEntityAsClass(linearizationParent, "http://example.org/linearizationParent"); | ||
OWLEntityData linearizationParentData = mock(OWLEntityData.class); | ||
when(renderingManager.getRendering(linearizationParentClass)).thenReturn(linearizationParentData); | ||
|
||
ChangeEntityParentsAction action = new ChangeEntityParentsAction(null, projectId, ImmutableSet.of(), entityClass, "Test Commit Message"); | ||
|
||
when(linearizationParentChecker.getParentThatIsLinearizationPathParent(entityClass.getIRI(), removedParents, projectId)) | ||
.thenReturn(Set.of(linearizationParentIri)); | ||
|
||
when(classHierarchyProvider.getParents(any())).thenReturn(Set.of(linearizationParentClass)); | ||
when(renderingManager.getRendering((OWLEntity) any())).thenReturn(linearizationParentData); | ||
|
||
ChangeEntityParentsResult result = actionHandler.execute(action, executionContext); | ||
|
||
assertNotNull(result); | ||
assertTrue(result.oldParentsThatArelinearizationPathParents().contains(linearizationParentData)); | ||
assertTrue(result.classesWithCycle().isEmpty()); | ||
assertTrue(result.classesWithRetiredParents().isEmpty()); | ||
|
||
verify(linearizationParentChecker).getParentThatIsLinearizationPathParent(entityClass.getIRI(), removedParents, projectId); | ||
verify(classCycleDetector, times(0)).getClassesWithCycle(any()); | ||
verify(releasedClassesChecker, times(0)).isReleased(any()); | ||
verify(retiredClassDetector, times(0)).getClassesWithRetiredAncestors(any()); | ||
} | ||
} |