def test_process_string_template_func_filename1(self):
        """  """
        # Define string to auto update, subject code is optional
        auto_update_str = 'sub-<subject.code>[_ses-<session.label>]_task-{file.info.BIDS.Task}_bold{ext}'
        # initialize context object
        context = {
            'container_type': 'file',
            'parent_container_type': 'project',
            'project': {u'label': u'project123'},
            'subject': {u'code': '001'},
            'session': {u'label': u'session444'},
            'acquisition': {u'label': u'acq222'},
            'file': {'name': 'bold.nii.gz',
                'info': {'BIDS': {'Task': 'test123', 'Modality': 'bold'}}},
            'ext': '.nii.gz'
        }

        # Call function
        updated_string = utils.process_string_template(auto_update_str, context)
        # Assert string as expected
        self.assertEqual(updated_string,
                'sub-%s_ses-%s_task-%s_%s%s' % (
                    context['subject']['code'],
                    context['session']['label'],
                    context['file']['info']['BIDS']['Task'],
                    context['file']['info']['BIDS']['Modality'],
                    context['ext']
                    ))
    def test_process_string_template_full_optional(self):
        """ """
        auto_update_str = 'sub-<subject.code>[_ses-<session.label>][_acq-{file.info.BIDS.Acq}][_ce-{file.info.BIDS.Ce}][_rec-{file.info.BIDS.Rec}][_run-{file.info.BIDS.Run}][_mod-{file.info.BIDS.Mod}]'
        # initialize context object
        context = {
            'container_type': 'file',
            'parent_container_type': 'project',
            'project': {u'label': u'project123'},
            'subject': {u'code': u'123'},
            'session': {u'label': u'456'},
            'acquisition': {u'label': u'acq222'},
            'file': {u'classification': {u'Measurement': u'T1', u'Intent': u'Structural'}},
            'ext': '.nii.gz'
        }

        # Call function
        updated_string = utils.process_string_template(auto_update_str, context)
        # Assert function honors the optional labels
        self.assertEqual(updated_string,
                'sub-123_ses-456')
    def test_process_string_template_optional(self):
        """  """
        # Define string to auto update, subject code is optional
        auto_update_str = '[sub-<subject.code>]_ses-<session.label>_acq-<acquisition.label>_bold.nii.gz'
        # initialize context object
        context = {
            'container_type': 'file',
            'parent_container_type': 'project',
            'project': {u'label': u'project123'},
            'subject': {u'code': None},
            'session': {u'label': u'session444'},
            'acquisition': {u'label': u'acq222'},
            'file': None,
            'ext': None
        }

        # Call function
        updated_string = utils.process_string_template(auto_update_str, context)
        # Assert function honors the optional 'sub-<subject.code>'
        self.assertEqual(updated_string,
                '_ses-%s_acq-%s_bold.nii.gz' % (
                    context['session']['label'],
                    context['acquisition']['label']
                    ))
    def test_process_string_template_bids1(self):
        """  """
        # Get project template from the templates file
        auto_update_str = 'sub-<subject.code>_ses-<session.label>_bold.nii.gz'
        # initialize context object
        context = {
            'container_type': 'file',
            'parent_container_type': 'project',
            'project': {u'label': u'project123'},
            'subject': {u'code': u'sub-01'},
            'session': {u'label': u'ses-001'},
            'acquisition': {u'label': u'acq222'},
            'file': None,
            'ext': None
        }

        # Call function
        updated_string = utils.process_string_template(auto_update_str, context)

        self.assertEqual(updated_string,
                '%s_%s_bold.nii.gz' % (
                    context['subject']['code'],
                    context['session']['label']
                    ))
    def test_process_string_template_required_None(self):
        """ """
        # TODO: Determine the expected behavior of this...
        # Define string to auto update
        auto_update_str = 'sub-<subject.code>_ses-<session.label>'
        # initialize context object
        context = {
            'container_type': 'file',
            'parent_container_type': 'project',
            'project': {u'label': u'project123'},
            'subject': {u'code': None},
            'session': {u'label': u'session444'},
            'acquisition': {u'label': u'acq222'},
            'file': None,
            'ext': None
        }

        # Call function
        updated_string = utils.process_string_template(auto_update_str, context)
        # Assert function honors the optional 'sub-<subject.code>'
        self.assertEqual(updated_string,
                'sub-<subject.code>_ses-%s' % (
                    context['session']['label']
                    ))