public void Test() { var sessionShareExtention = new SessionShareExtention(); var mockWfStorage = new Mock <IWorkflowStorage>(); mockWfStorage.Setup(i => i.Load(_wfIdentity)).Returns(_wf); var wfAppFactory = new WorkflowApplicationFactory(null as InstanceStore, mockWfStorage.Object); using (var childContainer = _container.CreateChildContainer()) { childContainer.RegisterInstance <IWorkflowApplicationFactory>(wfAppFactory); childContainer.RegisterInstance(sessionShareExtention, new ContainerControlledLifetimeManager()); using (var session = _sessionFactory.OpenSession()) using (var transaction = session.BeginTransaction()) { var sessionDecorator = new SessionDecorator(session) { DoNotDispose = true, ExternalTransaction = new TransactionDecorator(transaction) { DisableActions = true } }; var sessionFactoryMock = new Mock <ISessionFactory>(); sessionFactoryMock.Setup(i => i.OpenSession()).Returns(sessionDecorator); sessionFactoryMock.Setup(i => i.OpenSession(It.IsAny <IInterceptor>())).Returns(sessionDecorator); #region prepare data var mandant = session.Query <WmsMandant>().FirstOrDefault(o => o.PartnerCode == MandantCode); if (mandant == null) { throw new Exception(string.Format("Отсутствует тестовый мандант с кодом '{0}'", MandantCode)); } var eventKind = session.Query <WmsEventKind>().FirstOrDefault(o => o.EventKindCode == EventKindCode); if (eventKind == null) { throw new Exception(string.Format("Отсутствует вид события с кодом '{0}'", EventKindCode)); } var partner = new WmsPartner { PartnerCode = _testName, PartnerName = _testName, PartnerLink2Mandant = mandant, PartnerHostRef = _testName }; session.Save(partner); var owb = new WmsOWB { OWBName = _testName, OWBType = "OWBTYPENORMAL", OWBPriority = 500, Status = session.Query <WmsOWBStatus>().FirstOrDefault(o => o.StatusCode == "OWB_ACTIVATED"), Partner = mandant, OWBProductNeed = "NOACTIVATE", OWBCarrier = partner }; session.Save(owb); var iwb = new WmsIWB { IWBName = _testName, IWBType = "IWBTYPENORMAL", IWBPriority = 500, Status = session.Query <WmsIWBStatus>().FirstOrDefault(o => o.StatusCode == "IWB_COMPLETED"), Partner = mandant }; session.Save(iwb); #region Product var tetype = new WmsTEType { TETypeCode = _testName, TETypeName = _testName, TETypeLength = 1000, TETypeWidth = 1000, TETypeHeight = 1000, TETypeMaxWeight = 1000, }; session.Save(tetype); var placeType = new WmsPlaceType { PlaceTypeCode = _testName, PlaceTypeName = _testName, PlaceTypeCapacity = 100, PlaceTypeLength = 10000, PlaceTypeWidth = 10000, PlaceTypeHeight = 10000, PlaceTypeMaxWeight = 10000, }; session.Save(placeType); var placeClass = new WmsPlaceClass { PlaceClassCode = _testName, PlaceClassName = _testName }; session.Save(placeClass); var receiveArea = new WmsReceiveArea { ReceiveAreaCode = _testName, ReceiveAreaName = _testName }; session.Save(receiveArea); var supplyArea = new WmsSupplyArea { SupplyAreaCode = _testName, SupplyAreaName = _testName }; session.Save(supplyArea); var motionArea = new WmsMotionArea { MotionAreaCode = _testName, MotionAreaName = _testName }; session.Save(motionArea); var segmentType = new WmsSegmentType { SegmentTypeCode = _testName, SegmentTypeName = _testName }; session.Save(segmentType); var areaType = new WmsAreaType { AreaTypeCode = _testName, AreaTypeName = _testName }; session.Save(areaType); var warehouse = new WmsWarehouse { WarehouseCode = _testName, WarehouseName = _testName }; session.Save(warehouse); var area = new WmsArea { AreaCode = _testName, AreaName = _testName, AreaType = areaType, Warehouse = warehouse }; session.Save(area); var segment = new WmsSegment { SegmentCode = _testName, SegmentNumber = _testName, SegmentName = _testName, SegmentType = segmentType, Area = area }; session.Save(segment); var place = new WmsPlace { PlaceCode = _testName, Segment = segment, PlaceS = 1, PlaceX = 1, PlaceY = 1, PlaceZ = 1, PlaceCapacityMax = 100, PlaceCapacity = 100, Status = session.Query <WmsPlaceStatus>().FirstOrDefault(o => o.StatusCode == "PLC_FREE"), PlaceName = _testName, PlaceType = placeType, PlaceClass = placeClass, PlaceSortA = 1, PlaceSortB = 1, PlaceSortC = 1, PlaceSortD = 1, PlaceSortPick = 1, ReceiveArea = receiveArea, MotionArea = motionArea, SupplyArea = supplyArea, PlaceWeight = 10000, PlaceWeightGroup = 10000 }; session.Save(place); var te = new WmsTE { TECode = _testName, TEType = tetype, TECurrentPlace = place, TECreationPlace = place.PlaceCode, TELength = 1000, TEWidth = 1000, TEHeight = 1000, Status = session.Query <WmsTEStatus>().FirstOrDefault(o => o.StatusCode == "TE_FREE"), TEPackStatus = "TE_PKG_NONE", TEWeight = 1000, TEMaxWeight = 10000, TETareWeight = 1000, }; session.Save(te); var art = new WmsArt { ArtCode = _testName, ArtName = _testName, Partner = mandant, ArtABCD = 'A', ArtTempMin = 1, ArtTempMax = 1000, ArtDeleted = false, ArtManufacturer = mandant, ArtType = _testName }; session.Save(art); var measureType = new WmsMeasureType { MeasureTypeCode = _testName, MeasureTypeName = _testName }; session.Save(measureType); var measure = new WmsMeasure { MeasureCode = _testName, MeasureType = measureType, MeasurePrimary = true, MeasureFactor = 1, MeasureDefault = true, MeasureShortName = "Test", MeasureName = _testName, }; session.Save(measure); var sku = new WmsSKU { Art = art, Measure = measure, SKUCount = 1, SKUPrimary = true, SKUClient = false, SKUIndivisible = true, SKUParent = null, SKUName = _testName }; session.Save(sku); var qlfDetail = new WmsQLFDetail { QLFDetailCode = _testName, QLFDetailName = _testName }; session.Save(qlfDetail); var iwbPos = new WmsIWBPos { IWB = iwb, IWBPosNumber = 1, SKU = sku, IWBPosCount = 1, IWBPosCount2SKU = 1, Status = session.Query <WmsIWBPosStatus>().SingleOrDefault(o => o.StatusCode == "IWBPOS_CREATED"), QLF = session.Query <WmsQLF>().Single(o => o.QLFCode == "QLFNORMAL"), IWBPosOwner = mandant }; session.Save(iwbPos); var owbPos = new WmsOWBPos { OWB = owb, OWBPosNumber = 1, SKU = sku, OWBPosCount = 1, OWBPosCount2SKU = 1, OWBPosReserved = 1, Status = session.Query <WmsOWBPosStatus>().SingleOrDefault(o => o.StatusCode == "OWBPOS_ACTIVATED"), QLF = session.Query <WmsQLF>().Single(o => o.QLFCode == "QLFNORMAL"), OWBPosOwner = mandant }; session.Save(owbPos); var factory = new WmsFactory { FactoryCode = "TST", FactoryName = _testName, Partner = mandant, FactoryBatchCode = _testName }; session.Save(factory); var product = new WmsProduct { TE = te, SKU = sku, ProductCountSKU = 1, ProductCount = 2, ProductTTEQuantity = 3, QLF = session.Query <WmsQLF>().Single(o => o.QLFCode == "QLFNORMAL"), QLFDetail = qlfDetail, ProductInputDate = DateTime.Now, ProductInputDateMethod = session.Query <SYSENUM_ART_FIFO>().Single(i => i.EnumKey == "FIFO" && i.EnumValue == "YEAR"), ProductDate = DateTime.Now, ProductPack = "Pack", ProductPackCountSKU = 4, ProductExpiryDate = DateTime.Now, ProductBatch = "Batch", ProductLot = "Lot", ProductSerialNumber = "Number", ProductColor = "Color", ProductTone = "Tone", ProductSize = "Size", Art = art, Partner = mandant, ProductOwner = mandant, IWBPos = iwbPos, OWBPos = owbPos, Factory = factory, Status = session.Query <WmsProductStatus>().SingleOrDefault(i => i.StatusCode == "PRODUCT_BUSY"), ProductBatchCode = "BatchCode", ProductBoxNumber = "BoxNumber", ProductHostRef = "HostRef", ProductKitArtName = "KitArtName", ProductRoot = 5, ProductPriority = 6, Country = session.Query <IsoCountry>().SingleOrDefault(i => i.CountryCode == "RUS"), ProductGTD = "GTD", TransportTaskID_r = null }; session.Save(product); var ehPrd = new WmsEventHeader { Partner = mandant, EventKind = session.Query <WmsEventKind>().FirstOrDefault(o => o.EventKindCode == "PRD_INPUT"), Status = session.Query <WmsEventHeaderStatus>().FirstOrDefault(o => o.StatusCode == "EVENT_CREATED"), ClientType = session.Query <SysClientType>().FirstOrDefault(o => o.ClientTypeCode == "DCL"), EventHeaderBillStatus = session.Query <EventHeaderBillStatus>().FirstOrDefault(o => o.StatusCode == "EVENT_BILL_OPEN"), EventHeaderOperationBusiness = session.Query <SYSENUM_OPERATION_BUSINESS>().FirstOrDefault(p => p.EnumGroup == "OPERATION" && p.EnumKey == "BUSINESS"), Operation = session.Query <BillOperation>().First(), EventHeaderInstance = "none" }; var edPrd = new wmsEventDetailPRD { PARTNERID_R = mandant.PartnerID, PRODUCTID_R = product.ProductID, OLDPRODUCTID_R = product.ProductID, EVENTKINDCODE_R = "PRD_INPUT" }; #endregion session.Flush(); var eventHeader = new WmsEventHeader { Partner = mandant, EventKind = session.Query <WmsEventKind>().FirstOrDefault(o => o.EventKindCode == EventKindCode), Status = session.Query <WmsEventHeaderStatus>().FirstOrDefault(o => o.StatusCode == "EVENT_CREATED"), ClientType = session.Query <SysClientType>().FirstOrDefault(o => o.ClientTypeCode == "DCL"), EventHeaderBillStatus = session.Query <EventHeaderBillStatus>().FirstOrDefault(o => o.StatusCode == "EVENT_BILL_OPEN"), EventHeaderOperationBusiness = session.Query <SYSENUM_OPERATION_BUSINESS>().FirstOrDefault(p => p.EnumGroup == "OPERATION" && p.EnumKey == "BUSINESS"), Operation = session.Query <BillOperation>().First(), EventHeaderInstance = "none" }; var eventDetailOwb = new wmsEventDetailOWB { OWBID_r = owb.OWBID, OWBName = owb.OWBName }; var api = new WmsAPI(sessionFactoryMock.Object, _container.Resolve <IWmsXmlConverter>(), _container.Resolve <IWorkflowLoader>()); api.RegEvent(session.GetSession(EntityMode.Poco), ehPrd, edPrd, null); api.RegEvent(session.GetSession(EntityMode.Poco), eventHeader, eventDetailOwb, null); var array = session.Query <wmsEventDetailOWB>() .Where(i => i.EventHeader.Partner.PartnerCode == MandantCode && i.EventHeader.EventKind.EventKindCode == EventKindCode && i.EventHeader.Status.StatusCode == "EVENT_CREATED" && i.EventHeader.DateIns >= DateTime.Today.AddDays(-1) && !session.Query <IoLaunchControl>() .Any( j => j.EventHeader == i.EventHeader && j.QueueMessageType.Code == EventKindCode && j.Mandant.PartnerCode == MandantCode)) .ToArray(); if (!array.Any()) { throw new Exception("Нет данных для теста"); } #endregion sessionShareExtention.SharedSession = sessionDecorator; var inputs = new Dictionary <string, object> { { "ROUTE", "ROUTE=OMS" }, { "MandantCode", MandantCode }, { "BatchSize", "1" } }; var service = childContainer.Resolve <WorkflowService>(); service.Run(_wfIdentity, inputs); var lan = session.Query <IoLaunchControl>().FirstOrDefault(i => i.EventHeader != null && i.EventHeader.EventHeaderID == eventHeader.EventHeaderID); lan.Should().NotBeNull("Не создали LanchControl"); var qout = session.Query <IoQueueOut>() .Where(i => i.Uri == string.Format("ENTITYKEY={0}; ENTITY = OWB", owb.OWBName) && i.QueueMessageType.Code == QueueMessageTypeCode) .OrderByDescending(i => i.DateIns) .First(); var data = SerializationHelper.Deserialize <WHSOWBCommandMessage>(qout.Data); data.OWBList[0].ProductList.Count.ShouldBeEquivalentTo(1); data.OWBList[0].ProductList[0].ID.ShouldBeEquivalentTo(product.ProductID); data.OWBList[0].CargoSpaceList.Count().ShouldBeEquivalentTo(1); data.OWBList[0].CargoSpaceList[0].Code.ShouldBeEquivalentTo(te.TECode); transaction.Rollback(); } } }
public void Smoke() { WithTemporarySession((session, transaction, container) => { #region populate data var partner = session.Query <WmsMandant>().Single(i => i.PartnerCode == "TST"); var reqState = new CstReqCustomsStatus() { Status2Entity = "REQCUSTOMS", StatusCode = "REQCUSTOMS_ATST", StatusName = "REQCUSTOMS_ATST" }; session.Save(reqState); var reqCustoms = new CstReqCustoms { Partner = partner, Status = reqState, }; session.Save(reqCustoms); var country1 = new IsoCountry() { CountryCode = "XX", CountryNameRus = "ATST XX", CountryNameEng = "ATST XX", CountryNumeric = "888", CountryAlpha2 = "11" }; session.Save(country1); var country2 = new IsoCountry() { CountryCode = "YY", CountryNameRus = "ATST YY", CountryNameEng = "ATST YY", CountryNumeric = "999", CountryAlpha2 = "22" }; session.Save(country2); var art1 = new WmsArt { ArtCode = "TST999111", ArtName = "999111", Partner = partner, ArtABCD = 'A', ArtPickOrder = 10, ArtType = "TST", Country = country1 }; session.Save(art1); var art1Cpv = new WmsArtCPV() { ART = art1, CustomParam = session.Query <WmsCustomParam>().Single(i => i.CustomParamCode == WmsArtCPV.ARTTNVD), CPVValue = "1", }; session.Save(art1Cpv); art1.CPV_List.Add(art1Cpv); var art2 = new WmsArt { ArtCode = "TST999222", ArtName = "999222", Partner = partner, ArtABCD = 'A', ArtPickOrder = 10, ArtType = "TST", Country = country1 }; session.Save(art2); var measureType = new WmsMeasureType { MeasureTypeCode = "ATST", MeasureTypeName = "ATST" }; session.Save(measureType); var measure = new WmsMeasure { MeasureCode = "ATST", MeasureName = "ATST", MeasureShortName = "ATST", MeasureType = measureType }; session.Save(measure); var sku1 = new WmsSKU { Art = art1, Measure = measure, SKUCount = 1, SKUPrimary = true, SKUName = "ATST1" }; session.Save(sku1); var sku2 = new WmsSKU { Art = art2, Measure = measure, SKUCount = 2, SKUPrimary = true, SKUName = "ATST2" }; session.Save(sku2); var iwbPosState = new WmsIWBPosStatus { Status2Entity = "IWB", StatusCode = "IWBPOS_ATST", StatusName = "IWBPOS_ATST" }; session.Save(iwbPosState); var cpTnvd = session.Query <WmsCustomParam>().Single(i => i.CustomParamCode == WmsIWBPosCPV.IWBPosTNVD); var cpWeight = session.Query <WmsCustomParam>().Single(i => i.CustomParamCode == WmsIWBPosCPV.IWBPosWeightGross); // ГОТОВИМ НАКЛАДНУЮ №1 var iwb1 = new WmsIWB { Partner = partner, IWBName = "AUTOTEST1", IWBPriority = 100, IWBType = "TEST" }; session.Save(iwb1); var iwb1Pos1 = new WmsIWBPos { IWB = iwb1, IWBPosOwner = partner, IWBPosNumber = 1, SKU = sku1, IWBPosCount = 10, IWBPosCount2SKU = 10, Status = iwbPosState, Country = country1, IWBPosPriceValue = 11 }; session.Save(iwb1Pos1); iwb1.IWB_WmsIWBPos_List.Add(iwb1Pos1); var iwb1Pos1TnvdCpv = new WmsIWBPosCPV { IWBPOS = iwb1Pos1, CustomParam = cpTnvd, CPVValue = "1" }; session.Save(iwb1Pos1TnvdCpv); iwb1Pos1.CPV_List.Add(iwb1Pos1TnvdCpv); var iwb1Pos1WeightCpv = new WmsIWBPosCPV { IWBPOS = iwb1Pos1, CustomParam = cpWeight, CPVValue = "11" }; session.Save(iwb1Pos1WeightCpv); iwb1Pos1.CPV_List.Add(iwb1Pos1WeightCpv); var iwb1Pos2 = new WmsIWBPos { IWB = iwb1, IWBPosOwner = partner, IWBPosNumber = 2, SKU = sku1, IWBPosCount = 10, IWBPosCount2SKU = 10, Status = iwbPosState, Country = country1, IWBPosPriceValue = 12 }; session.Save(iwb1Pos2); iwb1.IWB_WmsIWBPos_List.Add(iwb1Pos2); var iwb1Pos2TnvdCpv = new WmsIWBPosCPV { IWBPOS = iwb1Pos2, CustomParam = cpTnvd, CPVValue = "2" }; session.Save(iwb1Pos2TnvdCpv); iwb1Pos2.CPV_List.Add(iwb1Pos2TnvdCpv); var iwb1Pos2WeightCpv = new WmsIWBPosCPV { IWBPOS = iwb1Pos2, CustomParam = cpWeight, CPVValue = "12" }; session.Save(iwb1Pos2WeightCpv); iwb1Pos2.CPV_List.Add(iwb1Pos2WeightCpv); var iwb1Pos3 = new WmsIWBPos { IWB = iwb1, IWBPosOwner = partner, IWBPosNumber = 3, SKU = sku2, IWBPosCount = 10, IWBPosCount2SKU = 10, Status = iwbPosState, IWBPosPriceValue = 13 }; session.Save(iwb1Pos3); iwb1.IWB_WmsIWBPos_List.Add(iwb1Pos3); var iwb1Pos3TnvdCpv = new WmsIWBPosCPV { IWBPOS = iwb1Pos3, CustomParam = cpTnvd, CPVValue = "1" }; session.Save(iwb1Pos3TnvdCpv); iwb1Pos3.CPV_List.Add(iwb1Pos3TnvdCpv); var iwb1Pos3WeightCpv = new WmsIWBPosCPV { IWBPOS = iwb1Pos3, CustomParam = cpWeight, CPVValue = "13" }; session.Save(iwb1Pos3WeightCpv); iwb1Pos3.CPV_List.Add(iwb1Pos3WeightCpv); // ГОТОВИМ НАКЛАДНУЮ №2 var iwb2 = new WmsIWB { Partner = partner, IWBName = "AUTOTEST2", IWBPriority = 100, IWBType = "TEST" }; session.Save(iwb2); var iwb2Pos1 = new WmsIWBPos { IWB = iwb2, IWBPosOwner = partner, IWBPosNumber = 1, SKU = sku1, IWBPosCount = 10, IWBPosCount2SKU = 10, Status = iwbPosState, Country = country1, IWBPosPriceValue = 21 }; session.Save(iwb2Pos1); iwb2.IWB_WmsIWBPos_List.Add(iwb2Pos1); //var iwb2Pos1TnvdCpv = new WmsIWBPosCPV //{ // IWBPOS = iwb2Pos1, // CustomParam = cpTnvd, // CPVValue = "1" //}; //session.Save(iwb2Pos1TnvdCpv); //iwb2Pos1.CPV_List.Add(iwb2Pos1TnvdCpv); var iwb2Pos1WeightCpv = new WmsIWBPosCPV { IWBPOS = iwb2Pos1, CustomParam = cpWeight, CPVValue = "21" }; session.Save(iwb2Pos1WeightCpv); iwb2Pos1.CPV_List.Add(iwb2Pos1WeightCpv); var iwb2Pos2 = new WmsIWBPos { IWB = iwb2, IWBPosOwner = partner, IWBPosNumber = 2, SKU = sku1, IWBPosCount = 10, IWBPosCount2SKU = 10, Status = iwbPosState, Country = country2, IWBPosPriceValue = 22 }; session.Save(iwb2Pos2); iwb2.IWB_WmsIWBPos_List.Add(iwb2Pos2); var iwb2Pos2TnvdCpv = new WmsIWBPosCPV { IWBPOS = iwb2Pos2, CustomParam = cpTnvd, CPVValue = "1" }; session.Save(iwb2Pos2TnvdCpv); iwb2Pos2.CPV_List.Add(iwb2Pos2TnvdCpv); var iwb2Pos2WeightCpv = new WmsIWBPosCPV { IWBPOS = iwb2Pos2, CustomParam = cpWeight, CPVValue = "22" }; session.Save(iwb2Pos2WeightCpv); iwb2Pos2.CPV_List.Add(iwb2Pos2WeightCpv); // ПРИВЯЗЫВАЕМ НАКЛАДНЫЕ К ЗАЯВКЕ var req2iwb1 = new CstReqCustoms2WB() { IWB = iwb1, ReqCustoms = reqCustoms }; session.Save(req2iwb1); reqCustoms.ReqCustoms_CstReqCustoms2WB_List.Add(req2iwb1); var req2iwb2 = new CstReqCustoms2WB() { IWB = iwb2, ReqCustoms = reqCustoms }; session.Save(req2iwb2); reqCustoms.ReqCustoms_CstReqCustoms2WB_List.Add(req2iwb2); #endregion session.Flush(); var api = container.Resolve <WmsAPI>(); var res = api.FillReqCustomsPos(reqCustoms.ReqCustomsID, true); session.Flush(); res.Should().BeTrue(); // перечитываем session.Refresh(reqCustoms); reqCustoms.ReqCustoms_CstReqCustomsPos_List.Should().HaveCount(4); reqCustoms.ReqCustoms_CstReqCustomsPos_List.Should().ContainSingle(i => i.ReqCustomsTNVD == "2" && i.Country == country1 && i.Art == art1); reqCustoms.ReqCustoms_CstReqCustomsPos_List.Should().ContainSingle(i => i.ReqCustomsTNVD == "1" && i.Country == country2 && i.Art == art1); reqCustoms.ReqCustoms_CstReqCustomsPos_List.Should().ContainSingle(i => i.ReqCustomsTNVD == "1" && i.Country == country1 && i.Art == art2); var pos1 = reqCustoms.ReqCustoms_CstReqCustomsPos_List.Single(i => i.ReqCustomsTNVD == "1" && i.Country == country1 && i.Art == art1); pos1.ReqCustomsWeightGross.ShouldBeEquivalentTo(int.Parse(iwb1Pos1WeightCpv.CPVValue) + int.Parse(iwb2Pos1WeightCpv.CPVValue)); pos1.ReqCustomsAmount.ShouldBeEquivalentTo(iwb1Pos1.IWBPosPriceValue + iwb2Pos1.IWBPosPriceValue); pos1.ReqCustomsCount.ShouldBeEquivalentTo(iwb1Pos1.IWBPosCount + iwb2Pos1.IWBPosCount); }); }