class TrunkNotesParser:
    """
    Insert docstring here
    """

    def __init__(self):
        """
        Insert docstring here
        """
        self.headers = Headers(TitleHeader(), TimestampHeader(),
                LastAccessedHeader(), TimesAccessedHeader(), TagsHeader(),
                MetadataHeader())
        self.body = ''

    def parse_content(self, input_data):
        """
        Insert docstring here
        """
        metadata = join(input_data.splitlines()[0:6], '\n')
        self.body = join(input_data.splitlines(True)[6:], '')

        self.headers.read(metadata)

    def parse_file(self, file_path):
        """
        Insert docstring here
        """
        try:
            note_file = open(file_path)
            input_data = note_file.read()
            note_file.close()
        except IOError as errno:
            # No such directory Error
            if errno.args[0] == 2:
                # will be replace once code is ready for input checkecking
                pass
            ## is a directory ERROR
            if errno.args[0] == 21:
                # will be replace once code is ready for input checkecking
                pass
        else:
            return self.parse_content(input_data)

    def dump_note(self, note_path):
        """
        Insert docstring here
        """
        output_data = self.headers.write() + self.body

        # create the file
        with open(note_path.__str__(), 'w') as note_file:
            # write to the file
            note_file.write(output_data)
def test_headers_read():
    """
    Insert docstring here
    """
    sample_input_data = """\
Title: HelloWorld
Timestamp: 2010-11-18 18:10:33 -0500
Last Accessed: 2010-11-19 20:02:28 -0500
Times Accessed: 24
Tags:
Metadata:
"""

    # Instantiate mock objects
    title_header = Mock(['read'], name='title_header')
    timestamp_header = Mock(['read'], name='timestamp_header')
    last_accessed_header = Mock(['read'], name='last_accessed_header')
    times_accessed_header = Mock(['read'], name='times_accessed_header')
    tags_header = Mock(['read'], name='tags_header')
    metadata_header = Mock(['read'], name='metadata_header')

    # Instantiate object under tests (headers)
    headers = Headers(title_header, timestamp_header, last_accessed_header,
            times_accessed_header, tags_header, metadata_header)

    # Call method under test
    headers.read(sample_input_data)

    # Test that the headers' read was called once and
    # That the parameters they received are correct
    title_header.read.assert_called_once_with('Title: HelloWorld')
    timestamp_header.read.assert_called_once_with(
            'Timestamp: 2010-11-18 18:10:33 -0500')
    last_accessed_header.read.assert_called_once_with(
            'Last Accessed: 2010-11-19 20:02:28 -0500')
    times_accessed_header.read.assert_called_once_with('Times Accessed: 24')
    tags_header.read.assert_called_once_with('Tags:')
    metadata_header.read.assert_called_once_with('Metadata:')