/**
 * ÀÌ ¼Ò½º´Â Spring ÇÁ·¹ÀÓ¿öÅ© ¿öÅ©ºÏ¿¡¼­ »ç¿ëÇÑ ¿¹Á¦ ¼Ò½ºÀÔ´Ï´Ù. 
 * ÀÌ ¼Ò½º´Â ¸ðµç °³¹ßÀÚµéÀÌ ÀÚÀ¯·Ó°Ô ¼öÁ¤ ¹× ¹èÆ÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. 
 * ´Ü, ÀÌ ¼Ò½º¸¦ ±â¹ÝÀ¸·Î »õ·Î¿î ¾ÖÇÃ¸®ÄÉÀÌ¼ÇÀ» °³¹ßÇÒ °æ¿ì ÃâÃ³¸¦ ¸í½ÃÇØ ÁÖ½Ã¸é µË´Ï´Ù. 
 */
package net.javajigi.user.web;

import java.util.List;

import net.javajigi.user.model.User;

import org.apache.log4j.Logger;

import servletunit.struts.MockStrutsTestCase;

/**
 * @author Administrator
 */
public class UserActionTest extends MockStrutsTestCase {
	/**
	 * Logger for this class
	 */
	private static final Logger logger = Logger.getLogger(UserActionTest.class);

	/*
	 * @see TestCase#setUp()
	 */
	protected void setUp() throws Exception {
		super.setUp();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see junit.framework.TestCase#tearDown()
	 */
	protected void tearDown() throws Exception {
		super.tearDown();
	}

	protected void addUser(String userId) {
		addUser(userId, "password");
	}

	protected void addUser(String userId, String password) {
		if (logger.isDebugEnabled()) {
			logger.debug("Starting addUser method!!");
		}

		setRequestPathInfo("/user/user");
		addRequestParameter("method", "add");
		addRequestParameter("user.userId", userId);
		addRequestParameter("user.password", password);
		addRequestParameter("user.password2", password);
		addRequestParameter("user.email", "javajigi@hotmail.com");
		addRequestParameter("user.name", "¹ÚÀç¼º");
		addRequestParameter("user.admin", "true");

		if (logger.isDebugEnabled()) {
			logger.debug("Adding new User!!");
		}

		actionPerform();

		verifyForward("index");
		verifyNoActionErrors();

		if (logger.isDebugEnabled()) {
			logger.debug("End addUser method!!");
		}
	}

	protected void deleteUser(String userId) {
		setRequestPathInfo("/user/user");
		addRequestParameter("method", "delete");
		addRequestParameter("userId", userId);

		actionPerform();

		verifyForward("list");
	}

	public void testList() {
		try {
			addUser("JavaJiGi");
			setRequestPathInfo("/user/user");
			addRequestParameter("method", "list");
			actionPerform();

			verifyForward("list");

			verifyNoActionErrors();

			List users = (List) getRequest().getAttribute("userList");
			assertNotNull(users);
		} finally {
			deleteUser("JavaJiGi");
		}
	}

	public void testView() {
		try {
			addUser("JavaJiGi");
			setRequestPathInfo("/user/user");
			addRequestParameter("method", "view");
			addRequestParameter("userId", "JavaJiGi");

			actionPerform();
			verifyForward("view");
			verifyNoActionErrors();

			User user = (User) getRequest().getAttribute("user");
			assertNotNull(user);

		} finally {
			deleteUser("JavaJiGi");
		}
	}

	public void testModifyForm() {
		try {
			addUser("JavaJiGi");

			setRequestPathInfo("/user/user");
			addRequestParameter("method", "editForm");
			addRequestParameter("userId", "JavaJiGi");

			actionPerform();
			verifyForward("edit");
			verifyNoActionErrors();

			User user = (User) getRequest().getAttribute("user");
			assertNotNull(user);
		} finally {
			deleteUser("JavaJiGi");
		}
	}

	public void testAndModify() {
		try {
			addUser("JavaJiGi");

			addRequestParameter("method", "modify");
			addRequestParameter("userId", "JavaJiGi");
			actionPerform();
			verifyForward("index");
			verifyNoActionErrors();

		} finally {
			deleteUser("JavaJiGi");
		}
	}
}
