public void Test5() { using (var session = _sessionFactory.OpenSession()) using (var transaction = session.BeginTransaction()) { var fakeSession = new SessionDecorator(session) { DoNotDispose = true }; var mockSessionFactory = new Mock <ISessionFactory>(); mockSessionFactory.Setup(i => i.OpenSession()).Returns(fakeSession); #region populate test data var tstMandant = session.Query <WmsMandant>().Single(i => i.PartnerCode == "TST"); // создаем менеджер маршрутов var mgrRoute = new YMgRoute { Partner = tstMandant, MgRouteCreateRoute = false, MgRouteName = "Mgr for autotests", MgRouteNumber = "AutoTestRouteNumber" }; session.Save(mgrRoute); // создаем маршрут var route = new YRoute() { Partner = tstMandant, MgRoute = mgrRoute, RouteDate = DateTime.Now, RouteNumber = mgrRoute.MgRouteNumber }; session.Save(route); // создаем маршрут var routeChange = new YRoute() { Partner = tstMandant, MgRoute = mgrRoute, RouteDate = route.RouteDate.AddDays(1), RouteNumber = "TestRoute" }; session.Save(routeChange); // создаем накладную с плановой датой отгрузки var owb = new WmsOWB { Partner = tstMandant, OWBName = "Owb for testing routes", OWBProductNeed = "NOACTIVATE", OWBType = "OWBTYPENORMAL", OWBRoutePlan = route.RouteID, OWBOutDatePlan = route.RouteDate, Status = session.Query <WmsOWBStatus>().Single(i => i.StatusCode == "OWB_NONE") }; session.Save(owb); session.Flush(); #endregion try { // запускаем var api = new WmsAPI(mockSessionFactory.Object, _container.Resolve <IWmsXmlConverter>(), _container.Resolve <IWorkflowLoader>()); api.ChangeOwbRoute(owb.OWBID, routeChange.RouteID, route.RouteDate, false, true); } catch (OracleException ex) { if (!string.IsNullOrEmpty(ex.Message)) { var errorText = ex.Message.Split(new[] { "\n" }, StringSplitOptions.None); errorText[0].ShouldBeEquivalentTo(string.Format("ORA-20801: В накладной с ID = {0} уже проставлен маршрут и он отличается от переданного/расчитанного({1})", owb.OWBID, routeChange.RouteID)); } else { throw (ex); } } transaction.Rollback(); } }
public static void PopulateTestData(ISession session, out WmsOWB owb, out DateTime expectedDate, out YMgRoute mgrRoute) { var tstMandant = session.Query <WmsMandant>().Single(i => i.PartnerCode == "TST"); // создаем накладную с плановой датой отгрузки owb = new WmsOWB { Partner = tstMandant, OWBName = "Owb for testing routes", OWBProductNeed = "NOACTIVATE", OWBType = "OWBTYPENORMAL", Status = session.Query <WmsOWBStatus>().Single(i => i.StatusCode == "OWB_CREATED") }; session.Save(owb); // проверяем если ли записи календаря на даты расчета (+2 дня) var exprectedTime = TimeSpan.FromHours(15); int timeToPrepare = 2880; //min int tmpTimeToPrepare = timeToPrepare; var dateIdx = 0; while (tmpTimeToPrepare > 0) { var tmpDate = GetOrAddCalendarDate(owb.DateIns.Value.Date.AddDays(dateIdx), session); // для первой даты вычитаем кол-во минут оставшегося раб.дня if (dateIdx == 0) { if (owb.DateIns.Value < tmpDate.CalendarTimeTill) { tmpTimeToPrepare -= (int)(tmpDate.CalendarTimeTill - owb.DateIns.Value).TotalMinutes; } } else { tmpTimeToPrepare -= (int)(tmpDate.CalendarTimeTill - tmpDate.CalendarTimeFrom).TotalMinutes; } dateIdx++; } expectedDate = owb.DateIns.Value.AddDays(--dateIdx); //TODO: Разаобраться зачем нужен код внизу //if (expectedDate > expectedDate.Date.Add(exprectedTime)) //{ // var tmpDate = GetOrAddCalendarDate(expectedDate.Date.AddDays(dateIdx), session); // expectedDate = expectedDate.AddDays(1); //} //else // expectedDate = expectedDate.Date.Add(exprectedTime); // создаем выбор даты // пока работаем с имеющимся, когда появится возможность работать с CPV - перейти на создание здесь var routeDateSelect = new YMgRouteDateSelect { Partner = tstMandant, MgRouteDateSelectDateSource = MgRouteDateSelectDateSources.OwbDateIns, Priority = 1 }; session.Save(routeDateSelect); // добавляем CPV var cpvRouteDSL1 = new YMgRouteDateSelectCPV() { CustomParam = session.Get <WmsCustomParam>("RouteDSL1"), MGROUTEDATESELECT = routeDateSelect }; session.Save(cpvRouteDSL1); var cpvRouteDSUseWeekendL2 = new YMgRouteDateSelectCPV { CustomParam = session.Get <WmsCustomParam>("RouteDSUseWeekendL2"), MGROUTEDATESELECT = routeDateSelect, Parent = cpvRouteDSL1, CPVValue = "0" }; session.Save(cpvRouteDSUseWeekendL2); var cpvRouteDSTimeConstL2 = new YMgRouteDateSelectCPV { CustomParam = session.Get <WmsCustomParam>("RouteDSTimeConstL2"), MGROUTEDATESELECT = routeDateSelect, Parent = cpvRouteDSL1, CPVValue = expectedDate.ToString("yyyyMMdd HH:mm:ss") }; session.Save(cpvRouteDSTimeConstL2); var cpvRouteDSIncrementL2 = new YMgRouteDateSelectCPV { CustomParam = session.Get <WmsCustomParam>("RouteDSIncrementL2"), MGROUTEDATESELECT = routeDateSelect, Parent = cpvRouteDSL1, CPVValue = timeToPrepare.ToString() }; session.Save(cpvRouteDSIncrementL2); var cpvRouteDSDateSourceL2 = new YMgRouteDateSelectCPV { CustomParam = session.Get <WmsCustomParam>("RouteDSDateSourceL2"), MGROUTEDATESELECT = routeDateSelect, Parent = cpvRouteDSL1, CPVValue = "DATEINS" }; session.Save(cpvRouteDSDateSourceL2); // создаем менеджер маршрутов mgrRoute = new YMgRoute { Partner = tstMandant, MgRouteCreateRoute = false, MgRouteName = "Mgr for autotests", MgRouteNumber = "AutoTestRouteNumber" }; session.Save(mgrRoute); // создаем выбор менеджера маршрутов var routeSelect = new YMgRouteSelect { Partner = tstMandant, MgRoute = mgrRoute, Priority = 1 }; session.Save(routeSelect); // создаем маршрут (создание из API проверить не получится, т.к. там, для блокировки параллельного создания, используются атомарные транзакции var route = new YRoute() { Partner = tstMandant, MgRoute = mgrRoute, RouteDate = expectedDate, RouteNumber = mgrRoute.MgRouteNumber // mgrRoute.MgRouteNumber }; session.Save(route); session.Flush(); // перечитываем DateSelect session.Refresh(routeDateSelect); }