public void RetornarOkParaCentralAlarmePoisSuaManutencaoNaoEControladaPelasPartes()
        {
            //Arrange
            var equipamento = new ConstrutorCentralAlarme().Construir();

            //Action
            var situacaoCalculada = new CalculadoraSituacaoManutencao().Calcular(equipamento);

            //Asserts
            situacaoCalculada.Should().Be(SituacaoManutencao.Ok);
        }
 public FabricaEquipamentoDto(ConversorDeJson conversorDeJson, CalculadoraSituacaoManutencao calculadoraSituacaoManutencao, RepositorioClientes repositorioClientes)
 {
     _conversorDeJson = conversorDeJson;
     _calculadoraSituacaoManutencao = calculadoraSituacaoManutencao;
     _repositorioClientes = repositorioClientes;
 }
        public void RetornarSituacaoCorretaParaEquipamentoConformeDataDeReferencia() 
        {
            //Arrange
            var extintorParaCasosDeTeste = new ConstrutorExtintor()
                .ComManutencao(new DateTime(2015, 2, 15))
                .ComManutencao(new DateTime(2016, 2, 13))
                .Construir();

            var casosDeTestePorEquipamentoDataReferencia = new Dictionary<Tuple<Equipamento, DateTime, string>, SituacaoManutencao>
            {
                {
                    new Tuple<Equipamento, DateTime, string>(
                        new ConstrutorMangueira().Construir(), 
                        DateTime.Now,
                        "Equipamento (exceto extintor) sem nenhuma manutenção deve retornar inconclusivo"), SituacaoManutencao.Inconclusivo
                },

                {
                    new Tuple<Equipamento, DateTime, string>(
                        new ConstrutorExtintor().ComDataDeFabricacao(new DateTime(2016, 2, 13)).Construir(), 
                        new DateTime(2017,1,13),
                        "Equipamento sem nenhuma manutenção deve retornar 'estado crítico' conforme a data de fabricação"), SituacaoManutencao.EstadoCritico
                },

                {
                    new Tuple<Equipamento, DateTime, string>(
                        extintorParaCasosDeTeste, 
                        new DateTime(2017,1,13), 
                        "Equipamento mantido há 11 meses deve retornar 'estado crítico'"), SituacaoManutencao.EstadoCritico
                },

                {
                    new Tuple<Equipamento, DateTime, string>(
                        extintorParaCasosDeTeste, 
                        new DateTime(2017,2,1), 
                        "Equipamento mantido há mais de 12 meses deve retornar 'estado crítico'"), SituacaoManutencao.EstadoCritico
                },

                {
                    new Tuple<Equipamento, DateTime, string>(
                        extintorParaCasosDeTeste, 
                        new DateTime(2016,12,14), 
                        "Equipamento mantido há mais de 10 meses deve retornar 'estado de atenção'"), SituacaoManutencao.EstadoDeAtencao
                },

                {
                    new Tuple<Equipamento, DateTime, string>(
                        extintorParaCasosDeTeste, 
                        new DateTime(2016,12,31), 
                        "Equipamento mantido há mais de 11 meses deve retornar 'estado de atenção'"), SituacaoManutencao.EstadoDeAtencao
                }

            };

            foreach (var caso in casosDeTestePorEquipamentoDataReferencia)
            {
                var equipamento = caso.Key.Item1;
                var dataReferenciaParaCalculoSituacao = caso.Key.Item2;
                var descricaoCasoDeTeste = caso.Key.Item3;
                var situacaoEsperada = caso.Value;

                //Action
                var situacaoCalculada = new CalculadoraSituacaoManutencao()
                    .Calcular(equipamento, dataReferenciaParaCalculoSituacao.ParaUnixTime());

                //Asserts
                situacaoCalculada.Should().Be(situacaoEsperada, descricaoCasoDeTeste);
            }
        }