package validators;
import models.OrderModel;
import models.PositionModel;
import org.joda.time.DateTime;
import org.junit.Test;
import service.PoseidonService;
import util.InMemoryDbTest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import static org.junit.Assert.*;
public class OrderValidatorTest extends InMemoryDbTest {
public OrderValidatorTest() {
}
@Test
public void testOk(){
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
PoseidonService.setNow(new DateTime(sdf.parse("2015-11-07"), PoseidonService.getTimeZone()));
} catch (ParseException e) {
// ignore
}
OrderValidator validator = new OrderValidator();
OrderModel order = new OrderModel();
order.id = 0L;
order.met_ref= "ABC";
order.customer_name ="Leif ";
order.customer_phone = "123";
order.customer_email= "leifj@met.no";
order.custref_contractnum = "K123";
order.custref_email = "leifj@met.no";
order.start_date1 = PoseidonService.getNow().withTimeAtStartOfDay().toDate();
order.end_date1 = order.start_date1;
order.start_termin1 = 3;
order.end_termin1 = 3;
order.info_for_meteorologist = "Bla ";
order.other_info = "";
order.position = new PositionModel();
order.position_name = "";
ValidationResult result = validator.validateModel(order);
assertTrue("Validering feilet", result.ok);
assertEquals("validationErrors.size",0,result.validationErrors.size());
}
@Test
public void testMissingCustref (){
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
PoseidonService.setNow(new DateTime(sdf.parse("2015-11-07"), PoseidonService.getTimeZone()));
} catch (ParseException e) {
// ignore
}
OrderValidator validator = new OrderValidator();
OrderModel order = new OrderModel();
order.id = 0L;
order.met_ref = "ABC";
order.customer_name = "Leif ";
order.customer_phone = "123";
order.customer_email = "leifj@met.no";
order.custref_po_calloff = null;
order.custref_contractnum = null;
order.custref_email = null;
order.start_date1 = PoseidonService.getNow().withTimeAtStartOfDay().toDate();
order.end_date1 = order.start_date1;
order.start_termin1 = 3;
order.end_termin1 = 3;
order.info_for_meteorologist = "Bla ";
order.other_info = "";
order.position = new PositionModel();
order.position_name = "";
ValidationResult result = validator.validateModel(order);
assertEquals(false, result.ok);
assertEquals("validationErrors.size",1,result.validationErrors.size());
}
@Test
public void testInvalidDates() {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
PoseidonService.setNow(new DateTime(sdf.parse("2015-11-07"), PoseidonService.getTimeZone()));
} catch (ParseException e) {
// ignore
}
OrderValidator validator = new OrderValidator();
OrderModel order = new OrderModel();
order.id = 0L;
order.met_ref= "ABC";
order.customer_name ="Leif ";
order.customer_phone = "123";
order.customer_email= "leifj@met.no";
order.custref_contractnum = "K123";
order.custref_email = "leifj@met.no";
order.start_date1 = PoseidonService.getNow().withTimeAtStartOfDay().toDate();
// end_date1 is 1 day before start_date1 -- should generate a validation error
order.end_date1 = new DateTime(order.start_date1,PoseidonService.getTimeZone()).minusDays(1).toDate() ;
order.start_termin1 = 3;
order.end_termin1 = 3;
order.info_for_meteorologist = "Bla ";
order.other_info = "";
order.position = new PositionModel();
order.position_name = "";
ValidationResult result = validator.validateModel(order);
assertEquals(false,result.ok);
ValidationError error1 = result.validationErrors.get(0);
assertNotNull("error1 is null",error1);
assertEquals("error1.type",error1.errorType,ValidationErrorType.ORDER_END_BEFORE_START);
assertEquals("error1.fieldname","start_date1",error1.fieldName);
assertEquals("error1.info","",error1.info);
}
@Test
public void testMultipleCustomerEmails(){
OrderValidator validator = new OrderValidator();
OrderModel order = new OrderModel();
order.id = 0L;
order.met_ref= "ABC";
order.customer_name ="Leif ";
order.customer_phone = "123";
order.customer_email= "leifj@met.no, a@b.com b@c.com \n d@c.com";
order.custref_contractnum = "K123";
order.custref_email = "leifj@met.no";
order.start_date1 = PoseidonService.getNow().withTimeAtStartOfDay().toDate();
order.start_date1 = PoseidonService.getNow().plusDays(14).withTimeAtStartOfDay().toDate();
order.start_termin1 = 3;
order.end_termin1 = 3;
order.info_for_meteorologist = "Bla ";
order.other_info = "";
order.position = new PositionModel();
order.position_name = "";
ValidationResult result = validator.validateModel(order);
assertTrue(result.ok);
assertEquals("validationErrors.size",0,result.validationErrors.size());
}
@Test
public void testMultipleCustomerEmailsWithOneIncorrect(){
OrderValidator validator = new OrderValidator();
OrderModel order = new OrderModel();
order.id = 0L;
order.met_ref= "ABC";
order.customer_name ="Leif ";
order.customer_phone = "123";
order.customer_email= "leifj@met.no, a@b b@c.com \n d@c.com";
order.custref_contractnum = "K123";
order.custref_email = "leifj@met.no";
order.start_date1 = PoseidonService.getNow().withTimeAtStartOfDay().toDate();
order.start_date1 = PoseidonService.getNow().plusDays(14).withTimeAtStartOfDay().toDate();
order.start_termin1 = 3;
order.end_termin1 = 3;
order.info_for_meteorologist = "Bla ";
order.other_info = "";
order.position = new PositionModel();
order.position_name = "";
ValidationResult result = validator.validateModel(order);
assertFalse("Validering er uventet ok",result.ok);
assertEquals("Ikke forventet antall valideringsfeil",1,result.validationErrors.size());
ValidationError validationError = result.validationErrors.get(0);
assertEquals("Feil valideringsfeiltype",ValidationErrorType.ORDER_INVALID_EMAIL, validationError.errorType);
assertEquals("Feil epost","a@b", validationError.info);
}
}