package com.processpuzzle.application.configuration.domain; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.io.FileNotFoundException; import java.util.List; import java.util.Set; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import com.google.common.collect.Lists; import com.processpuzzle.application.security.domain.User; import com.processpuzzle.fundamental_types.domain.GenericEntity; import com.processpuzzle.persistence.domain.TestEntity; import com.processpuzzle.persistence.domain.TestEntitySubclass; import com.processpuzzle.user_session.domain.UserRequestManager; @RunWith( PowerMockRunner.class ) @PrepareForTest( UserRequestManager.class ) public class RunTimeClassHierarchyAnalyserTest { private User currentUser; private RunTimeClassHierarchyAnalyser hierarchyAnalyser; private UserRequestManager userRequestManager; @Before public void beforeEachTest() { currentUser = mock( User.class ); userRequestManager = mock( UserRequestManager.class ); PowerMockito.mockStatic( UserRequestManager.class ); when( UserRequestManager.getInstance() ).thenReturn( userRequestManager ); when( userRequestManager.currentUser() ).thenReturn( currentUser ); UserRequestManager.getInstance().currentUser(); hierarchyAnalyser = new RunTimeClassHierarchyAnalyser(); } @Test public void checkIfIsChildOf_SholdInvestigeteAllAncestors() { assertThat( hierarchyAnalyser.checkIfIsChildOf( TestEntitySubclass.class, TestEntity.class ), is( true )); assertThat( hierarchyAnalyser.checkIfIsChildOf( TestEntitySubclass.class, GenericEntity.class ), is( true )); } @Test public void findSubClasses_WhenTargetPackageIsGiven_ReturnsSubclasses() throws FileNotFoundException { List<String> targetPackages = Lists.newArrayList(); targetPackages.add( "com.processpuzzle.application.configuration.domain" ); Set<Class<?>> foundClasses = hierarchyAnalyser.findSubClasses( targetPackages, RunTimeClassHierarchyAnalyser.class.getName() ); Class<?> classLookedFor = ClassAnalyserSubclass.class; assertThat( foundClasses, hasItem( classLookedFor ) ); } }