package models;
import org.joda.time.DateTime;
import org.junit.Test;
import util.InMemoryDbTest;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import static org.junit.Assert.*;
public class OrderModelTest extends InMemoryDbTest {
@Test
public void testAssignStatus(){
DateTime now = getTime(2015, 10, 14, 11, 6);
OrderModel model = new OrderModel();
//=========No start date -> Dormant ==========================================
model.start_date1 = null;
model.start_date1 = null ;
model.start_termin1 = null;
model.end_termin1 = null;
model.assignStatus(now);
assertEquals("Dormant", OrderStatus.DORMANT, model.orderStatus);
//=========Start date after now -> New ==========================================
model.start_date1 = getTime(2015,11,1,12,0).toDate();
model.assignStatus(now);
assertEquals("New", OrderStatus.NEW, model.orderStatus);
//==========Now between start and end -> Active =========================================
model.start_date1 = getTime(2015,10,1,12,0).toDate();
model.end_date1 = getTime(2015,12,1,12,0).toDate();
model.assignStatus(now);
assertEquals("Active", OrderStatus.ACTIVE, model.orderStatus);
//=============Now after end -> Expired ======================================
model.end_date1 = getTime(2015,10,2,12,0).toDate();
model.assignStatus(now);
assertEquals("Expired", OrderStatus.EXPIRED, model.orderStatus);
}
@Test
public void testStatusDeleted(){
DateTime now = getTime(2015, 10, 14, 11, 6);
OrderModel model = new OrderModel();
//=========No start date -> Dormant ==========================================
model.start_date1 = null;
model.start_date1 = null ;
model.start_termin1 = null;
model.end_termin1 = null;
model.deleted = new Date();
model.assignStatus(now);
assertEquals("Dormant but deleted", OrderStatus.DELETED, model.orderStatus);
//=========Start date after now -> New ==========================================
model.start_date1 = getTime(2015,11,1,12,0).toDate();
model.assignStatus(now);
assertEquals("New but deleted", OrderStatus.DELETED, model.orderStatus);
//==========Now between start and end -> Active =========================================
model.start_date1 = getTime(2015,10,1,12,0).toDate();
model.end_date1 = getTime(2015,12,1,12,0).toDate();
model.assignStatus(now);
assertEquals("Active but deleted", OrderStatus.DELETED, model.orderStatus);
//=============Now after end -> Expired ======================================
model.end_date1 = getTime(2015,10,2,12,0).toDate();
model.assignStatus(now);
assertEquals("Expired but deleted", OrderStatus.DELETED, model.orderStatus);
}
@Test
public void testAssignStatusSameDay(){
DateTime yesterday = getTime(2015, 10, 13, 11, 6);
DateTime now = getTime(2015, 10, 14, 11, 6);
DateTime tomorrow = getTime(2015, 10, 15, 11, 6);
OrderModel model = new OrderModel();
//==================================
model.start_date1 = getTime(2015,10,14,0,0).toDate();
model.start_termin1 = 18;
model.end_date1 = null;
model.end_termin1 = null;
model.assignStatus(yesterday);
assertEquals("New 1 yesterday", OrderStatus.NEW, model.orderStatus);
model.assignStatus(now);
assertEquals("Active 1 today", OrderStatus.ACTIVE, model.orderStatus);
//======== Start date = after now -> New ===========================
model.start_date1 = getTime(2015,10,14,0,0).toDate();
model.start_termin1 = 12;
model.end_date1= getTime(2015,10,14,0,0).toDate();
model.end_termin1= null;
model.assignStatus(yesterday);
assertEquals("New 2", OrderStatus.NEW, model.orderStatus);
// start date today -> active
model.assignStatus(now);
assertEquals("Active 2", OrderStatus.ACTIVE, model.orderStatus);
//======= now between Start date and end date -> Active =========
model.start_date1 = getTime(2015,10,14).toDate();
model.start_termin1 = 3;
model.end_date1= getTime(2015,10,14).toDate();
model.end_termin1= null;
model.assignStatus(now);
assertEquals("Active 1", OrderStatus.ACTIVE, model.orderStatus);
//======= now between Start date and end date -> Active =========
model.start_date1 = getTime(2015,10,14).toDate();
model.start_termin1 = 3;
model.end_date1 = getTime(2015,10,14).toDate();
model.end_termin1 = 21;
model.assignStatus(now);
assertEquals("Active 2", OrderStatus.ACTIVE, model.orderStatus);
//===========End date before now -> Expired ========================================
model.start_date1 = getTime(2015,10,14).toDate();
model.start_termin1 = 3;
model.end_date1 = getTime(2015,10,14).toDate();
model.end_termin1 = 6;
model.assignStatus(tomorrow);
assertEquals("Expired", OrderStatus.EXPIRED, model.orderStatus);
}
@Test
public void testAssignStatusDormant() {
DateTime now = getTime(2015, 10, 14, 11, 6);
OrderModel model = new OrderModel();
//========== No start, but end specified -> Dormant ========================
model.start_date1 = null;
model.end_date1 = getTime(2015, 10, 14, 0, 0).toDate();
model.assignStatus(now);
assertEquals("New Dormant", OrderStatus.DORMANT, model.orderStatus);
}
@Test
public void testAddTaskOrder(){
DateTime now = getTime(2015, 10, 14, 11, 6);
CustomerModel customerModel = CustomerModel.find.byId(1L);
OrderModel model = new OrderModel();
model.met_ref = "Gjøremål1";
model.customer = customerModel;
model.position = null; // no position
model.taskDescription = "Test 123";
model.save();
OrderModel model1 = OrderModel.findByMetref("Gjøremål1");
assertNotNull("Fant ikke bestilling", model1);
assertNull("Posisjon er ikke null", model1.position);
assertNotNull("Kunde er null",model1.customer);
}
@Test
public void testGetTermin() {
DateTime now = getTime(2015, 10, 14, 11, 6);
OrderModel model = new OrderModel();
Set<Integer> termins = new HashSet<Integer>();
termins.add(6);
termins.add(18);
assertEquals("Parsing of termins are wrong", termins, model.parseTermins("6,18,"));
}
}