/**
* Copyright 2009 the original author or authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.extensions.jcr.support;
import static org.easymock.EasyMock.*;
import static org.junit.Assert.assertSame;
import java.util.ArrayList;
import java.util.List;
import javax.jcr.Repository;
import javax.jcr.Session;
import junit.framework.TestCase;
import org.junit.Before;
import org.junit.Test;
import org.springframework.extensions.jcr.SessionFactory;
import org.springframework.extensions.jcr.SessionHolder;
import org.springframework.extensions.jcr.SessionHolderProvider;
/**
* @author Costin Leau
* @author Sergio Bossa
* @author Salvatore Incandela
*/
public class AbstractSessionHolderProviderManagerTest {
private AbstractSessionHolderProviderManager providerManager;
private List<SessionHolderProvider> providers;
private String repositoryName;
private Session session;
private Repository repository;
private SessionFactory sessionfactory;
private SessionHolderProvider customProvider;
@Before
public void setUp() throws Exception {
providers = new ArrayList<SessionHolderProvider>();
repositoryName = "dummyRepository";
providerManager = new AbstractSessionHolderProviderManager() {
public List<SessionHolderProvider> getProviders() {
return providers;
}
};
// build crazy mock hierarchy
sessionfactory = createMock(SessionFactory.class);
session = createMock(Session.class);
repository = createMock(Repository.class);
expect(repository.getDescriptor(Repository.REP_NAME_DESC)).andReturn(repositoryName);
customProvider = new SessionHolderProvider() {
/**
* @see org.springframework.extensions.jcr.SessionHolderProvider#acceptsRepository(java.lang.String)
*/
public boolean acceptsRepository(String repo) {
return repositoryName.equals(repo);
}
/**
* @see org.springframework.extensions.jcr.SessionHolderProvider#createSessionHolder(javax.jcr.Session)
*/
public SessionHolder createSessionHolder(Session session) {
return null;
}
};
}
protected void tearDown() throws Exception {
verify(sessionfactory, session, repository);
}
/*
* Default provider is used even on empty list. Test method for
* 'org.springframework.extensions.jcr.support.AbstractSessionHolderProviderManager.getSessionProvider(SessionFactory)'
*/
@Test
public void testDefaultSessionProvider() {
// sanity check
assertSame(providers, providerManager.getProviders());
replay(sessionfactory, session, repository);
SessionHolderProvider provider = providerManager.getSessionProvider(repository);
assertSame(GenericSessionHolderProvider.class, provider.getClass());
}
/*
* Make sure that the approapriate provider is selected Test method for
* 'org.springframework.extensions.jcr.support.AbstractSessionHolderProviderManager.getSessionProvider(SessionFactory)'
*/
@Test
public void testCustomSessionProvider() {
// sanity check
providers = new ArrayList<SessionHolderProvider>();
providers.add(customProvider);
replay(sessionfactory, session, repository);
assertSame(customProvider, providerManager.getSessionProvider(repository));
}
/*
* Make sure that we fallback to default provider Test method for
* 'org.springframework.extensions.jcr.support.AbstractSessionHolderProviderManager.getSessionProvider(SessionFactory)'
*/
@Test
public void testDifferentSessionProvider() {
// sanity check
customProvider = new SessionHolderProvider() {
/**
* @see org.springframework.extensions.jcr.SessionHolderProvider#acceptsRepository(java.lang.String)
*/
public boolean acceptsRepository(String repo) {
return false;
}
/**
* @see org.springframework.extensions.jcr.SessionHolderProvider#createSessionHolder(javax.jcr.Session)
*/
public SessionHolder createSessionHolder(Session session) {
return null;
}
};
providers = new ArrayList<SessionHolderProvider>();
providers.add(customProvider);
replay(sessionfactory, session, repository);
assertSame(GenericSessionHolderProvider.class, providerManager.getSessionProvider(repository).getClass());
}
}