/**
 * ÀÌ ¼Ò½º´Â Spring ÇÁ·¹ÀÓ¿öÅ© ¿öÅ©ºÏ¿¡¼­ »ç¿ëÇÑ ¿¹Á¦ ¼Ò½ºÀÔ´Ï´Ù. 
 * ÀÌ ¼Ò½º´Â ¸ðµç °³¹ßÀÚµéÀÌ ÀÚÀ¯·Ó°Ô ¼öÁ¤ ¹× ¹èÆ÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. 
 * ´Ü, ÀÌ ¼Ò½º¸¦ ±â¹ÝÀ¸·Î »õ·Î¿î ¾ÖÇÃ¸®ÄÉÀÌ¼ÇÀ» °³¹ßÇÒ °æ¿ì ÃâÃ³¸¦ ¸í½ÃÇØ ÁÖ½Ã¸é µË´Ï´Ù. 
 */
package net.javajigi.board.dao;

import java.util.List;

import junit.framework.TestCase;
import net.javajigi.board.model.Board;
import net.javajigi.common.util.DateTimeUtil;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class BoardDAOHibernateTest extends TestCase {
	private ApplicationContext ctx;

	private BoardDAO boardDAO;

	protected void setUp() throws Exception {
		String[] paths = { "/WEB-INF/applicationContext.xml",
				"/WEB-INF/applicationContext-jdbc.xml",
				"/WEB-INF/applicationContext-board.xml" };
		ctx = new ClassPathXmlApplicationContext(paths);

		boardDAO = (BoardDAO) ctx.getBean("boardDAO");
	}

	private Board populateBoard() {
		Board board = new Board();
		board.setName("¹ÚÀç¼º");
		board.setPassword("password");
		board
				.setCreateDate(DateTimeUtil
						.getDateTimeByPattern("yyyyMMddHHmmss"));
		board.setEmail("javajigi@javajigi.net");
		board.setTitle("ÀÌ ±ÛÀº Å×½ºÆ®¶ø´Ï´Ù.");
		board.setContent("ÀÌ ±ÛÀº Å×½ºÆ® ±ÛÀÇ ³»¿ëÀÌ¶ø´Ï´Ù.");

		return board;
	}

	protected void tearDown() throws Exception {
		super.tearDown();
	}
	
	public void testFindBoardList() throws Exception {
		List boardList = boardDAO.findBoardList(1, 3);
		
		assertEquals(8, boardList.size());
	}
	
	public void testAddAndFindAndRemove() throws Exception {
		Board board = populateBoard();

		Board resultBoard = null;
		try {
			resultBoard = boardDAO.insert(board);
			
			Board findBoard = boardDAO.findBoard(resultBoard.getBoardNo());
			
			assertEquals(board, findBoard);
		} finally {
			assertEquals(1, boardDAO.delete(resultBoard.getBoardNo()));
		}
	}
	
	public void testAddAndHitcountAndRemove() throws Exception {
		Board board = populateBoard();

		try {
			boardDAO.insert(board);
			
			boardDAO.updateHitCount(board.getBoardNo());
			
			Board findBoard = boardDAO.findBoard(board.getBoardNo());
			
			assertEquals(1, findBoard.getHitCount());
		} finally {
			assertEquals(1, boardDAO.delete(board.getBoardNo()));
		}
	}	

	public void testTotalNo() throws Exception {
		assertEquals(8, boardDAO.getTotalNo());
	}	
}
