def test_hash_file(self):
        """
        Tests the method which let us the content of a given file.
        """

        file_instance = File(self.file)

        expected = False
        actual = file_instance.exists()

        self.assertEqual(expected, actual)

        file_instance.write("\n".join(self.data_to_write))

        expected = True
        actual = file_instance.exists()

        self.assertEqual(expected, actual)

        for algo, expected in self.expected_hashed.items():
            self.assertEqual(
                expected,
                Hash(algo=algo).file(self.file),
            )

        file_instance.delete()

        expected = False
        actual = file_instance.exists()

        self.assertEqual(expected, actual)
    def test_hash_file_not_exists(self):
        """
        Tests the method which let us the content of a given file.
        """

        file_instance = File(self.file)

        file_instance.delete()

        expected = False
        actual = file_instance.exists()

        self.assertEqual(expected, actual)

        expected = None
        for algo in self.expected_hashed:
            self.assertEqual(
                expected, Hash(algo=algo).file(self.file),
            )
class TestFile(TestCase):
    """
    Tests of PyFunceble.helpers.file.
    """
    def setUp(self):
        """
        Setups everything needed for the tests.
        """

        self.file = "this_file_is_a_ghost"

        self.file_instance = File(self.file)
        self.file_instance_2 = File(self.file + "_2")

        self.file_instance.delete()
        self.file_instance_2.delete()

    def tearDown(self):
        """
        Setups everything needed after the tests.
        """

        self.file_instance.delete()
        self.file_instance_2.delete()

    def test_exists(self):
        """
        Tests method which let us check the existance
        of a file.
        """

        expected = False
        actual = self.file_instance.exists()

        self.assertEqual(expected, actual)

        self.file_instance.write(self.file_instance.path)

        expected = True
        actual = self.file_instance.exists()

        self.assertEqual(expected, actual)

    def test_get_size(self):
        """
        Tests the method which let us get the size of a file.
        """

        self.file_instance.write("Hello, World!", overwrite=True)

        expected = 13
        actual = self.file_instance.get_size()

        self.assertEqual(expected, actual)

        self.file_instance.write(" ", overwrite=True)

        expected = 1
        actual = self.file_instance.get_size()

        self.assertEqual(expected, actual)

    def test_is_emtpy(self):
        """
        Tests the method which let us know if a file is empty.
        """

        self.file_instance.write("Hello!!", overwrite=True)

        expected = False
        actual = self.file_instance.is_empty()

        self.assertEqual(expected, actual)

        self.file_instance.write("", overwrite=True)

        expected = True
        actual = self.file_instance.is_empty()

        self.assertEqual(expected, actual)

    def test_delete_read_and_write(self):
        """
        Tests the method which let us delete and write into a file.
        """

        self.file_instance.write("Hello, World!")

        expected = "Hello, World!"
        actual = self.file_instance.read()

        self.assertEqual(expected, actual)

        self.file_instance.write("Hello, World!")

        expected += "Hello, World!"
        actual = self.file_instance.read()

        self.assertEqual(expected, actual)

        self.file_instance.write("Crap!", overwrite=True)

        expected = "Crap!"
        actual = self.file_instance.read()

        self.assertEqual(expected, actual)

    def test_copy(self):
        """
        Tests the method which let us copy a file to another location.
        """

        self.file_instance.write("Hello, World!")

        expected = "Hello, World!"
        actual = self.file_instance.read()

        self.assertEqual(expected, actual)

        self.file_instance.copy(self.file_instance_2.path)

        expected = True

        self.assertEqual(expected, self.file_instance_2.exists())
        self.assertEqual(expected, self.file_instance.exists())

        expected = "Hello, World!"
        actual = self.file_instance_2.read()

        self.assertEqual(expected, actual)

    def test_move(self):
        """
        Tests the method which let us move a file to another location.
        """

        self.file_instance.write("Hello, World!")

        expected = "Hello, World!"
        actual = self.file_instance.read()

        self.assertEqual(expected, actual)

        self.file_instance.move(self.file_instance_2.path)

        expected = True
        actual = self.file_instance_2.exists()

        self.assertEqual(expected, actual)

        expected = False
        actual = self.file_instance.exists()

        self.assertEqual(expected, actual)

        expected = "Hello, World!"
        actual = self.file_instance_2.read()

        self.assertEqual(expected, actual)