/**
 * ÀÌ ¼Ò½º´Â Spring ÇÁ·¹ÀÓ¿öÅ© ¿öÅ©ºÏ¿¡¼­ »ç¿ëÇÑ ¿¹Á¦ ¼Ò½ºÀÔ´Ï´Ù. 
 * ÀÌ ¼Ò½º´Â ¸ðµç °³¹ßÀÚµéÀÌ ÀÚÀ¯·Ó°Ô ¼öÁ¤ ¹× ¹èÆ÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. 
 * ´Ü, ÀÌ ¼Ò½º¸¦ ±â¹ÝÀ¸·Î »õ·Î¿î ¾ÖÇÃ¸®ÄÉÀÌ¼ÇÀ» °³¹ßÇÒ °æ¿ì ÃâÃ³¸¦ ¸í½ÃÇØ ÁÖ½Ã¸é µË´Ï´Ù. 
 */
package net.javajigi.user.service;

import junit.framework.TestCase;

import net.javajigi.user.model.User;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserServiceTest extends TestCase {
	private ApplicationContext ctx;

	private UserService userService;

	protected void setUp() throws Exception {
		String[] paths = { "/WEB-INF/applicationContext.xml" };
		ctx = new ClassPathXmlApplicationContext(paths);

		userService = (UserService) ctx.getBean("userService");
	}

	private User populateUser() {
		User user = new User();
		user.setUserId("testuser");
		user.setPassword("password");
		user.setName("¹ÚÀç¼º");
		user.setEmail("javajigi@gmail.com");
		user.setAdmin(false);

		return user;
	}

	protected void tearDown() throws Exception {
		super.tearDown();
	}

	/*
	 * Test method for 'net.javajigi.user.service.UserServiceImpl.addUser(User)'
	 */
	public void testAddAndFindAndDeleteUser() throws Exception {
		User user = populateUser();

		try {
			assertEquals(1, userService.addUser(user));

			User dbUser = userService.findUser(user.getUserId());

			assertEquals(user, dbUser);
		} finally {
			assertEquals(1, userService.removeUser(user.getUserId()));
		}
	}

	/*
	 * Test method for
	 * 'net.javajigi.user.service.UserServiceImpl.updateUser(User)'
	 */
	public void testAddAndUpdateAndDeleteUser() throws Exception {
		User user = populateUser();

		try {
			assertEquals(1, userService.addUser(user));

			user.setName("¹Ú¿¹Àº");
			user.setPassword("pass");
			user.setEmail("javajigi@javajigi.net");
			user.setAdmin(true);

			assertEquals(1, userService.updateUser(user));

			User dbUser = userService.findUser(user.getUserId());

			assertEquals(user, dbUser);
		} finally {
			assertEquals(1, userService.removeUser(user.getUserId()));
		}
	}

	/*
	 * Test method for 'net.javajigi.user.service.UserServiceImpl.login(String,
	 * String)'
	 */
	public void testLogin() throws Exception {
		User user = populateUser();

		try {
			assertEquals(1, userService.addUser(user));

			assertTrue(userService.login(user.getUserId(), user.getPassword()));
		} finally {
			assertEquals(1, userService.removeUser(user.getUserId()));
		}
	}
}
