/*
 * @(#)SSOServletConfigTest.java
 *
 * Copyright (C) 2006 Infocity Inc. All Rights Reserved.
 */
package test.info.dragonlady.sso.helper;

import info.dragonlady.sso.helper.SSOServletConfig;
import info.dragonlady.sso.helper.SessionAuthenticator;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import junit.framework.TestCase;

/**
 * SSOServletConfig クラステストケース。
 * 
 * @author Hiroshi.Ebata(INFOCITY)
 * @version $Revision: 1.0 $ $Date: 2006/11/24 14:33:54 $
 */
public class SSOServletConfigTest extends TestCase {

	/**
	 * @param arg0
	 */
	public SSOServletConfigTest(String arg0) {
		super(arg0);
	}

	/* (non-Javadoc)
	 * @see junit.framework.TestCase#setUp()
	 */
	protected void setUp() throws Exception {
		super.setUp();
	}

	/* (non-Javadoc)
	 * @see junit.framework.TestCase#tearDown()
	 */
	protected void tearDown() throws Exception {
		super.tearDown();
	}

	/**
	 * {@link info.dragonlady.sso.helper.SSOServletConfig#isAuthRequired(java.lang.String)} のためのテスト・メソッド。
	 */
	public final void testIsAuthRequired() {
		try {
			// trueの場合
			String kind = "1"; // 設定ファイルの内容に合わせること
			assertTrue(SSOServletConfig.isAuthRequired(kind));

			// falseの場合
			kind = "2"; // 設定ファイルの内容に合わせること
			assertTrue(!SSOServletConfig.isAuthRequired(kind));
		} catch(Exception e) {
			assertTrue(e.toString(), false);
		}
	}

	/**
	 * {@link info.dragonlady.sso.helper.SSOServletConfig#getAuthClassName(java.lang.String)} のためのテスト・メソッド。
	 */
	public final void testGetAuthClassName() {
		try {
			String kind = "1"; // 設定ファイルの内容に合わせること
			String expected = "info.dragonlady.sso.servlet.helper.SessionAuthenticator";
			assertTrue(SSOServletConfig.getAuthClassName(kind).equals(expected));

			// 設定なしの場合
			kind = "2"; // 設定ファイルの内容に合わせること
			assertTrue(SSOServletConfig.getAuthClassName(kind).equals(""));
		} catch(Exception e) {
			assertTrue(e.toString(), false);
		}
	}

	/**
	 * {@link info.dragonlady.sso.helper.SSOServletConfig#getAttributesClassName(java.lang.String)} のためのテスト・メソッド。
	 */
	public final void testGetAttributesClassName() {
		try {
			String kind = "1"; // 設定ファイルの内容に合わせること
			String expected = "info.dragonlady.sso.servlet.helper.SessionAttributeGenerator";
			assertTrue(SSOServletConfig.getAttributesClassName(kind).equals(expected));

			kind = "2"; // 設定ファイルの内容に合わせること
			expected = "info.dragonlady.sso.servlet.helper.SessionAttributeGenerator";
			assertTrue(SSOServletConfig.getAttributesClassName(kind).equals(expected));
		} catch(Exception e) {
			assertTrue(e.toString(), false);
		}
	}

	/**
	 * {@link info.dragonlady.sso.helper.SSOServletConfig#getRequestParamLoginKey()} のためのテスト・メソッド。
	 */
	public final void testGetRequestParamLoginKey() {
		try {
			String expected = "accountid"; // 設定ファイルの内容に合わせること
			assertTrue(SSOServletConfig.getRequestParamLoginKey().equals(expected));
		} catch(Exception e) {
			assertTrue(e.toString(), false);
		}
	}

	/**
	 * {@link info.dragonlady.sso.helper.SSOServletConfig#getSessionLoginKey()} のためのテスト・メソッド。
	 */
	public final void testGetSessionLoginKey() {
		try {
			String expected = "ATTRIBUTE_WRAPPER_SESSION_ACCOUNT_ID"; // 設定ファイルの内容に合わせること
			assertTrue(SSOServletConfig.getSessionLoginKey().equals(expected));
		} catch(Exception e) {
			assertTrue(e.toString(), false);
		}
	}

	/**
	 * {@link info.dragonlady.sso.helper.SSOServletConfig#getSessionAttributeKeys()} のためのテスト・メソッド。
	 */
	public final void testGetSessionAttributeKeys() {
		try {
			// 設定ファイルの内容に合わせること
			Map expected = new HashMap();
			expected.put("termid", "ATTRIBUTE_WRAPPER_SESSION_TERM_ID");
			expected.put("parent", "ATTRIBUTE_WRAPPER_SESSION_PARENT_ATTRIBUTE");
			expected.put("prepaidcardid", "ATTRIBUTE_WRAPPER_SESSION_PREPAID_CARD_ID");

			Map result = SSOServletConfig.getSessionAttributeKeys();
			// 検証
			assertTrue(expected.entrySet().size() == result.entrySet().size());
			Iterator itr = expected.keySet().iterator();
			while(itr.hasNext()) {
				String key = (String)itr.next();
				Object value = expected.get(key);
				assertTrue(result.containsKey(key));
				assertTrue(result.get(key).equals(value));
			}
		} catch(Exception e) {
			assertTrue(e.toString(), false);
		}
	}

	/**
	 * {@link info.dragonlady.sso.helper.SSOServletConfig#getRedirection()} のためのテスト・メソッド。
	 */
	public final void testGetRedirection() {
		try {
			String expected = "/login.html"; // 設定ファイルの内容に合わせること
			assertTrue(SSOServletConfig.getRedirection().equals(expected));
		} catch(Exception e) {
			assertTrue(e.toString(), false);
		}
	}

	/**
	 * {@link info.dragonlady.sso.helper.SSOServletConfig#getCooperationService()} のためのテスト・メソッド。
	 */
	public final void testGetCooperationService() {
		try {
			String expected = "http://auth-hostname:8080/co-srv/soap/Cooperation"; // 設定ファイルの内容に合わせること
			assertTrue(SSOServletConfig.getCooperationService().equals(expected));
		} catch(Exception e) {
			assertTrue(e.toString(), false);
		}
	}

}
