public string buscarItem(string dtoChave, string dtoProduto, string dtoEstabelecimento)
        {
            JavaScriptSerializer js = new JavaScriptSerializer();
            DtoRetorno retorno = new DtoRetorno("ACK");
            DtoChave chave = js.Deserialize<DtoChave>(dtoChave);
            DtoProduto produto = js.Deserialize<DtoProduto>(dtoProduto);
            DtoEnderecoEstabelecimento enderecoEstabelecimento = js.Deserialize<DtoEnderecoEstabelecimento>(dtoEstabelecimento);

            Chave mChave = new Chave();

            try
            {
                mChave.validarChave(chave);
                Item mItem = new Item();
                DtoItem item = mItem.abrirItem(produto.id, enderecoEstabelecimento.id);
                chave = mChave.atualizarChave(chave);
                retorno = new DtoRetornoObjeto(chave, item);
            }
            catch (DtoExcecao ex)
            {
                retorno = ex.ToDto();
            }
            catch (Exception ex)
            {
                retorno = new DtoRetornoErro(ex.Message);
            }

            /*Objeto: DtoItem com DtoProduto com DtoTipoProduto e DtoFabricante*/
            return js.Serialize(retorno);
        }
        public string abrirProduto(string dtoChave, string dtoProduto)
        {
            JavaScriptSerializer js = new JavaScriptSerializer();
            DtoRetorno retorno = new DtoRetorno("ACK");
            DtoChave chave = js.Deserialize<DtoChave>(dtoChave);
            Chave mChave = new Chave();

            try
            {
                mChave.validarChave(chave);
                DtoProduto produto = js.Deserialize<DtoProduto>(dtoProduto);
                Produto mProduto = new Produto();
                produto = mProduto.abrirProduto(produto.id);
                chave = mChave.atualizarChave(chave);
                retorno = new DtoRetornoObjeto(chave, produto);
            }
            catch (DtoExcecao ex)
            {
                retorno = ex.ToDto();
            }
            catch (Exception ex)
            {
                retorno = new DtoRetornoErro(ex.Message);
            }

            /*Objeto: DtoProduto com DtoTipoProduto e DtoFabricante*/
            return js.Serialize(retorno);
        }
        public void CadastrarProdutoRepetido()
        {
            produto.id = 4;
            produto.nome = "zerr";
            produto.idTipo = 1;
            produto.codigoDeBarras = "01234567890123456789012345678901234567890123456789";
            produto.idFabricante = 3;
            produto.fabricante = new DtoFabricante();
            produto.fabricante.id = 3;
            produto.fabricante.fabricante = "zas zas123zas zas123zas zas123zas zas123zas zas123";

            string retornoJson = cProduto.criarProduto(js.Serialize(chave), js.Serialize(produto));
            DtoRetorno retorno = new DtoRetorno("");
            try
            {
                retorno = js.Deserialize<DtoRetornoObjeto>(retornoJson);
            }
            catch
            {
                Assert.Fail();
            }

            //Retorno sucesso
            Assert.Equals(retorno.tipoRetorno, "ACK");

            //Chave atualizada
            Assert.IsNotNull(((DtoRetornoObjeto)retorno).chave);
            DtoChave chaveAtualizada = (DtoChave)((DtoRetornoObjeto)retorno).chave;
            Assert.Equals(chaveAtualizada.idUsuario, chave.idUsuario);
            Assert.AreNotEqual(chaveAtualizada.token, chave.token);
            Assert.AreNotEqual(chaveAtualizada.ultimoAcesso, chave.ultimoAcesso);

            //Produto criado
            Assert.IsNotNull(((DtoRetornoObjeto)retorno).objeto);
            DtoProduto produtoCadastrado = (DtoProduto)((DtoRetornoObjeto)retorno).objeto;
            Assert.AreNotEqual(produtoCadastrado.id, produto.id);
            Assert.AreEqual(produtoCadastrado.nome, produto.nome);
            Assert.AreEqual(produtoCadastrado.idTipo, produto.idTipo);
            Assert.AreEqual(produtoCadastrado.codigoDeBarras, "01234567890123456789012345678901234567890123456789");

            //Fabricante
            Assert.AreEqual(produtoCadastrado.idFabricante, produto.fabricante.id);
            Assert.AreEqual(produtoCadastrado.fabricante.id, produto.fabricante.id);
            Assert.AreEqual(produtoCadastrado.fabricante.fabricante, "zas zas123zas zas123zas zas123zas zas123zas zas123");

            chave = ((DtoRetornoObjeto)retorno).chave;
        }
        public void ProdutoSemFabricante()
        {
            produto.id = 5;
            produto.nome = "qwe";
            produto.idTipo = 1;
            produto.codigoDeBarras = "";
            produto.idFabricante = 1;

            string retornoJson = cProduto.criarProduto(js.Serialize(chave), js.Serialize(produto));
            DtoRetorno retorno = new DtoRetorno("");
            try
            {
                retorno = js.Deserialize<DtoRetornoObjeto>(retornoJson);
            }
            catch
            {
                Assert.Fail();
            }

            //Retorno falha
            Assert.Equals(retorno.tipoRetorno, "NAK");

            //Dados do Erro
            Assert.Equals(((DtoRetornoErro)retorno).codigoErro, "101");
            Assert.Equals(((DtoRetornoErro)retorno).mensagem, "Dados foram perdidos durante o processo!");

            DtoProduto[] produtosCadastrados = mProduto.pesquisarProduto(produto);
            if (produtosCadastrados != null && produtosCadastrados.Length > 1)
                Assert.Fail();
        }
        public void ProdutoComNomeDeTamanhoMaiorDoQueOPermitido()
        {
            produto.id = 5;
            produto.nome = "a0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
            produto.idTipo = 1;
            produto.codigoDeBarras = "";
            produto.idFabricante = 1;
            produto.fabricante = new DtoFabricante();
            produto.fabricante.id = 1;
            produto.fabricante.fabricante = "";

            string retornoJson = cProduto.criarProduto(js.Serialize(chave), js.Serialize(produto));
            DtoRetorno retorno = new DtoRetorno("");
            try
            {
                retorno = js.Deserialize<DtoRetornoObjeto>(retornoJson);
            }
            catch
            {
                Assert.Fail();
            }

            //Retorno falha
            Assert.Equals(retorno.tipoRetorno, "NAK");

            //Dados do Erro
            Assert.Equals(((DtoRetornoErro)retorno).codigoErro, "104");
            Assert.Equals(((DtoRetornoErro)retorno).mensagem, "Existem campos com valores inválidos:\nNome do Produto");

            DtoProduto[] produtosCadastrados = mProduto.pesquisarProduto(produto);
            if (produtosCadastrados != null && produtosCadastrados.Length > 1)
                Assert.Fail();
        }
        public void DtoChaveNulo()
        {
            produto.id = 5;
            produto.nome = "qwe";
            produto.idTipo = 1;
            produto.codigoDeBarras = "";
            produto.idFabricante = 1;
            produto.fabricante = new DtoFabricante();
            produto.fabricante.id = 1;
            produto.fabricante.fabricante = "";

            string retornoJson = cProduto.criarProduto(js.Serialize(null), js.Serialize(produto));
            DtoRetorno retorno = new DtoRetorno("");
            try
            {
                retorno = js.Deserialize<DtoRetornoObjeto>(retornoJson);
            }
            catch
            {
                Assert.Fail();
            }

            //Retorno falha
            Assert.Equals(retorno.tipoRetorno, "NAK");

            //Dados do Erro
            Assert.Equals(((DtoRetornoErro)retorno).codigoErro, "100");
            Assert.Equals(((DtoRetornoErro)retorno).mensagem, "É nescessário realizar login para utilizar o aplicativo!");

            DtoProduto[] produtosCadastrados = mProduto.pesquisarProduto(produto);
            if (produtosCadastrados != null && produtosCadastrados.Length > 1)
                Assert.Fail();
        }
        public void CriarUmProdutoComValoresMinimos()
        {
            produto.id = 1;
            produto.nome = "aaa";
            produto.idTipo = 1;
            produto.idFabricante = 1;
            produto.fabricante = new DtoFabricante();
            produto.fabricante.id = 1;

            string retornoJson = cProduto.criarProduto(js.Serialize(chave), js.Serialize(produto));
            DtoRetorno retorno = new DtoRetorno("");
            try
            {
                retorno = js.Deserialize<DtoRetornoObjeto>(retornoJson);
            }
            catch
            {
                Assert.Fail();
            }

            //Retorno sucesso
            Assert.Equals(retorno.tipoRetorno, "ACK");

            //Chave atualizada
            Assert.IsNotNull(((DtoRetornoObjeto)retorno).chave);
            DtoChave chaveAtualizada = (DtoChave)((DtoRetornoObjeto)retorno).chave;
            Assert.Equals(chaveAtualizada.idUsuario, chave.idUsuario);
            Assert.AreNotEqual(chaveAtualizada.token, chave.token);
            Assert.AreNotEqual(chaveAtualizada.ultimoAcesso, chave.ultimoAcesso);

            //Produto criado
            Assert.IsNotNull(((DtoRetornoObjeto)retorno).objeto);
            DtoProduto produtoCadastrado = (DtoProduto)((DtoRetornoObjeto)retorno).objeto;
            Assert.AreNotEqual(produtoCadastrado.id, produto.id);
            Assert.AreEqual(produtoCadastrado.nome, produto.nome);
            Assert.AreEqual(produtoCadastrado.idTipo, produto.idTipo);

            //Fabricante
            Assert.AreEqual(produtoCadastrado.idFabricante, produto.fabricante.id);
            Assert.AreEqual(produtoCadastrado.fabricante.id, 1);
            Assert.AreEqual(produtoCadastrado.fabricante.fabricante, "");

            chave = ((DtoRetornoObjeto)retorno).chave;
        }
        public void ChaveDeAcessoComStringDeUltimoAcessoNaoConvertivelParaDateTime()
        {
            produto.id = 5;
            produto.nome = "qwe";
            produto.idTipo = 1;
            produto.codigoDeBarras = "";
            produto.idFabricante = 1;
            produto.fabricante = new DtoFabricante();
            produto.fabricante.id = 1;
            produto.fabricante.fabricante = "";

            DtoChave chaveInvalida = new DtoChave();
            chaveInvalida.idUsuario = chave.idUsuario;
            chaveInvalida.token = chave.token;
            chaveInvalida.ultimoAcesso = "dataInvalida";

            string retornoJson = cProduto.criarProduto(js.Serialize(chaveInvalida), js.Serialize(produto));
            DtoRetorno retorno = new DtoRetorno("");
            try
            {
                retorno = js.Deserialize<DtoRetornoObjeto>(retornoJson);
            }
            catch
            {
                Assert.Fail();
            }

            //Retorno falha
            Assert.Equals(retorno.tipoRetorno, "NAK");

            //Dados do Erro
            Assert.Equals(((DtoRetornoErro)retorno).codigoErro, "100");
            Assert.Equals(((DtoRetornoErro)retorno).mensagem, "É nescessário realizar login para utilizar o aplicativo!");

            DtoProduto[] produtosCadastrados = mProduto.pesquisarProduto(produto);
            if (produtosCadastrados != null && produtosCadastrados.Length > 1)
                Assert.Fail();
        }
        public string listarEstabelecimentosProssuidores(string dtoChave, string dtoProduto)
        {
            JavaScriptSerializer js = new JavaScriptSerializer();
            DtoRetorno retorno = new DtoRetorno("ACK");
            DtoChave chave = js.Deserialize<DtoChave>(dtoChave);
            DtoProduto produto = js.Deserialize<DtoProduto>(dtoProduto);

            Chave mChave = new Chave();

            try
            {
                mChave.validarChave(chave);
                Produto mProduto = new Produto();
                DtoItem[] itens = mProduto.estabelecimentosPossuidores(produto.id);
                chave = mChave.atualizarChave(chave);
                retorno = new DtoRetornoObjeto(chave, itens);
            }
            catch (DtoExcecao ex)
            {
                retorno = ex.ToDto();
            }
            catch (Exception ex)
            {
                retorno = new DtoRetornoErro(ex.Message);
            }

            /*Objeto: DtoItem com DtoProduto com DtoTipoProduto e DtoFabricante*/
            return js.Serialize(retorno);
        }
        //______________ RECUPERAR SENHA ________________//
        public string recuperarSenha(string dtoUsuario)
        {
            JavaScriptSerializer js = new JavaScriptSerializer();
            DtoUsuario usuario = js.Deserialize<DtoUsuario>(dtoUsuario);
            DtoRetorno retorno;

            try
            {
                Usuario mUsuario = new Usuario();
                mUsuario.recuperarSenha(usuario.email);
                retorno = new DtoRetorno("ACK","");
            }
            catch (DtoExcecao ex)
            {
                retorno = ex.ToDto();
            }
            catch (Exception ex)
            {
                retorno = new DtoRetornoErro(ex.Message);
            }

            return js.Serialize(retorno);
        }