class TestDataStore:

    def setup_class(self):
        print(f'setup_class: {self.__name__}')
        print('----------------------------------')
        self.store = Repository(host='localhost', port=6379)

        # self.db_filedescriptor, acrewstic.app.config['DATABASE']
        #     = tempfile.mkstemp()
        # acrewstic.app.config['TESTING'] = True
        # self.app = acrewstic.app.test_client()
        # with acrewstic.app.app_context():
        #     acrewstic.init_db()

    def teardown_class(self):
        print(f'teardown_class: {self.__name__}')
        print('----------------------------------')

        # os.close(self.db_filedescriptor)
        # os.unlink(acrewstic.app.config['DATABASE'])

    def setup_method(self):
        self.store.delete(TEST_KEY_STORE)

    def teardown_method(self):
        self.store.delete(TEST_KEY_STORE)

    def test_0_put_string(self):
        current_size = len(self.store.fetch_all(TEST_KEY_STORE))
        assert current_size == 0
        self.store.append_item(TEST_KEY_STORE, test_string)
        new_size = len(self.store.fetch_all(TEST_KEY_STORE))
        assert new_size == current_size + 1
        print("Successfully setting up string")

    def test_1_put_int(self):
        current_size = len(self.store.fetch_all(TEST_KEY_STORE))
        assert current_size == 0
        self.store.append_item(TEST_KEY_STORE, test_int)
        new_size = len(self.store.fetch_all(TEST_KEY_STORE))
        assert new_size == current_size + 1
        print("Successfully setting up int")

    def test_2_put_dict(self):
        current_size = len(self.store.fetch_all(TEST_KEY_STORE))
        assert current_size == 0
        self.store.append_item(TEST_KEY_STORE, test_dict)
        new_size = len(self.store.fetch_all(TEST_KEY_STORE))
        assert new_size == current_size + 1
        print("Successfully setting up dict")

    def test_3_append_and_get(self):
        current_size = len(self.store.fetch_all(TEST_KEY_STORE))
        assert current_size == 0
        self.store.append_item(TEST_KEY_STORE, test_string)
        self.store.append_item(TEST_KEY_STORE, test_int)
        self.store.append_item(TEST_KEY_STORE, test_dict)
        new_size = len(self.store.fetch_all(TEST_KEY_STORE))
        assert new_size == current_size + 3
        item = self.store.get_item(TEST_KEY_STORE, 0)
        assert isinstance(item, str)
        item = self.store.get_item(TEST_KEY_STORE, 1)
        assert isinstance(item, int)
        item = self.store.get_item(TEST_KEY_STORE, 2)
        assert isinstance(item, dict)
        print("Successfully appending string, int and dict in correct order")

    def test_4_set_and_get(self):
        self.store.set(TEST_KEY_STORE, test_list)
        current_size = len(self.store.fetch_all(TEST_KEY_STORE))
        assert current_size == len(test_list)
        index = 4
        item = self.store.get_item(TEST_KEY_STORE, index)
        assert isinstance(item, int)
        assert item == index + 1
        new_size = len(self.store.fetch_all(TEST_KEY_STORE))
        assert new_size == len(test_list)
        assert new_size == current_size
        item = self.store.get_item(TEST_KEY_STORE, index)
        assert item == index + 1
        print("Successfully setting up list and retrieving items")