コード例 #1
0
        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();
            }
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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();
        }
コード例 #4
0
        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();
        }
コード例 #5
0
        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);
        }