package gov.nysenate.openleg.dao.entity.committee;
import gov.nysenate.openleg.BaseTests;
import gov.nysenate.openleg.dao.entity.committee.data.CommitteeDao;
import gov.nysenate.openleg.model.base.SessionYear;
import gov.nysenate.openleg.model.entity.Chamber;
import gov.nysenate.openleg.model.entity.Committee;
import gov.nysenate.openleg.model.entity.CommitteeVersionId;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class CommitteeDaoTests extends BaseTests{
private static Logger logger = LoggerFactory.getLogger(CommitteeDaoTests.class);
@Autowired
protected CommitteeDao committeeDao;
// @Autowired
//// protected TestCommittees testCommittees;
//
// private static final DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//
// @Test
// public void deleteCommittees(){
// for(Committee committee : testCommittees.getCommittees()){
// committeeDao.deleteCommittee(committee.getId());
// }
// logger.info("All test committees deleted.");
// }
//
// @Test
// public void insertCommitteeTest(){
// committeeDao.updateCommittee(testCommittees.getCommittee("test1"), null);
// }
//
// @Test
// public void getCommitteeTest(){
// deleteCommittees();
// Committee test1 = testCommittees.getCommittee("test1");
// committeeDao.updateCommittee(test1, null);
// Committee committee = committeeDao.getCommittee(test1.getId());
// assert(committee.equals(testCommittees.getCommittee("test1")));
// }
//
// @Test
// public void getCommitteeByTimeTest(){
// deleteCommittees();
// Committee test1 = testCommittees.getCommittee("test1");
// Committee test1v2 = testCommittees.getCommittee("test1v2");
// committeeDao.updateCommittee(test1, null);
// committeeDao.updateCommittee(test1v2, null);
// Committee committee1 = committeeDao.getCommittee(test1.getVersionId());
// Committee committee2 = committeeDao.getCommittee(test1v2.getVersionId());
// assert(!committee1.equals(committee2));
// assert(committee1.equals(test1));
// assert(committee2.equals(test1v2));
// }
//
// @Test
// public void insertSameCommitteeTest(){
// deleteCommittees();
// Committee test1 = testCommittees.getCommittee("test1");
// Committee test1nomod = testCommittees.getCommittee("test1nomod");
// committeeDao.updateCommittee(test1, null);
// committeeDao.updateCommittee(test1nomod, null);
// Committee committee = committeeDao.getCommittee(test1.getId());
// assert(committee.equals(test1));
// assert(!committee.equals(test1nomod));
// }
//
// @Test
// public void insertReplacementCommitteeTest(){
// deleteCommittees();
// Committee test1 = testCommittees.getCommittee("test1");
// Committee test1replace = testCommittees.getCommittee("test1replace");
// committeeDao.updateCommittee(test1, null);
// committeeDao.updateCommittee(test1replace, null);
// Committee committee = committeeDao.getCommittee(test1.getVersionId());
// assert(!committee.equals(test1));
// assert(committee.equals(test1replace));
// }
//
// @Test
// public void insertMergeCommitteeTest(){
// deleteCommittees();
// Committee test1 = testCommittees.getCommittee("test1"); // initial test
// Committee test1v2merge = testCommittees.getCommittee("test1v2merge"); // same as 1v2 but earlier pub date
// Committee test1v2mergeReplace = testCommittees.getCommittee("test1v2mergeReplace"); // reverts 1v2 merge to initial membership
// Committee test1v2 = testCommittees.getCommittee("test1v2"); // adds new member to test1
// Committee test1v3 = testCommittees.getCommittee("test1v3"); // same as test1 but pub date is after 1v2
// assert(!test1.equals(test1v2merge));
// assert(!test1.equals(test1v2));
// assert(!test1.equals(test1v3));
// assert(!test1v2merge.equals(test1v2));
// assert(!test1v2merge.equals(test1v3));
// assert(!test1v2.equals(test1v3));
// assert(test1.membersEquals(test1v3));
// assert(!test1.membersEquals(test1v2));
// assert(test1v2merge.membersEquals(test1v2));
// assert(test1.membersEquals(test1v2mergeReplace));
//
//// CommitteeVersionId test1id = test1.getVersionId();
//// CommitteeVersionId int1 = new CommitteeVersionId(test1id.getChamber(), test1id.getName(), test1id.getSession(),
//// dateFormat.parseDateTime("2009-01-10").toDate());
//// CommitteeVersionId int2 = new CommitteeVersionId(test1id.getChamber(), test1id.getName(), test1id.getSession(),
//// dateFormat.parseDateTime("2009-02-20").toDate());
//// CommitteeVersionId int3 = new CommitteeVersionId(test1id.getChamber(), test1id.getName(), test1id.getSession(),
//// dateFormat.parseDateTime("2009-03-10").toDate());
//// CommitteeVersionId int4 = new CommitteeVersionId(test1id.getChamber(), test1id.getName(), test1id.getSession(),
//// dateFormat.parseDateTime("2009-05-10").toDate());
//
//// committeeDao.updateCommittee(test1);
//// committeeDao.updateCommittee(test1v2);
//// committeeDao.updateCommittee(test1v3);
//// Committee committee1 = committeeDao.getCommittee(int1);
//// Committee committee2 = committeeDao.getCommittee(int2);
//// Committee committee3 = committeeDao.getCommittee(int3);
//// Committee committee4 = committeeDao.getCommittee(int4);
//// assert(committee1.equals(test1));
//// assert(committee2.equals(test1));
//// assert(committee3.equals(test1v2));
//// assert(committee4.equals(test1v3));
//
//// committeeDao.updateCommittee(test1v2merge);
//// committee1 = committeeDao.getCommittee(int1);
//// committee2 = committeeDao.getCommittee(int2);
//// committee3 = committeeDao.getCommittee(int3);
//// committee4 = committeeDao.getCommittee(int4);
//// assert(committee1.equals(test1));
//// assert(committee2.equals(test1v2merge));
//// assert(committee3.equals(test1v2merge));
//// assert(committee4.equals(test1v3));
//
//// committeeDao.updateCommittee(test1v2mergeReplace);
//// committee1 = committeeDao.getCommittee(int1);
//// committee2 = committeeDao.getCommittee(int2);
//// committee3 = committeeDao.getCommittee(int3);
//// committee4 = committeeDao.getCommittee(int4);
//// assert(committee1.equals(test1));
//// assert(committee2.equals(test1));
//// assert(committee3.equals(test1));
//// assert(committee4.equals(test1));
// }
//
// @Test
// public void updateCommitteeMeetingTest(){
// deleteCommittees();
// Committee test1 = testCommittees.getCommittee("test1");
// Committee test1MeetChange = testCommittees.getCommittee("test1MeetChange");
// committeeDao.updateCommittee(test1, null);
// Committee committee = committeeDao.getCommittee(test1.getId());
// assert(committee.equals(test1));
// committeeDao.updateCommittee(test1MeetChange, null);
// committee = committeeDao.getCommittee(test1.getId());
// assert(!committee.equals(test1));
// assert(!committee.meetingEquals(test1));
// assert(committee.membersEquals(test1));
// assert(committee.meetingEquals(test1MeetChange));
// assert(committee.membersEquals(test1MeetChange));
// }
//
// @Test
// public void anotherCommitteeTest() {
// committeeDao.getCommittee(new CommitteeVersionId(Chamber.SENATE, "Ethics", SessionYear.of(2011), LocalDateTime.now()));
// }
}