class TransformerTest(unittest.TestCase):
    def setUp(self):
        self.transformer = DataTransformer()

    def test_periodo_segundo_semestre(self):
        fecha = '2020-12-12'
        semestre_esperado = '2020-S2'
        semestre_resultado = self.transformer.periodo_semestre(fecha)
        self.assertEqual(semestre_esperado, semestre_resultado)

    def test_periodo_primer_semestre(self):
        fecha = '2020-05-12'
        semestre_esperado = '2020-S1'
        semestre_resultado = self.transformer.periodo_semestre(fecha)
        self.assertEqual(semestre_esperado, semestre_resultado)

    def test_forma_aprobacion_encontrada(self):
        forma_aprobacion = 'P'
        esperado = 'Promocion'
        resultado = self.transformer.get_forma_aprobacion(forma_aprobacion)
        self.assertEqual(esperado, resultado)

    def test_forma_aprobacion_no_encontrada(self):
        """
            Si la forma de aprobación no existe, devuelve la pedida
        """
        forma_aprobacion = 'Pw'
        esperado = 'Pw'
        resultado = self.transformer.get_forma_aprobacion(forma_aprobacion)
        self.assertEqual(esperado, resultado)

    def test_fecha_periodo_primer_semestre(self):
        """
            Si la fecha esta comprendida entre el mes 4 y el 9, pertenece al primer semestre
            Porque las notas del segundo semestre pueden llegar a cerrarse en el mes 3.
        """
        fecha = '2020-05-12'
        semestre_esperado = '2020-06-30'
        semestre_resultado = self.transformer.fecha_periodo(fecha)
        self.assertEqual(semestre_esperado, semestre_resultado)

    def test_fecha_periodo_segundo_semestre_anio_anterior(self):
        """
            Si la fecha esta comprendida entre el mes 1 y el 3, 
            pertenece al segundo semestre del año anterior
        """
        fecha = '2020-02-12'
        semestre_esperado = '2019-12-31'
        semestre_resultado = self.transformer.fecha_periodo(fecha)
        self.assertEqual(semestre_esperado, semestre_resultado)

    def test_fecha_periodo_segundo_semestre_mismo_anio(self):
        """
            Si la fecha esta comprendida entre el mes 10 y el 12, 
            pertenece al segundo semestre de ese mismo año
        """
        fecha = '2020-11-12'
        semestre_esperado = '2020-12-31'
        semestre_resultado = self.transformer.fecha_periodo(fecha)
        self.assertEqual(semestre_esperado, semestre_resultado)

    def test_timestamp_to_semester(self):
        timestamp = '2020-07-01 12:12:12'
        esperado = '2020-S2'
        resultado = self.transformer.transform_timestamp_to_semester(timestamp)
        self.assertEqual(esperado, resultado)

    def test_timestamp_to_semester_1st(self):
        timestamp = '2020-01-01 12:12:12'
        esperado = '2020-S1'
        resultado = self.transformer.transform_timestamp_to_semester(timestamp)
        self.assertEqual(esperado, resultado)

    def test_date_to_semester(self):
        fecha = date(2020, 7, 1)
        esperado = '2020-S2'
        resultado = self.transformer.transform_date_to_semester(fecha)
        self.assertEqual(esperado, resultado)

    def test_date_to_semester_1st(self):
        fecha = date(2020, 1, 1)
        esperado = '2020-S1'
        resultado = self.transformer.transform_date_to_semester(fecha)
        self.assertEqual(esperado, resultado)

    def test_timestamp_to_datetime(self):
        timestamp = '2020-01-01 12:12:12'
        esperado = datetime(2020, 1, 1, 12, 12, 12)
        resultado = self.transformer.transform_timestamp_to_datetime(timestamp)
        self.assertEqual(esperado, resultado)

    def test_merge_materias_con_promedio(self):
        pass

    def test_merge_materias_con_plan(self):
        pass

    def test_transform_scores_unicos(self):
        pass

    def test_materiascursadas_to_dataframe(self):
        pass

    def test_transform_to_dataframe(self):
        pass
 def row_periodos(self, row):
     transformer = DataTransformer()
     row['fecha_periodo'] = transformer.fecha_periodo(row.fecha)
     row['periodo_semestre'] = transformer.periodo_semestre(
         row['fecha_periodo'])
     return row