package org.apache.struts2;

import com.opensymphony.xwork2.inject.Container;
import org.apache.struts2.dispatcher.Dispatcher;
import org.apache.struts2.dispatcher.mapper.ActionMapper;

import java.util.HashMap;

/**
 * Test class instantiation with Container
 */
public class ClassInstantiationTest extends StrutsInternalTestCase {

    public void testCompositeActionMapperInstantiationWithList() throws Exception {
        // given
        Dispatcher du = initDispatcher(new HashMap<String, String>() {{
            put(StrutsConstants.STRUTS_I18N_ENCODING, "utf-8");
            put(StrutsConstants.STRUTS_MAPPER_COMPOSITE, "struts,restful");
        }});
        Container container = du.getContainer();

        // when
        ActionMapper instance = container.getInstance(ActionMapper.class, "composite");

        // then
        assertNotNull(instance);
    }

    public void testCompositeActionMapperInstantiationWithoutList() throws Exception {
        // given
        Dispatcher du = initDispatcher(new HashMap<String, String>() {{
            put(StrutsConstants.STRUTS_I18N_ENCODING, "utf-8");
        }});
        Container container = du.getContainer();

        // when
        try {
            container.getInstance(ActionMapper.class, "composite");
            fail();
        }catch (Exception e) {
            // then
            // You cannot use CompositeActionMapper without defined list of "struts.mapper.composite"
            assertTrue(e.getMessage().contains("No mapping found for dependency [type=java.lang.String, name='struts.mapper.composite']"));
        }
    }

}
