def setUp(self) -> None:
     self.tmpdir = TemporaryDirectory()
     self.cwd = os.getcwd()
     os.chdir(self.tmpdir.name)
     dirname = "fsbackendtest"
     os.mkdir(dirname)  # replace by temporary directory
     self.backend = FilesystemBackend(dirname)
     self.testdata = "dshiuasduzchjbfdnbewhsdcuzd"
     self.alternative_testdata = "8u993zhhbn\nb3tadgadg"
     self.identifier = "some name"
class FileSystemBackendTest(unittest.TestCase):
    def setUp(self) -> None:
        self.tmpdir = TemporaryDirectory()
        self.cwd = os.getcwd()
        os.chdir(self.tmpdir.name)
        dirname = "fsbackendtest"
        os.mkdir(dirname)  # replace by temporary directory
        self.backend = FilesystemBackend(dirname)
        self.testdata = "dshiuasduzchjbfdnbewhsdcuzd"
        self.alternative_testdata = "8u993zhhbn\nb3tadgadg"
        self.identifier = "some name"

    def tearDown(self) -> None:
        os.chdir(self.cwd)
        self.tmpdir.cleanup()

    def test_put_and_get_normal(self) -> None:
        # first put the data
        self.backend.put(self.identifier, self.testdata)

        # then retrieve it again
        data = self.backend.get(self.identifier)
        self.assertEqual(data, self.testdata)

    def test_put_file_exists_no_overwrite(self) -> None:
        name = "test_put_file_exists_no_overwrite"
        self.backend.put(name, self.testdata)
        with self.assertRaises(FileExistsError):
            self.backend.put(name, self.alternative_testdata)
        self.assertEqual(self.testdata, self.backend.get(name))

    def test_put_file_exists_overwrite(self) -> None:
        name = "test_put_file_exists_overwrite"
        self.backend.put(name, self.testdata)
        self.backend.put(name, self.alternative_testdata, overwrite=True)
        self.assertEqual(self.alternative_testdata, self.backend.get(name))

    def test_instantiation_fail(self) -> None:
        with self.assertRaises(NotADirectoryError):
            FilesystemBackend("C\\#~~")

    def test_exists(self) -> None:
        name = "test_exists"
        self.backend.put(name, self.testdata)
        self.assertTrue(self.backend.exists(name))
        self.assertFalse(self.backend.exists("exists_not"))

    def test_get_not_existing(self) -> None:
        name = "test_get_not_existing"
        with self.assertRaises(FileNotFoundError):
            self.backend.get(name)