/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.plugin.spring;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import com.google.common.collect.Maps;
import com.enonic.cms.api.client.Client;
import com.enonic.cms.api.plugin.PluginConfig;
import com.enonic.cms.core.plugin.context.PluginContext;
import static org.junit.Assert.*;
public class BeansProcessorTest
{
private PluginContext context;
private ConfigurableListableBeanFactory factory;
private Map<String, Object> serviceMap;
@Before
public void setUp()
{
this.context = Mockito.mock( PluginContext.class );
this.factory = new DefaultListableBeanFactory();
this.serviceMap = Maps.newHashMap();
Mockito.when( this.context.getServices() ).thenReturn( this.serviceMap );
}
private void processBeanFactory()
{
final BeansProcessor processor = new BeansProcessor( this.context );
processor.postProcessBeanFactory( this.factory );
}
@Test
public void testPluginContext()
{
processBeanFactory();
checkBean( "plugin.context", PluginContext.class, this.context );
}
@Test
public void testPluginConfig()
{
final PluginConfig config = Mockito.mock( PluginConfig.class );
Mockito.when( this.context.getConfig() ).thenReturn( config );
processBeanFactory();
checkBean( "plugin.config", PluginConfig.class, config );
}
@Test
public void testClientService()
{
final Client client = Mockito.mock( Client.class );
this.serviceMap.put( "client", client );
processBeanFactory();
checkBean( "plugin.service.client", Client.class, client );
}
private void checkBean( final String name, final Class<?> type, final Object value )
{
final Object bean1 = this.factory.getBean( name );
assertNotNull( bean1 );
assertSame( value, bean1 );
final Object bean2 = this.factory.getBean( type );
assertNotNull( bean2 );
assertSame( value, bean2 );
}
}