public void EntrarNaEstacao(CartaoViagem cartaoViagem, DateTime data, Zona zona) { if (cartaoViagem.Tarifa.Zona == Zona.A && zona == Zona.B) { throw new Exception("zona_cartao_invalida"); } else if (cartaoViagem.Status == StatusCartaoViagem.Consumido) { throw new Exception("cartao_invalido"); } else { cartaoViagem.DataVigente = (cartaoViagem.Status == StatusCartaoViagem.Pendente) ? data : cartaoViagem.DataVigente; var viagem = new Viagem() { DataEntrada = data, Zona = zona }; _viagemRepository.Create(viagem); _viagemRepository.Commit(); cartaoViagem.Viagens.Add(viagem); if (cartaoViagem.Status == StatusCartaoViagem.Pendente) { var contaBancaria = _contaBancariaRepository.Read().Where(c => c.Proprietario == cartaoViagem.Proprietario).FirstOrDefault(); CobrarDaContaBancaria(contaBancaria, cartaoViagem.Tarifa.Valor); cartaoViagem.Status = StatusCartaoViagem.Pago; } _cartaoViagemRepository.Update(cartaoViagem); _cartaoViagemRepository.Commit(); } }
public void SairDaEstacao(CartaoViagem cartaoViagem, DateTime dataSaida) { var dataVigente = cartaoViagem.DataVigente; var viagem = cartaoViagem.Viagens.Where(v => v.DataEntrada >= dataVigente && !v.DataSaida.HasValue).FirstOrDefault(); viagem.DataSaida = dataSaida; _viagemRepository.Update(viagem); _viagemRepository.Commit(); cartaoViagem.AtualizarStatus(); _cartaoViagemRepository.Update(cartaoViagem); _cartaoViagemRepository.Commit(); }
private void CriarUsuario(Tarifa tarifa, out ContaBancaria contaBancaria, out CartaoViagem cartaoViagem) { var proprietario = new Proprietario("Franscisco"); _proprietarioRepository.Create(proprietario); _proprietarioRepository.Commit(); contaBancaria = new ContaBancaria("333333333333333", proprietario); _contaBancariaRepository.Create(contaBancaria); _contaBancariaRepository.Commit(); cartaoViagem = new CartaoViagem(proprietario, tarifa); _cartaoViagemRepository.Create(cartaoViagem); _cartaoViagemRepository.Commit(); }
private void AdcionarProprietarioComUmCartaoTaxaDiaZonaB(out CartaoViagem cartaoViagem, out ContaBancaria contaBancaria) { var proprietario = new Proprietario("Igor Silva"); _proprietarioRepository.Create(proprietario); _proprietarioRepository.Commit(); var tarifa = _tarifaRepository.Read().Where(t => t.Jornada == Jornada.Dia && t.Zona == Zona.B).First(); cartaoViagem = new CartaoViagem(proprietario, tarifa); _cartaoViagemRepository.Create(cartaoViagem); _cartaoViagemRepository.Commit(); contaBancaria = new ContaBancaria("111111111111111", proprietario); _contaBancariaRepository.Create(contaBancaria); _contaBancariaRepository.Commit(); }
public void DeveCobrarDiretamenteDaContaBancariaQuandoUsarOCartao() { CartaoViagem cartaoViagem = _cartaoViagemRepository.Read().Where(c => c.Tarifa != null && c.Tarifa.Jornada == Jornada.Unica && c.Tarifa.Zona == Zona.A).FirstOrDefault(); ContaBancaria contaBancaria; if (cartaoViagem != null) { contaBancaria = _contaBancariaRepository.Read().Where(c => c.Proprietario == cartaoViagem.Proprietario).FirstOrDefault(); } else { AdcionarProprietarioComUmCartaoTaxaUnicaZonaA(out cartaoViagem, out contaBancaria); } _metroCardService.EntrarNaEstacao(cartaoViagem, DateTime.Now, Zona.A); var resultado = cartaoViagem.Status == StatusCartaoViagem.Pago && contaBancaria.SaldoDevedor == cartaoViagem.Tarifa.Valor; Assert.True(resultado); }