public IActionResult Post([FromBody] DiagramLinkModel model)
        {
            try
            {
                if (Enum.TryParse <PortSpot>(model.FromPort, true, out PortSpot portaEntradaSpot) && Enum.TryParse <PortSpot>(model.ToPort, true, out PortSpot portaSaidaSpot))
                {
                    model.Id = _correnteDrawingAppService.Register(out string code, (Int32)portaEntradaSpot, model.From,
                                                                   (Int32)portaSaidaSpot, model.To, model.DiagramId);

                    model.Code = code;
                    //model.Color = Common.ModalColor.Silver.ToString();

                    BaseViewModel <DiagramLinkModel> baseObj = new BaseViewModel <DiagramLinkModel>(model, "Corrente Saved Successfully!", "");
                    return(Ok(baseObj));
                }
                else
                {
                    BaseViewModel <DiagramLinkModel> baseObj = new BaseViewModel <DiagramLinkModel>(model, "Corrente Fail", "");
                    return(Ok(baseObj));
                }
            }
            catch (Exception ex)
            {
                BaseViewModel <string> baseObj = new BaseViewModel <string>(ex.Message);
                return(BadRequest(baseObj));
            }
        }
        public async System.Threading.Tasks.Task Save()
        {
            DiagramLinkModel correnteDrawingToBeSave = new DiagramLinkModel
            {
                From      = 33497,
                FromPort  = "right",
                To        = 33517,
                ToPort    = "left",
                Color     = "",
                DiagramId = 8095,
                Category  = "S",
                Code      = "",
                Id        = 0
            };

            HttpResponseMessage response = await _clientCall.Save(_baseController + "Save/", JsonConvert.SerializeObject(correnteDrawingToBeSave));

            Assert.IsTrue(response.IsSuccessStatusCode);
            if (response.IsSuccessStatusCode)
            {
                var retorno = await response.Content.ReadAsStringAsync();

                DiagramLinkModel correnteRetornoJson = JsonConvert.DeserializeObject <DiagramLinkModel>(JObject.Parse(retorno)["data"].ToString());


                int      tipoEntidadeId    = _unitOfw.TipoEntidadeRepository.Get(y => y.Nome == "Corrente").FirstOrDefault().Id;
                Corrente correnteAfterSave = _unitOfw.CorrenteRepository.Get(y => y.Id == correnteRetornoJson.Id).FirstOrDefault();

                //Verifica o insert na tabela Corrente
                Assert.AreEqual(correnteAfterSave.TipoEntidadeId, tipoEntidadeId);
                Assert.AreEqual(correnteAfterSave.Codigo, correnteRetornoJson.Code);
                Assert.AreEqual(correnteAfterSave.SaidaId, correnteDrawingToBeSave.To);
                Assert.AreEqual(correnteAfterSave.EntradaId, correnteDrawingToBeSave.From);


                Enum.TryParse <PortSpot>(correnteDrawingToBeSave.FromPort, true, out PortSpot portaEntradaSpot);
                Enum.TryParse <PortSpot>(correnteDrawingToBeSave.ToPort, true, out PortSpot portaSaidaSpot);

                int portaEntradaIdOut = _unitOfw.PortaDrawingRepository.Get(y => y.NoId == correnteDrawingToBeSave.From && y.FluxogramaId == correnteDrawingToBeSave.DiagramId &&
                                                                            y.Index == (Int32)portaEntradaSpot).FirstOrDefault().Id;

                int portaSaidaIdOut = _unitOfw.PortaDrawingRepository.Get(y => y.NoId == correnteDrawingToBeSave.To && y.FluxogramaId == correnteDrawingToBeSave.DiagramId &&
                                                                          y.Index == (Int32)portaSaidaSpot).FirstOrDefault().Id;


                //Verifica o Insert na tabela CorrenteDrawing
                CorrenteDrawing correnteDrawing = _unitOfw.CorrenteDrawingRepository.Get(y => y.CorrenteId == correnteRetornoJson.Id).FirstOrDefault();

                Assert.AreEqual(portaSaidaIdOut, correnteDrawing.PortaSaidaId);
                Assert.AreEqual(portaEntradaIdOut, correnteDrawing.PortaEntradaId);
                Assert.AreEqual(correnteDrawing.FluxogramaId, correnteDrawingToBeSave.DiagramId);


                //Cadastro dos produtos do No de Origem na Corrente
                List <int> noProdutoOrigemList = _unitOfw.NoProdutoRepository.Get(y => y.NoId == correnteDrawingToBeSave.From)
                                                 .Select(y => y.ProdutoId).ToList();

                foreach (var oneProdutoCorrente in noProdutoOrigemList)
                {
                    CorrenteProduto correnteProduto = _unitOfw.CorrenteProdutoRepository.Get(y => y.ProdutoId == oneProdutoCorrente &&
                                                                                             y.CorrenteId == correnteRetornoJson.Id).FirstOrDefault();

                    Assert.IsNotNull(correnteProduto);
                }


                //Produtos do No de origem devem estar cadastrados no No de destino

                //noProdutos origem
                List <int> noProdutosOrigemList = _unitOfw.NoProdutoRepository.Get(y => y.NoId == correnteDrawingToBeSave.From).Select(y => y.ProdutoId).ToList();

                //noProdudos Destino
                List <int> noProdutosDestinoList = _unitOfw.NoProdutoRepository.Get(y => y.NoId == correnteDrawingToBeSave.To).Select(y => y.ProdutoId).ToList();

                //Verifica se algum produto não existe no destino
                List <int> dups = noProdutosOrigemList.Except(noProdutosDestinoList).ToList();

                Assert.AreEqual(0, dups.Count());
            }
        }