Uploaded image for project: 'Magnolia'
  1. Magnolia
  2. MAGNOLIA-9126

LinkTransformerManager cannot create Instance with @MagnoliaTest annotation

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Neutral Neutral
    • None
    • 6.2.38
    • testing
    • None

      Steps to reproduce

      1. 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);
          }
      }
       

       

      1. Remove the @MagnoliaTest annotation
      2. Run test
        1. Should succeed
      3. Add @MagnoliaTest annotation back
      4. 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

              Unassigned Unassigned
              sandal Luca Sanda
              Votes:
              5 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:

                  Bug DoR
                  Task DoD