public void GerarNotaFiscal_HavingGeneratedAValidXml_ShouldPersistNotaFiscalInDataBase() { // arrange var pedido = A.Dummy <Pedido>(); pedido.ItensDoPedido.Add(A.Dummy <PedidoItem>()); A.CallTo(() => _xmlWriter.Record(A <string> .Ignored, A <NotaFiscal> .Ignored)).Returns(true); A.CallTo(() => _notaFiscalRepository.GetNextIdNotaFiscal()).Returns(A.Dummy <int>()); A.CallTo(() => _notaFiscalRepository.GetLastIdNotaFiscalItem()).Returns(A.Dummy <int>()); A.CallTo(() => _notaFiscalRepository.InsertNotaFiscal(A <int> .Ignored, A <int> .Ignored, A <string> .Ignored, A <string> .Ignored, A <string> .Ignored)).Returns(1); A.CallTo(() => _notaFiscalRepository.InsertNotaFiscalItem(A <int> .Ignored, A <string> .Ignored, A <string> .Ignored, A <double> .Ignored, A <double> .Ignored, A <double> .Ignored, A <string> .Ignored, A <string> .Ignored, A <double> .Ignored, A <double> .Ignored, A <double> .Ignored, A <double> .Ignored)); // act var notaFiscalService = new NotaFiscalService(_xmlWriter, _notaFiscalRepository); var result = notaFiscalService.GerarNotaFiscal(pedido); // assert A.CallTo(() => _xmlWriter.Record(A <string> .Ignored, A <NotaFiscal> .Ignored)) .MustHaveHappenedOnceExactly(); A.CallTo(() => _notaFiscalRepository.GetNextIdNotaFiscal()).MustHaveHappenedOnceExactly(); A.CallTo(() => _notaFiscalRepository.GetLastIdNotaFiscalItem()).MustHaveHappenedOnceExactly(); A.CallTo(() => _notaFiscalRepository.InsertNotaFiscal(A <int> .Ignored, A <int> .Ignored, A <string> .Ignored, A <string> .Ignored, A <string> .Ignored)).MustHaveHappenedOnceExactly(); A.CallTo(() => _notaFiscalRepository.InsertNotaFiscalItem(A <int> .Ignored, A <string> .Ignored, A <string> .Ignored, A <double> .Ignored, A <double> .Ignored, A <double> .Ignored, A <string> .Ignored, A <string> .Ignored, A <double> .Ignored, A <double> .Ignored, A <double> .Ignored, A <double> .Ignored)).MustHaveHappenedOnceOrMore(); Assert.IsTrue(result.Status); }
private NotaFiscal MontarNotaFiscal(Pedido pedido) { var notaFiscal = new NotaFiscal { Id = _notaFiscalRepository.GetNextIdNotaFiscal(), NumeroNotaFiscal = _notaFiscalRepository.GetNextNumeroNotaFiscal(), Serie = new Random().Next(int.MaxValue), NomeCliente = pedido.NomeCliente, EstadoDestino = pedido.EstadoDestino, EstadoOrigem = pedido.EstadoOrigem, }; var idNotaFiscalItem = _notaFiscalRepository.GetLastIdNotaFiscalItem(); var desconto = UF.IsSudeste(notaFiscal.EstadoDestino) ? 0.10 : 0.00; var cfop = DefinirCfop(notaFiscal.EstadoOrigem, notaFiscal.EstadoDestino); foreach (var itemPedido in pedido.ItensDoPedido) { var notaFiscalItem = new NotaFiscalItem() { Id = idNotaFiscalItem++, IdNotaFiscal = notaFiscal.Id, Cfop = cfop }; if (notaFiscal.EstadoDestino == notaFiscal.EstadoOrigem) { notaFiscalItem.TipoIcms = "60"; notaFiscalItem.AliquotaIcms = 0.18; } else { notaFiscalItem.TipoIcms = "10"; notaFiscalItem.AliquotaIcms = 0.17; } if (notaFiscalItem.Cfop == "6.009") { notaFiscalItem.BaseIcms = itemPedido.ValorItemPedido * 0.90; } else { notaFiscalItem.BaseIcms = itemPedido.ValorItemPedido; } notaFiscalItem.ValorIcms = notaFiscalItem.BaseIcms * notaFiscalItem.AliquotaIcms; notaFiscalItem.AliquotaIpi = 0.10; if (itemPedido.Brinde) { notaFiscalItem.TipoIcms = "60"; notaFiscalItem.AliquotaIcms = 0.18; notaFiscalItem.ValorIcms = notaFiscalItem.BaseIcms * notaFiscalItem.AliquotaIcms; notaFiscalItem.AliquotaIpi = 0.00; } notaFiscalItem.BaseIpi = itemPedido.ValorItemPedido; notaFiscalItem.ValorIpi = notaFiscalItem.BaseIpi * notaFiscalItem.AliquotaIpi; notaFiscalItem.NomeProduto = itemPedido.NomeProduto; notaFiscalItem.CodigoProduto = itemPedido.CodigoProduto; notaFiscalItem.Desconto = desconto; notaFiscal.ItensDaNotaFiscal.Add(notaFiscalItem); } return(notaFiscal); }