package net.javajigi.board.service;

import java.util.List;

import junit.framework.TestCase;
import net.javajigi.board.model.Board;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class BoardServiceTest extends TestCase {
    private BoardService boardService = null;

    protected void setUp() throws Exception {
        super.setUp();

        ApplicationContext ctx = getApplicationContext();

        boardService = (BoardService) ctx.getBean("boardService");
    }

    protected ApplicationContext getApplicationContext() {
        String[] paths = { "/WEB-INF/applicationContext.xml" };
        return new ClassPathXmlApplicationContext(paths);
    }

    protected void tearDown() throws Exception {
        super.tearDown();
    }

    /*
     * Test method for
     * 'net.javajigi.board.service.BoardServiceImpl.addBoard(Board)'
     */
    public void testAddAndSelectBoard() throws Exception {
        Board board = addNewBoard();

        try {
            Board resultBoard = boardService.findBoard(board.getBoardNo());

            assertNotNull(resultBoard);

            assertEquals(board, resultBoard);
        } finally {
            boardService.removeBoard(board.getBoardNo());
        }
    }

    private Board addNewBoard() {
        Board board = new Board();
        board.setName("¹ÚÀç¼º");
        board.setPassword("password");
        board.setTitle("³ªÀÇ Ã¹¹øÂ° °Ô½Ã¹°");
        board.setContent("ÀÌ °Ô½Ã¹°Àº ³ªÀÇ Ã¹¹øÂ° °Ô½Ã¹° ÀÔ´Ï´Ù.");
        board.setEmail("admin@javajigi.net");

        //assertEquals(1, boardService.addBoard(board));

        assertTrue(board.getBoardNo() > 0);

        return board;
    }

    /*
     * Test method for
     * 'net.javajigi.board.service.BoardServiceImpl.updateBoard(Board)'
     */
    public void testSelectAndUpdateBoard() {
        Board board = addNewBoard();

        board.setName("¹Ú¿¹Àº");
        board.setTitle("³ªÀÇ Ã¹¹øÂ° ¼öÁ¤µÈ °Ô½Ã¹°");
        board.setContent("ÀÌ °Ô½Ã¹°Àº ¼öÁ¤µÈ °Ô½Ã¹°ÀÔ´Ï´Ù.");
        board.setEmail("javajigi@javajigi.net");

        //assertEquals(1, boardService.updateBoard(board));

        try {
            Board resultBoard = boardService.findBoard(board.getBoardNo());

            assertNotNull(resultBoard);

            assertEquals(board, resultBoard);
        } finally {
            boardService.removeBoard(board.getBoardNo());
        }
    }

    /*
     * Test method for
     * 'net.javajigi.board.service.BoardServiceImpl.findBoardList(int, int)'
     */
    public void testFindBoardList() {
        Board board1 = addNewBoard();
        Board board2 = addNewBoard();
        Board board3 = addNewBoard();
        Board board4 = addNewBoard();
        Board board5 = addNewBoard();

        try {
            List boardList1 = boardService.findBoardList(1, 2);
            assertEquals(2, boardList1.size());
            
            List boardList2 = boardService.findBoardList(2, 2);
            assertEquals(2, boardList2.size());
            
            List boardList3 = boardService.findBoardList(3, 2);
            assertEquals(1, boardList3.size());            
        } finally {
            boardService.removeBoard(board1.getBoardNo());
            boardService.removeBoard(board2.getBoardNo());
            boardService.removeBoard(board3.getBoardNo());
            boardService.removeBoard(board4.getBoardNo());
            boardService.removeBoard(board5.getBoardNo());
        }
    }

    /*
     * Test method for
     * 'net.javajigi.board.service.BoardServiceImpl.updateHitCount(int)'
     */
    public void testUpdateHitCount() {

    }

    /*
     * Test method for
     * 'net.javajigi.board.service.BoardServiceImpl.removeBoardFile(int)'
     */
    public void testRemoveBoardFile() {

    }

    /*
     * Test method for
     * 'net.javajigi.board.service.BoardServiceImpl.getBoardTotalCount()'
     */
    public void testGetBoardTotalCount() {

    }

}
