-
Bug
-
Resolution: Unresolved
-
Neutral
-
None
-
6.2.38
-
None
Steps to reproduce
- Create following Test Class
import info.magnolia.context.MgnlContext; import info.magnolia.link.LinkTransformerManager; import info.magnolia.test.junit5.MagnoliaTest; import info.magnolia.test.mock.MockContext; import info.magnolia.test.mock.MockRepositoryAcquiringStrategy; import info.magnolia.test.mock.jcr.MockSession; import lombok.val; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static info.magnolia.test.mock.MockUtil.getMockContext; import static info.magnolia.test.mock.MockUtil.initMockContext; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; // If you remove this annotation, the tests succeed @MagnoliaTest class LinkTransformerManagerTest { @BeforeEach void setup() { // This is redundant if @MagnoliaTest annotation is used, but needed when removed (ignore if former is the case) initMockContext(); } @Test void tryCreatingInstance__withoutSpecialSetup() { assertDoesNotThrow(LinkTransformerManager::getInstance); } @Test void tryCreatingInstance__withSession() { // fyi: same result if ContextSupport.getContext is used val context = getMockContext(); context.addSession("config", new MockSession("config")); assertDoesNotThrow(LinkTransformerManager::getInstance); } @Test void tryCreatingInstance__withRepositoryStrategySession() { val context = getMockContext(); val strategy = (MockRepositoryAcquiringStrategy) context.getRepositoryStrategy(); strategy.addSession("config", new MockSession("config")); assertDoesNotThrow(LinkTransformerManager::getInstance); } @Test void tryCreatingInstance__withNewRepositoryStrategySession() { val context = getMockContext(); val strategy = new MockRepositoryAcquiringStrategy(); strategy.addSession("config", new MockSession("config")); context.setRepositoryStrategy(strategy); assertDoesNotThrow(LinkTransformerManager::getInstance); } @Test void tryCreatingInstance__withSystemRepositoryStrategySession() { val context = (MockContext) MgnlContext.getSystemContext(); val strategy = (MockRepositoryAcquiringStrategy) context.getRepositoryStrategy(); strategy.addSession("config", new MockSession("config")); assertDoesNotThrow(LinkTransformerManager::getInstance); } @Test void tryCreatingInstance__withNewSystemRepositoryStrategySession() { val context = (MockContext) MgnlContext.getSystemContext(); val strategy = new MockRepositoryAcquiringStrategy(); strategy.addSession("config", new MockSession("config")); context.setRepositoryStrategy(strategy); assertDoesNotThrow(LinkTransformerManager::getInstance); } }
- Remove the @MagnoliaTest annotation
- Run test
- Should succeed
- Add @MagnoliaTest annotation back
- Run test
Only tryCreatingInstancewithSystemRepositoryStrategySession + tryCreatingInstancewithNewSystemRepositoryStrategySession shold succeed- Others throw following Exception (see Attached Files for full Logs):
org.opentest4j.AssertionFailedError: Unexpected exception thrown: info.magnolia.objectfactory.MgnlInstantiationException: Can't instantiate an implementation of this class [info.magnolia.link.LinkTransformerManager]: IllegalArgumentException: session [config] not initialized
Expected results
LinkTransformerManager.getInstance() should succeed in both described cases.
Actual results
LinkTransformerManager.getInstance() doesn't work if @MagnoliaTest annotation is used.
(Unless "config" Session is explicitly added to SystemContext's MockRepositoryAcquiringStrategy)
Workaround
Don't use @MagnoliaTest annotation.
Development notes
Acceptance criteria