def setUp(self):
     FILEPATH_MANAGER.initialise(TEST_DIRECTORY, SCHEMA_DIR)
     self.file_manager = MockConfigurationFileManager()
     self.synoptic_manager = MagicMock()
     self.eh = SynopticFileEventHandler(SCHEMA_DIR, RLock(), self.synoptic_manager)
class TestConfigFileEventHandler(unittest.TestCase):
    def setUp(self):
        FILEPATH_MANAGER.initialise(TEST_DIRECTORY, SCHEMA_DIR)
        self.file_manager = MockConfigurationFileManager()
        self.synoptic_manager = MagicMock()
        self.eh = SynopticFileEventHandler(SCHEMA_DIR, RLock(), self.synoptic_manager)

    def tearDown(self):
        if os.path.isdir(TEST_DIRECTORY + os.sep):
            shutil.rmtree(os.path.abspath(TEST_DIRECTORY + os.sep))

    def test_when_getting_name_from_path_correct_synoptic_name_is_returned(self):
        # Arrange
        synoptic_name = 'TEST_SYNOPTIC'
        synoptic_file = synoptic_name + '.xml'
        path = os.path.join(FILEPATH_MANAGER.synoptic_dir, synoptic_file)

        # Act
        name = self.eh._get_name(path)

        # Assert
        self.assertEqual(name, synoptic_name)

    def test_when_deleted_event_then_recover_called(self):
        # Arrange
        synoptic_name = 'TEST_SYNOPTIC'
        synoptic_file = synoptic_name + '.xml'
        path = os.path.join(FILEPATH_MANAGER.synoptic_dir, synoptic_file)

        # Act
        self.eh.on_deleted(DirDeletedEvent(path))

        # Assert
        self.synoptic_manager.recover_from_version_control.assert_called()

    def test_when_reading_valid_xml_data_then_is_successfully_returned_by_check_valid(self):
        # Arrange
        synoptic_name = 'TEST_SYNOPTIC'
        synoptic_file = synoptic_name + '.xml'
        path = os.path.join(FILEPATH_MANAGER.synoptic_dir, synoptic_file)

        # Act
        self.synoptic_manager.load_synoptic.return_value = SAMPLE_SYNOPTIC
        xml_data = self.eh._check_valid(path)

        # Assert
        self.assertEqual(xml_data, SAMPLE_SYNOPTIC)

    def test_given_invalid_extension_then_raise_not_config_file_exception(self):
        # Arrange
        synoptic_name = 'TEST_SYNOPTIC'
        synoptic_file = synoptic_name + '.txt'
        path = os.path.join(FILEPATH_MANAGER.synoptic_dir, synoptic_file)

        # Act
        self.synoptic_manager.load_synoptic.return_value = SAMPLE_SYNOPTIC

        # Assert
        with self.assertRaises(NotConfigFileException):
            self.eh._check_valid(path)

    def test_when_file_modified_event_then_reload_and_update(self):
        # Arrange
        synoptic_name = 'TEST_SYNOPTIC'
        synoptic_file = synoptic_name + '.xml'
        path = os.path.join(FILEPATH_MANAGER.synoptic_dir, synoptic_file)
        e = FileModifiedEvent(path)

        self.synoptic_manager.load_synoptic.return_value = SAMPLE_SYNOPTIC

        # Act
        self.eh.on_any_event(e)

        # Assert
        self.synoptic_manager.load_synoptic.assert_called_with(path)
        self.synoptic_manager.update.assert_called_with(SAMPLE_SYNOPTIC)