package service;
import api.v1.ForecastSearchParams;
import api.v1.WorklistItem;
import api.v1.WorklistItemStatus;
import models.ForecastSearchResult;
import models.OrderModel;
import org.joda.time.DateTime;
import org.junit.Test;
import util.InMemoryDbTest;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
public class ForecastServiceTest extends InMemoryDbTest{
@Test
public void testSearchSingleOrderPartlyInvoiced(){
ForecastService service = new ForecastService(fakeUser);
ForecastSearchParams params = new ForecastSearchParams();
params.met_ref = "1234321";
List<ForecastSearchResult> searchResult = service.search(params);
assertNotNull("search result", searchResult);
assertEquals("result size",2,searchResult.size());
assertEquals("1 should be invoiced",true,searchResult.get(0).invoiced);
assertEquals("1 should be not invoiced",false,searchResult.get(1).invoiced);
}
@Test
public void testSearchSingleOrderOutsideDateRange(){
ForecastService service = new ForecastService(fakeUser);
ForecastSearchParams params = new ForecastSearchParams();
params.met_ref = "1234321";
params.start_date = new DateTime(2016,1,1,0,0,PoseidonService.getTimeZone()).toDate();
params.end_date = new DateTime(2016,2,1,0,0,PoseidonService.getTimeZone()).toDate();
List<ForecastSearchResult> searchResult = service.search(params);
assertNotNull("search result", searchResult);
assertEquals("result size",0,searchResult.size());
}
@Test
public void testGetWorklistItems() throws Exception {
ForecastService service = new ForecastService(fakeUser);
OrderService orderService = new OrderService(fakeUser);
DateTime now = new DateTime(2016,2,25,14,0,PoseidonService.getTimeZone());
service.setNow(now);
DateTime date = now.withTimeAtStartOfDay();
Integer termin = 15;
List<OrderModel> orders = orderService.getOrdersForDate(date);
List<WorklistItem> worklistitems = service.getWorklistItems(date, termin, orders);
assertNotNull("null worklist", worklistitems);
assertEquals("Uventet antall worklistitems",5,worklistitems.size());
assertNotNull("Ingen status på Huldra 1",worklistitems.get(0).status);
assertEquals("Uventet status på Huldra 1", WorklistItemStatus.NO_DATA,worklistitems.get(0).status);
assertNotNull("Ingen status på Huldra 2",worklistitems.get(1).status);
assertEquals("Uventet status på Huldra 2", WorklistItemStatus.NO_DATA,worklistitems.get(1).status);
assertNotNull("Ingen status på Muchison",worklistitems.get(2).status);
assertEquals("Uventet status på Murchison", WorklistItemStatus.NO_DATA,worklistitems.get(2).status);
assertNotNull("Ingen status på Muchison",worklistitems.get(3).status);
assertEquals("Uventet status på Gulllfaks", WorklistItemStatus.READY,worklistitems.get(3).status);
assertEquals("Uventet vindstatus Gullfaks", true,worklistitems.get(3).strongWindWarning);
assertNotNull("Bestilling no_pos har ikke produkt", worklistitems.get(4).product);
assertEquals("Uventet produkt på bestilling no_pos", "Nordkalotten",worklistitems.get(4).product.name);
}
@Test
public void testFindItemStatus() throws Exception {
ForecastService service = new ForecastService(fakeUser);
DateTime now = new DateTime(2016,2,25,15,0,PoseidonService.getTimeZone());
service.setNow(now);
DateTime date = now.withTimeAtStartOfDay();
Integer termin = 15;
String pname = "Ukjent stasjon";
WorklistItemStatus status = service.findItemStatus(pname,date,termin );
assertEquals("Uventet worklistItemStatus for ukjent stasjon", WorklistItemStatus.NO_DATA,status);
pname = "Gullfaks";
// mer enn 6 timer før termin -> OLD_DATA
service.setNow(new DateTime(2016, 2,23,15,0, PoseidonService.getTimeZone()));
status = service.findItemStatus(pname,date,termin );
assertEquals("Uventet worklistItemStatus: -48", WorklistItemStatus.OLD_DATA,status);
// mellom -6 og +6 timer -> READY
service.setNow(new DateTime(2016, 2,25,14,0, PoseidonService.getTimeZone()));
status = service.findItemStatus(pname,date,termin );
assertEquals("Uventet worklistItemStatus: -1", WorklistItemStatus.READY,status);
service.setNow(new DateTime(2016, 2,25,16,0, PoseidonService.getTimeZone()));
status = service.findItemStatus(pname,date,termin );
assertEquals("Uventet worklistItemStatus: +1", WorklistItemStatus.READY,status);
// mer enn +6
service.setNow(new DateTime(2016, 2,26,6,0, PoseidonService.getTimeZone()));
status = service.findItemStatus(pname,date,termin );
assertEquals("Uventet worklistItemStatus: +15", WorklistItemStatus.OLD_DATA,status);
}
}