def test_load_datos_iniciales_vacio(self):

        omip_data = OmipData(get_file_path("omip_data_vacio1.csv"))
        values = omip_data.get_values()
        self.assertEqual(len(values), 0)

        omip_data = OmipData(get_file_path("omip_data_vacio2.csv"))
        values = omip_data.get_values()
        self.assertEqual(len(values), 0)
    def test_raise_error_si_get_values_con_fecha_superior_a_dia_hoy(self):

        ini = dt.datetime(2017, 10, 2)  # 01/10/2017
        manana = dt.datetime.today() + dt.timedelta(days=1)
        with self.assertRaises(ValueError):
            omip_data = OmipData(get_file_path("omip_data_1.csv"))
            omip_data.get_values(ini, manana)
    def test_raise_error_si_get_values_con_fechas_fin_menor_que_fecha_ini(
            self):

        ini = dt.datetime(2017, 9, 28)  # 28/09/2017
        fin = dt.datetime(2017, 9, 1)  # 01/09/2017

        with self.assertRaises(ValueError):
            omip_data = OmipData(get_file_path("omip_data_1.csv"))
            omip_data.get_values(date_ini=ini, date_fin=fin)
    def test_save_data_to_csv(self):

        omip_data = OmipData(get_file_path("omip_data_1.csv"))

        filepath = get_file_path("omip_data_exportado_1.csv")
        remove_file(filepath)
        omip_data.save_data_to_csv(filepath=filepath)

        csv_data = get_file(filepath)
        self.assertEqual(len(csv_data.read_lines()), 15)
    def test_get_values_si_no_hay_datos(self):

        product_list = ("Q1-18", "Q2-18", "Q3-18", "Q4-18")
        ini = dt.datetime(2017, 10, 2)  # 01/10/2017
        fin = dt.datetime(2017, 10, 4)  # 03/10/2017

        omip_data = OmipData(get_file_path("omip_data_vacio1.csv"))
        values_db = omip_data.get_values(product_list, ini, fin)
        self.assertEqual(values_db.items(),
                         ())  # No hay datos para el producto solicitado
    def test_get_dates_with_data(self):

        # Initial data
        omip_data = OmipData(get_file_path("omip_data_1.csv"))

        dates_antes = omip_data.get_dates_with_data("Q2-18")
        d1 = dt.datetime(2017, 10, 1)  # 01/10/2017
        d2 = dt.datetime(2017, 10, 2)  # 02/10/2017
        self.assertEqual(dates_antes, (d1, d2))  #, d3))
        '''
    def test_get_values_si_no_hay_datos_para_productos_solicitados(self):

        product_list = ("Q4-19")
        ini = dt.datetime(2017, 10, 2)  # 01/10/2017
        fin = dt.datetime(2017, 10, 4)  # 03/10/2017

        omip_data = OmipData(get_file_path("omip_data_1_reducido.csv"))
        values = omip_data.get_values(product_list, ini, fin)
        self.assertEqual(len(values),
                         0)  # No hay datos para el producto solicitado
    def test_get_values_entre_dos_fechas(self):

        omip_data = OmipData(get_file_path("omip_data_1_reducido.csv"))

        ini = dt.datetime(2017, 10, 1)  # 01/10/2017
        fin = dt.datetime(2017, 10, 2)  # 02/10/2017
        values = omip_data.get_values(date_ini=ini, date_fin=fin)

        self.assertEqual(len(values), 4)
        self.assertEqual(values[dt.datetime(2017, 10, 1), "Q1-18"], 10.44)
        self.assertEqual(values[dt.datetime(2017, 10, 1), "Q2-18"], 20.44)
        self.assertEqual(values[dt.datetime(2017, 10, 2), "Q1-18"], 10.55)
        self.assertEqual(values[dt.datetime(2017, 10, 2), "Q2-18"], 20.55)
    def test_get_values_sin_indicar_fecha_muestra_todos_los_values(self):

        omip_data = OmipData(get_file_path("omip_data_1_reducido.csv"))

        values = omip_data.get_values()

        self.assertEqual(len(values), 5)
        #print("values: ", values)
        self.assertEqual(values[dt.datetime(2017, 10, 1), "Q1-18"], 10.44)
        self.assertEqual(values[dt.datetime(2017, 10, 1), "Q2-18"], 20.44)
        self.assertEqual(values[dt.datetime(2017, 10, 2), "Q1-18"], 10.55)
        self.assertEqual(values[dt.datetime(2017, 10, 2), "Q2-18"], 20.55)
        self.assertEqual(values[dt.datetime(2017, 10, 3), "Q1-18"], 11.43)
    def test_get_values_entre_dos_fechas_for_product_list(self):

        products = ("Q1-18", "Q2-18")
        ini = dt.datetime(2017, 10, 1)  # 01/10/2017
        fin = dt.datetime(2017, 10, 3)  # 03/10/2017

        omip_data = OmipData(get_file_path("omip_data_4_reducido.csv"))
        values = omip_data.get_values(products, ini, fin)
        self.assertEqual(len(values), 6)
        self.assertEqual(values[dt.datetime(2017, 10, 1), "Q1-18"], 10.44)
        self.assertEqual(values[dt.datetime(2017, 10, 1), "Q2-18"], 20.44)
        self.assertEqual(values[dt.datetime(2017, 10, 2), "Q1-18"], 10.55)
        self.assertEqual(values[dt.datetime(2017, 10, 2), "Q2-18"], 20.55)
        self.assertEqual(values[dt.datetime(2017, 10, 3), "Q1-18"], 53.80)
        self.assertEqual(values[dt.datetime(2017, 10, 3), "Q2-18"], 44.05)
    def test_update_data(self):

        # Initial data
        omip_data = OmipData(get_file_path("omip_data_vacio1.csv"))

        ini = dt.datetime(2017, 10, 4)  # 04/10/2017
        fin = dt.datetime.now()  # Ahora
        values_antes = omip_data.get_values(date_ini=ini, date_fin=fin)

        # Update data
        omip_data.update()  # Update todos los productos
        values_despues = omip_data.get_values(date_ini=ini, date_fin=fin)

        # Check data
        self.assertEqual(len(values_despues) > len(values_antes), True)

        # Save data updated
        filepath = get_file_path("omip_data_exportado_1.csv")
        remove_file(filepath)
        omip_data.save_data_to_csv(filepath=filepath)
    def test_using_omip_to_download_data(self):

        bd_file = "omip_data_1.csv"  # tiene datos del 01/10/2017 a 02/10/2017
        omip_data = OmipData(get_file_path(bd_file))
        print_stats("BD cargada desde archivo \"{}\"".format(bd_file),
                    omip_data)

        fecha_fin = omip_data.get_stats("fecha_fin")
        fecha_fin = fecha_fin + dt.timedelta(days=1)  # 03/10/2017
        today = dt.datetime.now()
        #omip_data.update(date_ini = fecha_fin,	date_fin = today)
        omip_data.update()  # Actualiza todos los productos

        formater_fecha = FormaterFecha(formato="aaaa-mm-dd")
        bd_file_to_save = "omip_data_" + formater_fecha.formatea(
            today) + ".csv"
        filepath = get_file_path(bd_file_to_save)
        remove_file(filepath)
        omip_data.save_data_to_csv(filepath=filepath)

        print_stats(
            "BD actualizada desde servidor y datos guardados en archivo \"{}\""
            .format(bd_file_to_save), omip_data)
    def test_using_omip_to_download_data_de_year(self):

        bd_file = "omip_data_vacio3.csv"  # archivo sin datos, sólo cabecera "fecha;producto;valor"
        omip_data = OmipData(get_file_path(bd_file))
        print_stats("BD cargada desde archivo \"{}\"".format(bd_file),
                    omip_data)

        #fecha_fin = omip_data.get_stats()["fecha_fin"]
        #fecha_fin = fecha_fin + dt.timedelta(days=0) # 02/01/2018
        today = dt.datetime.now()
        #omip_data.update(date_ini = fecha_fin,	date_fin = today)
        omip_data.update()  # Actualiza todos los productos
        #omip_data.update_multithreading() # Actualiza todos los productos

        formater_fecha = FormaterFecha(formato="aaaa-mm-dd")
        bd_file_to_save = "omip_data_" + formater_fecha.formatea(
            today) + ".csv"
        filepath = get_file_path(bd_file_to_save)
        remove_file(filepath)
        omip_data.save_data_to_csv(filepath=filepath)

        print_stats(
            "BD actualizada desde servidor y datos guardados en archivo \"{}\""
            .format(bd_file_to_save), omip_data)
    def test_si_get_stats_de_param_no_existente(self):

        bd_file = "omip_data_1.csv"  # tiene datos del 01/10/2017 a 02/10/2017
        omip_data = OmipData(get_file_path(bd_file))

        self.assertEqual("", omip_data.get_stats("parametro no existente"))
    def test_get_date_range_with_data(self):

        omip_data = OmipData(get_file_path("omip_data_1.csv"))
        fechas = omip_data.get_date_range_with_data()
        self.assertEqual(fechas,
                         (dt.datetime(2017, 10, 1), dt.datetime(2017, 10, 2)))
    def test_get_date_range_with_data_si_no_hay_datos(self):

        omip_data = OmipData(get_file_path("omip_data_vacio1.csv"))
        datos = omip_data.get_date_range_with_data()
        self.assertEqual(datos, (None, None))
    def test_raise_error_si_get_dates_with_data_para_producto_inexistente(
            self):

        with self.assertRaises(ValueError):
            omip_data = OmipData(get_file_path("omip_data_1.csv"))
            omip_data.get_dates_with_data("producto que no existe")
    def test_error_si_archivo_datos_iniciales_no_existe(self):

        with self.assertRaises(FileNotFoundError):
            OmipData("omip_data_no_existente.csv")
    def test_error_si_archivo_datos_iniciales_con_formato_erroneo(self):

        with self.assertRaises(ValueError):
            OmipData(get_file_path("omip_data_formato_erroneo.csv"))
    def test_get_dates_with_data_para_producto_sin_datos(self):

        # Initial data
        omip_data = OmipData(get_file_path("omip_data_1.csv"))
        dates_Q4 = omip_data.get_dates_with_data("Q4-19")
        self.assertEqual(dates_Q4, ())  # No hay datos
    def test_load_datos_iniciales_from_file(self):

        omip_data = OmipData(get_file_path("omip_data_1.csv"))
        values = omip_data.get_values()
        self.assertEqual(len(values), 14)