Exemple #1
0
    def test_06_FrenchTranslationOfMessageWithContext(self,
                                                      quiet=0,
                                                      run=run_all_test):
        """
    Test French translation
    """
        self.lang = 'fr'

        message_catalog = self.portal.Localizer.erp5_ui
        message_catalog.gettext('Validated', add=1)
        message_catalog.gettext('Draft', add=1)
        message_catalog.gettext(getMessageIdWithContext(
            'Validated', 'state', 'item_workflow'),
                                add=1)
        message_catalog.message_edit('Validated', self.lang,
                                     'Validé'.decode('utf8'), '')
        message_catalog.message_edit(
            getMessageIdWithContext('Validated', 'state', 'item_workflow'),
            self.lang, "En bon usage", '')
        message_catalog.message_edit('Draft', self.lang, '', '')
        portal_type = 'Organisation'
        organisation_module = self.getPortal().getDefaultModule(portal_type)
        organisation = organisation_module.newContent(portal_type=portal_type,
                                                      title='My Organisation')
        organisation.validate()
        portal_type = 'Item'
        item_module = self.getPortal().getDefaultModule(portal_type)
        item = item_module.newContent(portal_type=portal_type, title='Lot A')

        self.tic()
        self.portal.Localizer._default_language = 'fr'

        self.assertEqual(item.getTranslatedValidationStateTitle(), 'Draft')
        item.validate()
        self.assertEqual(item.getTranslatedValidationStateTitle(),
                         "En bon usage")
        self.assertEqual(organisation.getTranslatedValidationStateTitle(),
                         'Validé')
        # Now run indexation of translations.
        self.portal.ERP5Site_updateTranslationTable()
        self.tic()
        # Ckeck queries with translated workflow state title generated with
        # getMessageIdWithContext
        self.assertEqual(
            1,
            len(
                self.portal.portal_catalog(
                    translated_validation_state_title="En bon usage")))
        self.assertEqual(
            1,
            len(
                self.portal.portal_catalog(
                    translated_validation_state_title="En bon usage",
                    portal_type='Item')))
        self.assertEqual(
            0,
            len(
                self.portal.portal_catalog(
                    translated_validation_state_title="En bon usage",
                    portal_type='Organisation')))
Exemple #2
0
  def test_07_NegatedQueryForTranslation(self, quiet=0, run=run_all_test):
    """
    Check that catalog search with a negated query parameter doesn't return
    unexpected results.
     - get a portal type ans its related workflow
     - add a new context translation for the original state
     - update the catalog tables
     - verify the catalog result
    """
    self.lang = 'en'
    # Get one portal type and its related workflow
    portal_type_id = 'Bug'
    workflow_id = 'bug_workflow'
    workflow_value = self.portal.portal_workflow._getOb(workflow_id)
    assert(workflow_value in \
            self.portal.portal_workflow.getWorkflowValueListFor(portal_type_id))
    bug = self.portal.getDefaultModule(portal_type_id).newContent(
        portal_type=portal_type_id)
    state_title = bug.getSimulationStateTitle()

    # add a new context translation for the original state
    message_catalog = self.portal.Localizer.erp5_ui
    message_catalog.gettext(state_title, add=1)
    message_catalog.gettext(getMessageIdWithContext(state_title,
                                                    'state',
                                                    workflow_id),
                            add=1)
    assert(bug.getTranslatedSimulationStateTitle() == state_title)

    try:
      message_catalog.message_edit(getMessageIdWithContext(state_title,
                                                           'state',
                                                           workflow_id),
                                   self.lang, "%s in context" % state_title, '')
      assert(bug.getTranslatedSimulationStateTitle() == \
                                    "%s in context" % state_title)

      # Update the translation table
      self.portal.ERP5Site_updateTranslationTable()
      self.tic()

      # Check the catalog result
      assert(len(self.portal.portal_catalog(portal_type=portal_type_id)) == 1)
      result = self.portal.portal_catalog(portal_type=portal_type_id,
          translated_simulation_state_title='!="%s in context"' % state_title)
      self.assertEqual(len(result), 0)
    finally:
      # Clean the new context message
      message_catalog.message_del(getMessageIdWithContext(state_title,
                                                      'state',
                                                      workflow_id))
      # Update the translation table
      self.portal.ERP5Site_updateTranslationTable()
      self.tic()
