package validation;

import at.itsv.kfoqsdb.data.entities.validation.marker.QsCreation;
import at.itsv.kfoqsdb.data.entities.validation.marker.QsFinish;
import at.itsv.kfoqsdb.data.entities.QsEintrag;
import at.itsv.kfoqsdb.data.entities.leistungsart.HauptBenhandlung;
import at.itsv.kfoqsdb.data.entities.leistungsart.InterzeptiveBehandlung;
import org.junit.Test;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.groups.Default;
import java.util.Date;
import java.util.Set;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;

/**
 * Created by 31100856 on 09.11.2017.
 */
public class FinishValidationTest extends AbstractValidationTest {
	

	@Test
	public void testIBInvalidIndikation(){
		InterzeptiveBehandlung ib = new InterzeptiveBehandlung();
		createQSEintragDefault(ib);
		ib.setIndikationLE("x");
		ib.setIndikationQS("m");
		ib.setIndikationDatumLE(new Date());
		ib.setIndikationDatumQS(new Date());
		ib.setErfolgsannahmeErreicht(false);
		ib.setIbDatumBehandlungsendeLE(new Date());
		
		assertEquals( validate(ib).size(), 1);
	}
	
	@Test
	public void testHBPositiv(){
		HauptBenhandlung hb = new HauptBenhandlung();
		createQSEintragDefault(hb);
		hb.setParAnfangswert(100L);
		hb.setHbDatumBehandlungsbeginnLE(new Date());
		hb.setHbDatumBehandlungsendeLE(new Date());
		hb.setParEndwert(100L);
		assertEquals( validate(hb).size(),1);
	}
	
	
	@Test
	public void testHBAbbruch(){
		HauptBenhandlung hb = new HauptBenhandlung();
		createQSEintragDefault(hb);
		hb.setParAnfangswert(100L);
		hb.setHbDatumBehandlungsbeginnLE(new Date());
		hb.setHbDatumBehandlungsendeLE(new Date());
		hb.setDatumBehandlungsabbruchLE(new Date());
		hb.setParEndwert(100L);
		assertNotEquals(validate(hb).size(), 0);
	}
	
	
	
	private Set<ConstraintViolation<QsEintrag>> validate(QsEintrag qsEintrag) {
		ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
		Validator validator = factory.getValidator();
		return validator.validate(qsEintrag, QsFinish.class, Default.class);
	}
	
}
