예제 #1
0
 public void QuandoCadastroUmaListaDeProdutosTudoDeveEstarDentroDeUmaUnicaTransacao()
 {
     _cadastroProduto.AtualizarProdutos(_produtosPadrao);
     _unitOfWorkMock.Verify(x => x.BeginTransaction(), Times.Once());
     _unitOfWorkMock.Verify(x => x.Commit(), Times.Once());
     _unitOfWorkMock.Verify(x => x.RollBack(), Times.Never());
 }
        //para funcionar o binding de um xml para um array ou list a classe correspondente ao parâmetro
        //deve ser decorada com a propriedade "[DataContract]" e as propriedades da classe que precisam
        //ser serializadas devem ser decoradas com a propriedade "[DataMember]"
        //Se na origem da requisição o dado for um json isto não é necessário.
        //Ver explicação em: http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization
        public HttpResponseMessage PostMultiplo([FromBody] ListaProdutos produtos)
        {
            ApiResponseMessage retornoPortal;

            try
            {
                _cadastroProduto.AtualizarProdutos(produtos);
                retornoPortal = new ApiResponseMessage()
                {
                    Retorno = new Retorno()
                    {
                        Codigo = "200", Texto = produtos.Count + " produtos atualizados"
                    }
                    //retorno = new retorno() { retCodigo = "200", retTexto =    produtos.Produtos.Count + " produtos atualizados" }
                };
                return(Request.CreateResponse(HttpStatusCode.OK, retornoPortal));
            }

            catch (Exception ex)
            {
                string detalhes = "";
                if (produtos == null)
                {
                    detalhes = "A lista de produtos esta nula";
                }
                else if (produtos.Count == 0)
                {
                    detalhes = "A lista de produtos esta vazia";
                }
                else
                {
                    for (int i = 0; i < produtos.Count; i++)
                    {
                        detalhes += "Produto " + i + ": Codigo: " + (string.IsNullOrEmpty(produtos[i].Codigo)
                                                ? "nulo" : produtos[i].Codigo)
                                    + " - Tipo: " + (string.IsNullOrEmpty(produtos[i].Tipo)
                                                  ? "nulo" : produtos[i].Tipo
                                                     + " - Descricao: " + (string.IsNullOrEmpty(produtos[i].Descricao)
                                                  ? "nulo": produtos[i].Descricao));
                    }
                }

                retornoPortal = new ApiResponseMessage()
                {
                    Retorno = new Retorno()
                    {
                        Codigo = "500", Texto = "Erro interno. Mensagem: " + ex.Message
                                                + (ex.InnerException != null ? " - Excecao Interna: " + ex.InnerException.Message : "")
                                                + " - Pilha de Execucao: " + ex.StackTrace + " - Detalhes: " + detalhes
                    }
                };
                return(Request.CreateResponse(HttpStatusCode.OK, retornoPortal));
            }
        }