Exemple #3
0
  def test_07_NegatedQueryForTranslation(self, quiet=0, run=run_all_test):
    """
    Check that catalog search with a negated query parameter doesn't return
    unexpected results.
     - get a portal type ans its related workflow
     - add a new context translation for the original state
     - update the catalog tables
     - verify the catalog result
    """
    self.lang = 'en'
    # Get one portal type and its related workflow
    portal_type_id = 'Bug'
    workflow_id = 'bug_workflow'
    assert(workflow_id in \
            self.portal.portal_workflow.getChainFor(portal_type_id))
    bug = self.portal.getDefaultModule(portal_type_id).newContent(
        portal_type=portal_type_id)
    state_title = bug.getSimulationStateTitle()

    # add a new context translation for the original state
    message_catalog = self.portal.Localizer.erp5_ui
    message_catalog.gettext(state_title, add=1)
    message_catalog.gettext(getMessageIdWithContext(state_title,
                                                    'state',
                                                    workflow_id),
                            add=1)
    assert(bug.getTranslatedSimulationStateTitle() == state_title)

    try:
      message_catalog.message_edit(getMessageIdWithContext(state_title,
                                                           'state',
                                                           workflow_id),
                                   self.lang, "%s in context" % state_title, '')
      assert(bug.getTranslatedSimulationStateTitle() == \
                                    "%s in context" % state_title)

      # Update the translation table
      self.portal.ERP5Site_updateTranslationTable()
      self.tic()

      # Check the catalog result
      assert(len(self.portal.portal_catalog(portal_type=portal_type_id)) == 1)
      result = self.portal.portal_catalog(portal_type=portal_type_id,
          translated_simulation_state_title='!="%s in context"' % state_title)
      self.assertEqual(len(result), 0)
    finally:
      # Clean the new context message
      message_catalog.message_del(getMessageIdWithContext(state_title,
                                                      'state',
                                                      workflow_id))
      # Update the translation table
      self.portal.ERP5Site_updateTranslationTable()
      self.tic()
Exemple #4
0
  def test_06_FrenchTranslationOfMessageWithContext(self, quiet=0,
         run=run_all_test):
    """
    Test French translation
    """
    self.lang = 'fr'

    message_catalog = self.portal.Localizer.erp5_ui
    message_catalog.gettext('Validated', add=1)
    message_catalog.gettext('Draft', add=1)
    message_catalog.gettext(getMessageIdWithContext('Validated',
                                                    'state',
                                                    'item_workflow'),
                            add=1)
    message_catalog.message_edit('Validated', self.lang,
                                 'Validé'.decode('utf8'), '')
    message_catalog.message_edit(getMessageIdWithContext('Validated',
                                                         'state',
                                                         'item_workflow'),
                                 self.lang, "En bon usage", '')
    message_catalog.message_edit('Draft', self.lang, '', '')
    portal_type = 'Organisation'
    organisation_module = self.getPortal().getDefaultModule(portal_type)
    organisation = organisation_module.newContent(
                  portal_type=portal_type,
                  title='My Organisation')
    organisation.validate()
    portal_type = 'Item'
    item_module = self.getPortal().getDefaultModule(portal_type)
    item = item_module.newContent(portal_type=portal_type, title='Lot A')

    self.tic()
    self.portal.Localizer._default_language = 'fr'

    self.assertEqual(item.getTranslatedValidationStateTitle(), 'Draft')
    item.validate()
    self.assertEqual(item.getTranslatedValidationStateTitle(), "En bon usage")
    self.assertEqual(organisation.getTranslatedValidationStateTitle(),
                      'Validé')
    # Now run indexation of translations.
    self.portal.ERP5Site_updateTranslationTable()
    self.tic()
    # Ckeck queries with translated workflow state title generated with
    # getMessageIdWithContext
    self.assertEqual(1, len(self.portal.portal_catalog(
      translated_validation_state_title="En bon usage")))
    self.assertEqual(1, len(self.portal.portal_catalog(
      translated_validation_state_title="En bon usage", portal_type='Item')))
    self.assertEqual(0, len(self.portal.portal_catalog(
      translated_validation_state_title="En bon usage",
      portal_type='Organisation')))
