package dst.ass1.jpa.tests;

import static org.hamcrest.CoreMatchers.hasItem;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;

import java.util.List;

import org.junit.Test;

import dst.ass1.jpa.model.CourseStatus;
import dst.ass1.jpa.model.ICourse;
import dst.ass1.jpa.model.ILecturer;

/**
 * Tests the 1-N association between ICourse and ILecturer (its organizer).
 */
public class Ass1_1_1_08Test extends Ass1_TestBase {

    @Test
    public void testCourseLecturerAssociation() {

        ILecturer lecturer1 = daoFactory.createLecturerDAO().findById(testData.lecturer1Id);
        assertNotNull(lecturer1);
        assertNotNull(lecturer1.getCourses());

        List<Long> courseIds = map(lecturer1.getCourses(), ICourse::getId);

        assertEquals(1, courseIds.size());
        assertThat(courseIds, hasItem(testData.course1Id));

        ICourse course1 = daoFactory.createCourseDAO().findById(testData.course1Id);
        ICourse course2 = daoFactory.createCourseDAO().findById(testData.course2Id);

        assertNotNull(course1);
        assertNotNull(course2);

        assertEquals(testData.lecturer1Id, course1.getLecturer().getId());
        assertEquals(testData.lecturer2Id, course2.getLecturer().getId());
    }

    @Test
    public void testCourseStatus() {
        ICourse course1 = daoFactory.createCourseDAO().findById(testData.course1Id);
        assertEquals(CourseStatus.CREATED, course1.getStatus());
        ICourse course2 = daoFactory.createCourseDAO().findById(testData.course2Id);
        assertEquals(CourseStatus.ONGOING, course2.getStatus());
    }

}
