def test_pronosticoMeteorologico_se_parsea(self): s = ("2014-09-27 11:00:0.0\n" "2014-09-27 11:59:59.0\n" "20\n" "55\n" "60\n" "1010\n" "2014-09-27 12:00:00.0\n" "2014-09-27 12:59:59.0\n" "25\n" "50\n" "65\n" "1020\n") result = ParserPronosticoMeteorologico().parse(s) prediccionesEsperadas = [ PrediccionMeteorologica( Rango(FechaYHora(date(2014, 9, 27), time(11, 0, 0)), FechaYHora(date(2014, 9, 27), time(11, 59, 59))), TemperaturaEnCelsius(20), Porcentaje(55), HumedadRelativa(Porcentaje(60)), LuzEnLux(1010)), PrediccionMeteorologica( Rango(FechaYHora(date(2014, 9, 27), time(12, 0, 0)), FechaYHora(date(2014, 9, 27), time(12, 59, 59))), TemperaturaEnCelsius(25), Porcentaje(50), HumedadRelativa(Porcentaje(65)), LuzEnLux(1020)), ] expected = PronosticoMeteorologico(prediccionesEsperadas) self.assertEqual(expected, result)
def test_planta_puede_modificarse_correctamente(self): x = EstadoDePlanta() x.temperatura(TemperaturaEnCelsius(15)) self.assertEqual(x.temperatura(), TemperaturaEnCelsius(15)) x.humedad(HumedadRelativa(Porcentaje(30))) self.assertEqual(x.humedad(), HumedadRelativa(Porcentaje(30))) x.acidez(AcidezEnPH(6.66)) self.assertEqual(x.acidez(), AcidezEnPH(6.66))
def test_prediccion_se_construye_correctamente(self): desde = FechaYHora(date(2014, 9, 20), time(10, 45, 50)) hasta = FechaYHora(date(2014, 9, 20), time(13, 45, 50)) prediccion = PrediccionMeteorologica(Rango(desde, hasta), TemperaturaEnCelsius(25), Porcentaje(40), HumedadRelativa(Porcentaje(10)), LuzEnLux(800)) self.assertEqual(Rango(desde, hasta), prediccion.lapso()) self.assertEqual(TemperaturaEnCelsius(25), prediccion.temperatura()) self.assertEqual(Porcentaje(40), prediccion.probabilidadDeLluvia()) self.assertEqual(HumedadRelativa(Porcentaje(10)), prediccion.humedad()) self.assertEqual(LuzEnLux(800), prediccion.luzAmbiente())
def setUp(self): self.desdeLapso1 = FechaYHora(date(2014, 9, 21), time(10, 45, 50)) self.hastaLapso1 = FechaYHora(date(2014, 9, 21), time(13, 45, 50)) self.desdeLapso2 = FechaYHora(date(2014, 9, 20), time(10, 45, 50)) self.hastaLapso2 = FechaYHora(date(2014, 9, 20), time(13, 45, 50)) self.prediccion1 = PrediccionMeteorologica( Rango(self.desdeLapso1, self.hastaLapso1), TemperaturaEnCelsius(20), Porcentaje(80), HumedadRelativa(Porcentaje(50)), LuzEnLux(1000)) self.prediccion2 = PrediccionMeteorologica( Rango(self.desdeLapso2, self.hastaLapso2), TemperaturaEnCelsius(25), Porcentaje(40), HumedadRelativa(Porcentaje(10)), LuzEnLux(800))
def __init__(self): super().__init__() self._estadoFenologico = EstadoFenologico() self._temperatura = TemperaturaEnCelsius(16) self._humedad = HumedadRelativa(Porcentaje(0)) self._acidez = AcidezEnPH(7) self._estadoDeSalud = EstadoDeSaludBueno
def __init__(self): """inicializa un estado fenológico a partir de valores por defecto (todos cero). """ self._cantidadBrotes = 0 self._cantidadFlores = 0 self._cantidadFrutos = 0 self._porcentajeFrutasMaduras = Porcentaje(0) self._estadioDeCultivo = EstadioGerminacion self._altura = LongitudEnCentimetros(0)
def test_estadoFenologico_se_inicializa_en_cero_y_estadio_germinacion( self): """Inicializa un estado fenológico, deberían estar todos los parámetros numéricos en cero (el porcentaje tiene valor() 0), y el estadio de cultivo debería ser el de germinación (es el primer estadio de cualquier plan maestro). """ x = EstadoFenologico() self.assertEqual(x.cantidadBrotes(), 0) self.assertEqual(x.cantidadFlores(), 0) self.assertEqual(x.cantidadFrutos(), 0) self.assertEqual(x.porcentajeFrutasMaduras(), Porcentaje(0)) self.assertEqual(x.estadioDeCultivo(), EstadioGerminacion) self.assertEqual(x.altura(), LongitudEnCentimetros(0))
def test_central_meteorologica_devuelve_pronostico(self): desde = FechaYHora(date(2014, 9, 21), time(10, 45, 50)) hasta = FechaYHora(date(2014, 9, 21), time(12, 45, 50)) predictor = PredictorMeteorologicoMock(TemperaturaEnCelsius(25), Porcentaje(40), HumedadRelativa(Porcentaje(10)), LuzEnLux(800)) central = CentralMeteorologica(predictor, None) self.assertIsNone(central.ultimoPronostico()) pronostico = central.obtenerPronostico(desdeFechaYHora=desde, cantidadDeHs=2) self.assertEqual(desde, pronostico.fechaInicio()) self.assertEqual(hasta, pronostico.fechaFin()) prediccion1 = pronostico.prediccionPara( FechaYHora(date(2014, 9, 21), time(11, 40, 50))) self.assertEqual( Rango(desde, desde.agregarDuracion(DuracionEnHoras(1))), prediccion1.lapso()) self.assertEqual(TemperaturaEnCelsius(25), prediccion1.temperatura()) self.assertEqual(Porcentaje(40), prediccion1.probabilidadDeLluvia()) self.assertEqual(HumedadRelativa(Porcentaje(10)), prediccion1.humedad()) self.assertEqual(LuzEnLux(800), prediccion1.luzAmbiente()) prediccion2 = pronostico.prediccionPara( FechaYHora(date(2014, 9, 21), time(12, 40, 50))) self.assertEqual( Rango(desde.agregarDuracion(DuracionEnHoras(1)), hasta), prediccion2.lapso()) self.assertEqual(TemperaturaEnCelsius(25), prediccion2.temperatura()) self.assertEqual(Porcentaje(40), prediccion2.probabilidadDeLluvia()) self.assertEqual(HumedadRelativa(Porcentaje(10)), prediccion2.humedad()) self.assertEqual(LuzEnLux(800), prediccion2.luzAmbiente())
def test_porcentaje_fuera_de_limite_inferior(self): Porcentaje(-1) # debe tirar excepción
def humedadRelativa(x): return HumedadRelativa(Porcentaje(x))
def parse(self, unaCadena): return Porcentaje(int(unaCadena))
def test_comparar_ph_con_porcentaje_explota(self): # debe tirar excepción LuzEnLux(5) == Porcentaje(16)
def test_comparar_humedad_con_porcentaje_explota(self): humedad(50) == Porcentaje(50) # debe tirar excepción
def humedad(numero): # dado un número entre 1 y 100, construye una humedad relativa, # para ahorrar verbosidad, nomás. return HumedadRelativa(Porcentaje(numero))
def test_porcentaje_fuera_de_limite_superior(self): Porcentaje(101) # debe tirar excepción
def test_comparadores(self): self.assertLess(Porcentaje(10), Porcentaje(11)) self.assertGreater(Porcentaje(11), Porcentaje(10)) self.assertGreaterEqual(Porcentaje(11), Porcentaje(10)) self.assertGreaterEqual(Porcentaje(11), Porcentaje(11)) self.assertLessEqual(Porcentaje(11), Porcentaje(11)) self.assertLessEqual(Porcentaje(10), Porcentaje(11)) self.assertEqual(Porcentaje(10), Porcentaje(10)) self.assertNotEqual(Porcentaje(10), Porcentaje(11))
def test_comparar_porcentaje_con_liquido_explota(self): # debe tirar excepción Porcentaje(50) == LiquidoEnLitros(100)