Exemple #5
0
    def test_06_FrenchTranslationOfMessageWithContext(self, quiet=0, run=run_all_test):
        """
    Test French translation
    """
        self.lang = "fr"

        message_catalog = self.portal.Localizer.erp5_ui
        message_catalog.gettext("Validated", add=1)
        message_catalog.gettext("Draft", add=1)
        message_catalog.gettext(getMessageIdWithContext("Validated", "state", "item_workflow"), add=1)
        message_catalog.message_edit("Validated", self.lang, "Validé".decode("utf8"), "")
        message_catalog.message_edit(
            getMessageIdWithContext("Validated", "state", "item_workflow"), self.lang, "En bon usage", ""
        )
        message_catalog.message_edit("Draft", self.lang, "", "")
        portal_type = "Organisation"
        organisation_module = self.getPortal().getDefaultModule(portal_type)
        organisation = organisation_module.newContent(portal_type=portal_type, title="My Organisation")
        organisation.validate()
        portal_type = "Item"
        item_module = self.getPortal().getDefaultModule(portal_type)
        item = item_module.newContent(portal_type=portal_type, title="Lot A")

        transaction.commit()
        self.tic()
        self.portal.Localizer._default_language = "fr"

        self.assertEquals(item.getTranslatedValidationStateTitle(), "Draft")
        item.validate()
        self.assertEquals(item.getTranslatedValidationStateTitle(), "En bon usage")
        self.assertEquals(organisation.getTranslatedValidationStateTitle(), "Validé")
        # Now run indexation of translations.
        self.portal.ERP5Site_updateTranslationTable()
        transaction.commit()
        self.tic()
        # Ckeck queries with translated workflow state title generated with
        # getMessageIdWithContext
        self.assertEquals(1, len(self.portal.portal_catalog(translated_validation_state_title="En bon usage")))
        self.assertEquals(
            1, len(self.portal.portal_catalog(translated_validation_state_title="En bon usage", portal_type="Item"))
        )
        self.assertEquals(
            0,
            len(
                self.portal.portal_catalog(translated_validation_state_title="En bon usage", portal_type="Organisation")
            ),
        )
                key = (lang, portal_type.getId(), state_var, state_reference)
                if not translated_keys.has_key(key):
                    translated_message = context.Localizer.erp5_ui.gettext(
                        state_reference, lang=lang).encode('utf-8')
                    translated_keys[key] = None  # mark as translated
                    object_list.append(
                        dict(language=lang,
                             message_context=state_var,
                             portal_type=portal_type.getId(),
                             original_message=state_reference,
                             translated_message=translated_message))

                # translate state title as well
                if state.getTitle() is not None and state.getTitle() != '':
                    state_var_title = '%s_title' % state_var
                    msg_id = getMessageIdWithContext(state.getTitle(), 'state',
                                                     wf_id)
                    translated_message = context.Localizer.erp5_ui.gettext(
                        msg_id, default='', lang=lang).encode('utf-8')
                    if translated_message == '':
                        msg_id = state.getTitle()
                        translated_message = context.Localizer.erp5_ui.gettext(
                            state.getTitle().decode('utf-8'),
                            lang=lang).encode('utf-8')
                    key = (lang, portal_type.getId(), state_var_title,
                           state_reference, msg_id)
                    if not translated_keys.has_key(key):
                        translated_keys[key] = None  # mark as translated
                        object_list.append(
                            dict(language=lang,
                                 message_context=state_var_title,
                                 portal_type=portal_type.getId(),
Exemple #7
0
                    key = (lang, portal_type, state_var, state_id)
                    if not translated_keys.has_key(key):
                        translated_message = context.Localizer.erp5_ui.gettext(
                            state_id, lang=lang).encode('utf-8')
                        translated_keys[key] = None  # mark as translated
                        object_list.append(
                            dict(language=lang,
                                 message_context=state_var,
                                 portal_type=portal_type,
                                 original_message=state_id,
                                 translated_message=translated_message))

                    # translate state title as well
                    if state.title != '':
                        state_var_title = '%s_title' % state_var
                        msg_id = getMessageIdWithContext(
                            state.title, 'state', wf.id)
                        translated_message = context.Localizer.erp5_ui.gettext(
                            msg_id, default='', lang=lang).encode('utf-8')
                        if translated_message == '':
                            msg_id = state.title
                            translated_message = context.Localizer.erp5_ui.gettext(
                                state.title.decode('utf-8'),
                                lang=lang).encode('utf-8')
                        key = (lang, portal_type, state_var_title, state_id,
                               msg_id)
                        if not translated_keys.has_key(key):
                            translated_keys[key] = None  # mark as translated
                            object_list.append(
                                dict(language=lang,
                                     message_context=state_var_title,
                                     portal_type=portal_type,
    add_message(m, portal_url.getRelativeContentURL(i))

#
# Workflow
#
s_title_list = []
for i in context.portal_workflow.objectValues():
  add_message(i.title_or_id(), portal_url.getRelativeContentURL(i))
  
  if not i.states:
    continue
  for s in i.states.values():
     s_title = s.title
     if s_title:
       # adding a context in msg_id for more precise translation
       msg_id = getMessageIdWithContext(s_title,'state',i.id)      
       add_message(msg_id, portal_url.getRelativeContentURL(s))
       # also use state title as msg_id for compatibility
       add_message(s_title, portal_url.getRelativeContentURL(s))
  
  if not i.transitions:
    continue
  for t in i.transitions.values():
    if t.actbox_name:
      #adding a context in msg_id for more precise translation
      msg_id = getMessageIdWithContext(t.actbox_name,'transition',i.id)
      add_message(msg_id, portal_url.getRelativeContentURL(t))
      # also use action box name as msg_id for compatibility
      add_message(t.actbox_name, portal_url.getRelativeContentURL(t))
    if t.title:
      #adding a context in msg_id for more precise translation
Exemple #9
0
    def checkWorkflowStateTitle(self, quiet=0, run=run_all_test):
        """
    Test workflow state title translation.
    Check that using portal_catalog can not return strange results to the user.
    Each translation must be only related to one state ID.
    """
        if not run: return
        self.message = '\n'

        translation_dict = {}

        workflow_tool = self.portal.portal_workflow
        for workflow_id in workflow_tool.objectIds():
            workflow = workflow_tool._getOb(workflow_id)
            class_name = workflow.__class__.__name__
            if class_name == 'DCWorkflowDefinition':
                for state in workflow.states.items():
                    state_title = state[1].title
                    state_id = state[0]
                    msgid = getMessageIdWithContext(state_title, 'state',
                                                    workflow_id)
                    translated_state_title = self.getTranslation(msgid)

                    if translated_state_title is not None:
                        try:
                            translation_dict[translated_state_title].add(
                                state_id)
                        except KeyError:
                            translation_dict[translated_state_title] = {
                                state_id
                            }

        for key, value in translation_dict.items():
            if len(value) == 1:
                translation_dict.pop(key)

        if translation_dict != {}:
            # State ID has multiple translation associated, and it leads to
            # unexpected results for the user when using portal catalog.
            rejected_key_list = translation_dict.keys()
            result_dict = {x: [] for x in rejected_key_list}
            error_dict = {x: [] for x in rejected_key_list}
            error = 0

            # Browse all workflows to ease fixing this issue.
            for workflow in self.portal.portal_workflow.objectValues():
                if workflow.__class__.__name__ == 'DCWorkflowDefinition':
                    workflow_id = workflow.id
                    workflow_dict = {}
                    for state_id, state in workflow.states._mapping.items():
                        state_title = state.title
                        translated_state_title = \
                          self.portal.Localizer.erp5_ui.gettext(state_title, lang=self.lang)
                        if translated_state_title in rejected_key_list:
                            result_dict[translated_state_title].append(
                                (workflow_id, state_id, state_title))

            # XXX To be improved
            not_used_workflow_id_list = []
            for key, item_list in result_dict.items():
                wrong_state_id_list = [x[1] for x in item_list]
                for workflow_id, wrong_state_id, state_title in item_list:
                    if workflow_id not in not_used_workflow_id_list:
                        workflow = self.portal.portal_workflow._getOb(
                            workflow_id)
                        state_id_list = []
                        for state_id in workflow.states._mapping.keys():
                            if (state_id in wrong_state_id_list) and \
                                (state_id != wrong_state_id):
                                state_id_list.append(state_id)

                        if len(state_id_list) != 0:
                            error_dict[key].append(
                                (workflow_id, wrong_state_id, state_title,
                                 state_id_list))
                            error = 1

            if error:
                for key, item_list in error_dict.items():
                    if len(item_list) != 0:
                        self.logMessage("\n'%s'" % key.encode('utf-8'))
                        self.logMessage(
                            '\t### Conflicting workflow with common states (ie, what user can see) ###'
                        )
                        for item in item_list:
                            # XXX Improve rendering
                            self.logMessage(
                                "\t%r\t%r\t'%s'\t%r" % \
                                item)
                        self.logMessage(
                            '\n\t### All conflicting workflows (ie, problems asking to happen) ###'
                        )
                        for item in result_dict[key]:
                            # XXX Improve rendering
                            self.logMessage(
                                "\t%r\t%r\t'%s'" % \
                                item)

                self.fail(self.message)
Exemple #10
0
    def checkWorkflowStateTitle(self, quiet=0, run=run_all_test):
        """
    Test workflow state title translation.
    Check that using portal_catalog can not return strange results to the user.
    Each translation must be only related to one state ID.
    """
        if not run:
            return
        self.message = "\n"

        translation_dict = {}

        workflow_tool = self.portal.portal_workflow
        for workflow_id in workflow_tool.objectIds():
            workflow = workflow_tool._getOb(workflow_id)
            class_name = workflow.__class__.__name__
            if class_name == "DCWorkflowDefinition":
                for state in workflow.states.items():
                    state_title = state[1].title
                    state_id = state[0]
                    msgid = getMessageIdWithContext(state_title, "state", workflow_id)
                    translated_state_title = self.getTranslation(msgid)

                    if translated_state_title is not None:
                        if translation_dict.has_key(translated_state_title):
                            translation_dict[translated_state_title].add(state_id)
                        else:
                            translation_dict[translated_state_title] = set([state_id])

        for key, value in translation_dict.items():
            if len(value) == 1:
                translation_dict.pop(key)

        if translation_dict != {}:
            # State ID has multiple translation associated, and it leads to
            # unexpected results for the user when using portal catalog.
            rejected_key_list = translation_dict.keys()
            result_dict = dict([(x, []) for x in rejected_key_list])
            error_dict = dict([(x, []) for x in rejected_key_list])
            error = 0

            # Browse all workflows to ease fixing this issue.
            for workflow in self.portal.portal_workflow.objectValues():
                if workflow.__class__.__name__ == "DCWorkflowDefinition":
                    workflow_id = workflow.id
                    workflow_dict = {}
                    for state_id, state in workflow.states._mapping.items():
                        state_title = state.title
                        translated_state_title = self.portal.Localizer.erp5_ui.gettext(state_title, lang=self.lang)
                        if translated_state_title in rejected_key_list:
                            result_dict[translated_state_title].append((workflow_id, state_id, state_title))

            # XXX To be improved
            not_used_workflow_id_list = []
            for key, item_list in result_dict.items():
                wrong_state_id_list = [x[1] for x in item_list]
                for workflow_id, wrong_state_id, state_title in item_list:
                    if workflow_id not in not_used_workflow_id_list:
                        workflow = self.portal.portal_workflow._getOb(workflow_id)
                        state_id_list = []
                        for state_id in workflow.states._mapping.keys():
                            if (state_id in wrong_state_id_list) and (state_id != wrong_state_id):
                                state_id_list.append(state_id)

                        if len(state_id_list) != 0:
                            error_dict[key].append((workflow_id, wrong_state_id, state_title, state_id_list))
                            error = 1

            if error:
                for key, item_list in error_dict.items():
                    if len(item_list) != 0:
                        self.logMessage("\n'%s'" % key.encode("utf-8"))
                        self.logMessage("\t### Conflicting workflow with common states (ie, what user can see) ###")
                        for item in item_list:
                            # XXX Improve rendering
                            self.logMessage("\t%r\t%r\t'%s'\t%r" % item)
                        self.logMessage("\n\t### All conflicting workflows (ie, problems asking to happen) ###")
                        for item in result_dict[key]:
                            # XXX Improve rendering
                            self.logMessage("\t%r\t%r\t'%s'" % item)

                self.fail(self.message)
    for m in Base_findStaticTranslationText(i, FUNC_NAME_LIST):
        add_message(m, portal_url.getRelativeContentURL(i))

#
# Workflow
#
for i in context.portal_workflow.objectValues():
    add_message(i.title_or_id(), portal_url.getRelativeContentURL(i))

    state_value_list = i.getStateValueList()
    if not state_value_list:
        continue
    for s in state_value_list:
        if s.getTitle():
            # adding a context in msg_id for more precise translation
            msg_id = getMessageIdWithContext(s.getTitle(), 'state', i.getId())
            add_message(msg_id, portal_url.getRelativeContentURL(s))
            # also use state title as msg_id for compatibility
            add_message(s.getTitle(), portal_url.getRelativeContentURL(s))

    transition_value_list = i.getTransitionValueList()
    if not transition_value_list:
        continue
    for t in transition_value_list:
        if t.getActionName():
            #adding a context in msg_id for more precise translation
            msg_id = getMessageIdWithContext(t.getActionName(), 'transition',
                                             i.getId())
            add_message(msg_id, portal_url.getRelativeContentURL(t))
            # also use action box name as msg_id for compatibility
            add_message(t.getActionName(), portal_url.getRelativeContentURL(t))