package dst.ass1.jpa.tests;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

import java.util.Collection;
import java.util.List;

import javax.persistence.Query;

import org.junit.Test;

import dst.ass1.jpa.dao.ICourseDAO;
import dst.ass1.jpa.model.ICourse;
import dst.ass1.jpa.util.Constants;

public class Ass1_2_1bTest extends Ass1_TestBase {

    @Test
    public void namedQuery_returnsCorrectResult() throws Exception {
        Query query = em.createNamedQuery(Constants.Q_ONGOING_AND_FREE_PLATFORM_COURSES);
        query.setParameter("platformName", TestData.COURSE_PLATFORM_2_NAME);

        List resultList = query.getResultList();
        assertThat("Expected a single results", resultList.size(), is(1));

        ICourse result = (ICourse) resultList.get(0);
        assertThat(result.getName(), is(TestData.COURSE_2_NAME));
    }

    @Test
    public void daoFind_returnsCorrectResult() throws Exception {
        ICourseDAO dao = daoFactory.createCourseDAO();
        Collection<ICourse> resultList;

        resultList = dao.findOngoingAndFreeCoursesForPlatform(TestData.COURSE_PLATFORM_1_NAME);
        assertThat("Expected an empty result for " + TestData.COURSE_PLATFORM_1_NAME, resultList.isEmpty(), is(true));

        resultList = dao.findOngoingAndFreeCoursesForPlatform(TestData.COURSE_PLATFORM_2_NAME);
        assertThat("Expected a single results for " + TestData.COURSE_PLATFORM_2_NAME, resultList.size(), is(1));
        ICourse result = resultList.iterator().next();
        assertThat(result.getName(), is(TestData.COURSE_2_NAME));

    }

}
