/*
 * CB3BeanFactoryTest.java
 * Copyright (C) 2008 Cyber Beans Corporation. All rights reserved.
 */
package jp.co.cybec.cb3.util;

import javax.sql.DataSource;

import jp.co.cybec.cb3.util.CB3BeanFactory;
import junit.framework.Assert;

import org.junit.Test;
import org.springframework.transaction.support.ResourceTransactionManager;

/**
 * CB3BeanFactoryのテストケース。
 * @author Naoko Sugimoto
 */
public class CB3BeanFactoryTest {

	/** 設定ファイルディレクトリ */
	private static String TEST_CONFIG_PATH = "jp/co/cybec/cb3/util/CB3BeanFactory/applicationContext.xml";

	/**
	 * {@link jp.co.cybec.cb3.util.CB3BeanFactory#getInstance()} のためのテスト・メソッド。
	 * シングルトンになっていることを確認する。
	 */
	@Test
	public void testGetInstance() {
		Assert.assertSame(CB3BeanFactory.getInstance(), CB3BeanFactory.getInstance());
	}

	/**
	 * {@link jp.co.cybec.cb3.util.CB3BeanFactory#getBean(java.lang.String)} のためのテスト・メソッド。
	 * Beanを取得できることを確認する。
	 */
	@Test
	public void testGetBean() {

		// テスト用のコンテキストファイルパスを使用
		CB3BeanFactory.getInstance().setApplicationContextFilePath(TEST_CONFIG_PATH);

		// トランザクションマネージャを取得する。
		ResourceTransactionManager transactionManager = (ResourceTransactionManager)CB3BeanFactory.getInstance().getBean("transactionManager");
		Assert.assertNotNull(transactionManager);

		// データソースを取得する。
		DataSource dataSource = (DataSource)CB3BeanFactory.getInstance().getBean("dataSource");
		Assert.assertNotNull(dataSource);
	}

	/**
	 * {@link CB3BeanFactory#setApplicationContextFilePath(String)} のためのテスト・メソッド。<br>
	 * {@link CB3BeanFactory#setApplicationContextFilePath(String)}で設定したファイルパスが、
	 * {@link CB3BeanFactory#getApplicationContextFilePath()}で返されることを確認する。
	 */
	@Test
	public void testServiceContextFilePath() {
		CB3BeanFactory factory = CB3BeanFactory.getInstance();

		factory.setApplicationContextFilePath(TEST_CONFIG_PATH);
		Assert.assertEquals(TEST_CONFIG_PATH, factory.getApplicationContextFilePath());
	}

	/**
	 * {@link CB3BeanFactory#getApplicationContextFilePath()} のためのテスト・メソッド。<br>
	 * ファイルパスにnullを指定したとき、{@link CB3BeanFactory#getApplicationContextFilePath()}では
	 * デフォルトのファイルパスが返されることを確認する。
	 */
	@Test
	public void testDefaultAccessorContextFilePath() {

		CB3BeanFactory factory = CB3BeanFactory.getInstance();

		factory.setApplicationContextFilePath(null);
		Assert.assertEquals("applicationContext.xml", factory.getApplicationContextFilePath());
	}
}
