class DataStoreTests(unittest.TestCase):
    def __init__(self, *args, **kwargs):
        super(DataStoreTests, self).__init__(*args, **kwargs)
        self.ds = DataStore()

    def test_read_practices_from_csv_file(self):
        # read practices test file
        self.ds.read_practices_from_csv_file("data/test_data/practices.csv")

        # extract addresses
        address1 = self.ds.df_practices.iloc[0]['address']
        address2 = self.ds.df_practices.iloc[1]['address']

        # check if they are correct
        self.assertEqual(address1,
                         'Rhaban-Fröhlich-Straße 11, 60433 Frankfurt am Main')
        self.assertEqual(address2,
                         'Kurmainzer Straße 160, 65936 Frankfurt am Main')

    def test_read_students_from_csv_file(self):
        # read students test file
        self.ds.read_students_from_csv_file("data/test_data/students.csv")

        # extract addresses
        address1 = self.ds.df_students.iloc[0]['address']
        address2 = self.ds.df_students.iloc[1]['address']

        # check if they are correct
        self.assertEqual(address1, 'Am Waldacker 21c, 60388 Frankfurt am Main')
        self.assertEqual(address2, 'Storchgasse 2, 65929 Frankfurt am Main')

    def test_extract_addresses(self):
        self.ds.read_students_from_csv_file("data/test_data/students.csv")
        self.ds.read_practices_from_csv_file("data/test_data/practices.csv")

        bike_list = self.ds.extract_addresses(self.ds.get_students(),
                                              self.ds.get_practices(),
                                              is_bike=True)
        car_list = self.ds.extract_addresses(self.ds.get_students(),
                                             self.ds.get_practices(),
                                             is_bike=False)

        # the main address of student against practice address 0
        self.assertEqual(bike_list[0], [
            'Am Waldacker 21c, 60388 Frankfurt am Main',
            'Rhaban-Fröhlich-Straße 11, 60433 Frankfurt am Main', 0
        ])

        self.assertEqual(bike_list[1], [
            'Pforzheimer Straße 15, '
            '60329 Frankfurt am Main', 'Rhaban-Fröhlich-Straße 11, '
            '60433 Frankfurt am Main', 0
        ])

        self.assertEqual(len(car_list), 0)