Ejemplo n.º 1
0
class Simulador:

    VARIACAO_TEMPERATURA_POR_MINUTO = 0.5
    INFO_FINAL = "Temperatura: {temperatura} | Custo: R${custo:.2f}"

    def __init__(self):
        self.condicionador = Condicionador()

    def varia_temperatura_ambiente(self, temperatura):
        return temperatura + Simulador.VARIACAO_TEMPERATURA_POR_MINUTO

    def log(self, temperatura, custo):
        logger.info(
            Simulador.INFO_FINAL.format(
                temperatura=temperatura,
                custo=custo
            )
        )

    def executar(self, minutos, temp_atual, temp_desejada):
        temperatura = temp_atual
        custo_total = 0
        for x in range(minutos):
            temperatura = self.varia_temperatura_ambiente(
                temperatura
            )
            temperatura, custo = self.condicionador.refrigera(
                temperatura,
                temp_desejada
            )

            custo_total += custo

        self.log(temperatura, custo_total)

        return (temperatura, custo_total)
class CondicionadorTestCase(unittest.TestCase):

    CUSTO_LIGAR_COMPRESSOR = 0.5
    CUSTO_REDUZIR_UM_GRAU = 0.1

    def setUp(self):
        self.condicionador = Condicionador()

    def tearDown(self):
        '''Caso fosse utilizado em produção, seria legal desligar
        o compressor depois de cada teste.
        '''
        self.condicionador.desligar_compressor()

    def test_estado_inicial_compressor_desligado(self):
        self.assertFalse(self.condicionador.compressor_ligado)

    def test_ligar_compressor(self):
        self.condicionador.ligar_compressor()
        self.assertTrue(self.condicionador.compressor_ligado)

    def test_ligar_desligar_compressor(self):
        self.condicionador.ligar_compressor()
        self.condicionador.desligar_compressor()
        self.assertFalse(self.condicionador.compressor_ligado)

    def test_reduzir_um_grau_liga_compressor(self):
        self.condicionador.reduz_um_grau(0)
        self.assertTrue(self.condicionador.compressor_ligado)

    def test_refigera_recebe_temp_atual_e_temp_desejada(self):
        try:
            self.condicionador.refrigera(temp_atual=10, temp_desejada=20)
        except TypeError as err:
            self.fail(
                "Parâmetros de entrada de " +
                "condicionador.refrigera estão errados: {error}"
                .format(error=err)
            )

    def test_reduz_um_grau_baixa_um_grau_temperatura(self):
        temp_atual = 1
        temp_esperada = 0
        temp_baixada, custo = self.condicionador.reduz_um_grau(
            temp_atual
        )
        self.assertEqual(temp_baixada, temp_esperada)

    def test_primeira_reduzida_liga_compressor(self):
        self.condicionador.reduz_um_grau(10)
        self.assertTrue(self.condicionador.compressor_ligado)

    def test_primeira_reduzida_add_custo_compressor(self):
        temp, custo = self.condicionador.reduz_um_grau(10)
        self.assertEqual(
            custo,
            CondicionadorTestCase.CUSTO_LIGAR_COMPRESSOR +
            CondicionadorTestCase.CUSTO_REDUZIR_UM_GRAU
        )

    def test_segunda_reduzida_nao_duplica_custo_compressor(self):
        self.condicionador.reduz_um_grau(10)
        temp, custo = self.condicionador.reduz_um_grau(10)
        self.assertEqual(
            custo,
            CondicionadorTestCase.CUSTO_REDUZIR_UM_GRAU
        )

    def test_refrigera_retorna_tupla_temp_final_e_custo(self):
        retorno = self.condicionador.refrigera(30, 20)
        self.assertIsInstance(retorno, tuple)
        self.assertEqual(len(retorno), 2)
 def setUp(self):
     self.condicionador = Condicionador()
Ejemplo n.º 4
0
 def __init__(self):
     self.condicionador = Condicionador()