[MAGNOLIA-9126] LinkTransformerManager cannot create Instance with @MagnoliaTest annotation Created: 29/Sep/23  Updated: 29/Sep/23

Status: Open
Project: Magnolia
Component/s: testing
Affects Version/s: 6.2.38
Fix Version/s: None

Type: Bug Priority: Neutral
Reporter: Luca Sanda Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Template:
Acceptance criteria:
[ ]* LinkTransformerManager.getInstance() should work with @MagnoliaTest annotation
Task DoD:
[ ]* Doc/release notes changes? Comment present?
[ ]* Downstream builds green?
[ ]* Solution information and context easily available?
[ ]* Tests
[ ]* FixVersion filled and not yet released
[ ]  Architecture Decision Record (ADR)
Bug DoR:
[ ]* Steps to reproduce, expected, and actual results filled
[ ]* Affected version filled
Testcase included:
Yes

 Description   

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

 


Generated at Mon Feb 12 04:38:50 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.