package dst.ass1.jpa.tests;

import static org.hamcrest.CoreMatchers.hasItems;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;

import java.util.Collection;

import org.junit.Before;
import org.junit.Test;

import dst.ass1.jpa.dao.ICourseDAO;
import dst.ass1.jpa.dao.IMaterialServerDAO;
import dst.ass1.jpa.model.ICourse;
import dst.ass1.jpa.model.IMaterialServer;

public class Ass1_2_3a_01Test extends Ass1_TestBase {

    private IMaterialServerDAO materialServerDAO;
    private ICourseDAO courseDAO;

    @Before
    public void setUp() throws Exception {
        materialServerDAO = daoFactory.createMaterialServerDAO();
        courseDAO = daoFactory.createCourseDAO();
    }

    @Test
    public void testMaterialServersForCourse() {
        ICourse course = courseDAO.findById(testData.course1Id);
        Collection<IMaterialServer> materialServers = materialServerDAO.findMaterialServersForCourse(course);
        assertNotNull(materialServers);

        assertThat(map(materialServers, e -> e.getId()), hasItems(
                testData.materialServer1Id,
                testData.materialServer2Id,
                testData.materialServer3Id
        ));
    }

    @Test
    public void testMaterialServersForCourse2() {
        ICourse course = courseDAO.findById(testData.course2Id);
        Collection<IMaterialServer> materialServers = materialServerDAO.findMaterialServersForCourse(course);
        assertNotNull(materialServers);
        assertTrue(materialServers.isEmpty());
    }

}
