def _execute(self, action): tokens = action.split(_(' in ')) if find_model_by_add_label(tokens[0].strip()): if len(tokens) == 1: self._register(action) else: self._add(action) else: if len(tokens) == 1: self._execute_view(action) else: self._execute_action(action)
def _add(self, action): model = None if action.startswith(_('Add ')): # not add_label was defined for the related model tokens = action.replace(_('Add '), '').split(_(' in ')) verbose_name = tokens[0].strip() if len(tokens) > 1: relation_verbose_name = tokens[1].strip() model = find_model_by_verbose_name(relation_verbose_name) related_model = find_model_by_verbose_name(verbose_name) else: # an add_label was defined for the related model tokens = action.split(_(' in ')) add_label = tokens[0].strip() if len(tokens) > 1: verbose_name = tokens[1].strip() model = find_model_by_verbose_name(verbose_name) related_model = find_model_by_add_label(add_label) # check if there is a fieldset was defined with the relation fieldsets = hasattr( model, 'fieldsets') and model.fieldsets or get_fieldsets(model) relation_name = None inlines = [] if hasattr(model, 'fieldsets'): for fieldset in fieldsets: if 'relations' in fieldset[1]: for item in fieldset[1]['relations']: tmp = getattr(model, item.split(':')[0].split('__')[0]) if hasattr(tmp, 'field' ) and tmp.field.remote_field.model == model: relation_name = item if 'inlines' in fieldset[1]: for item in fieldset[1]['inlines']: inlines.append(item) tmp = getattr(model, item) if hasattr(tmp, 'field' ) and tmp.field.remote_field.model == model: relation_name = item # if the relation was defined in a fieldset if relation_name: add_inline = relation_name in inlines add_label = get_metadata(related_model, 'add_label') button_label = add_label or 'Adicionar' button_label = get_metadata(related_model, 'add_label', button_label) username_attr = '' if CACHE['LAST_AUTHENTICATED_USERNAME']: username_attr = ", '{}'".format( CACHE['LAST_AUTHENTICATED_USERNAME']) func_decorator = '@testcase(\'{}\'{})'.format( self.name, username_attr) self._func_signature = '{}_{}_{}_{}'.format( _('add'), related_model.__name__.lower(), _('in'), model.__name__.lower()) self._test_function_code.append(' {}'.format(func_decorator)) self._test_function_code.append(' def {}(self):'.format( self._func_signature)) self._view(related_model) # the form is not in the visualization page and it must be opened if not add_inline: add_button_label = 'Adicionar {}'.format( get_metadata(related_model, 'verbose_name')) add_button_label = get_metadata(related_model, 'add_label', add_button_label) interaction = _('The user clicks the button') self._interactions.append('{} "{}"'.format( interaction, add_button_label)) self._interactions.append( _('The system displays a popup window')) self._test_function_code.append( " self.click_button('{}')".format(add_button_label)) self._test_function_code.append( " self.look_at_popup_window()") form = factory.get_many_to_one_form(self._mocked_request(), model(), relation_name, related_model()) self._fill_out(form) save_button_label = get_metadata(related_model, 'add_label', _('Save')) interaction = _('The user clicks the button') self._interactions.append('{} "{}"'.format(interaction, save_button_label)) self._test_function_code.append( " self.click_button('{}')".format(save_button_label)) self._test_function_code.append( " self.click_icon('{}')".format('Principal')) else: raise ValueError( 'Please add the {}\'s relation in the fieldsets of model {}'. format(related_model.__name__, model.__name__))
def _add(self, action): model = None if action.startswith(_(u'Add')): # not add_label was defined for the related model tokens = action.replace(_(u'Add'), '').split(_(u' in ')) verbose_name = tokens[0].strip() if len(tokens) > 1: relation_verbose_name = tokens[1].strip() model = find_model_by_verbose_name(relation_verbose_name) related_model = find_model_by_verbose_name(verbose_name) else: # an add_label was defined for the related model tokens = action.split(_(u' in ')) add_label = tokens[0].strip() if len(tokens) > 1: verbose_name = tokens[1].strip() model = find_model_by_verbose_name(verbose_name) related_model = find_model_by_add_label(add_label) # check if there is a fieldset was defined with the relation relation_name = None if hasattr(model, 'fieldsets'): for fieldset in model.fieldsets: if 'relations' in fieldset[1]: for item in fieldset[1]['relations']: tmp = getattr(model, item) if tmp.rel.related_model == related_model: relation_name = item # if the relation was defined in a fieldset if relation_name: add_inline = get_metadata(related_model, 'add_inline') add_label = get_metadata(related_model, 'add_label') button_label = add_label or u'Adicionar' button_label = get_metadata(related_model, 'add_label', button_label) function_signature = u'%s_%s_%s_%s' % \ (_(u'add'), related_model.__name__.lower(), _(u'in'), model.__name__.lower()) self._test_flow_code.append(u'\t\t\t# %s' % action) self._test_flow_code.append(u'\t\t\tself.%s()' % function_signature) self._test_function_code.append(u'\tdef %s(self):' % function_signature) self._view(related_model) # the form is not in the visualization page and it must be opened if not add_inline: add_button_label = u'Adicionar %s' % get_metadata( related_model, 'verbose_name') add_button_label = get_metadata(related_model, 'add_label', add_button_label) interaction = _(u'The user clicks the button') self._interactions.append(u'%s "%s"' % (interaction, add_button_label)) self._interactions.append( _(u'The system displays a popup window')) self._test_function_code.append( u"\t\tself.click_button(u'%s')" % add_button_label) self._test_function_code.append( u"\t\tself.look_at_popup_window()") form = factory.get_many_to_one_form(self._mocked_request(), model(), relation_name, related_model()) self._fill_out(form) interaction = _(u'The user clicks the button') self._interactions.append(u'%s "%s"' % (interaction, button_label)) self._test_function_code.append(u"\t\tself.click_button(u'%s')" % button_label) self._test_function_code.append(u"\t\tself.click_icon(u'%s')" % u'Principal') else: raise ValueError( u'Please add the %s\'s relation in the fieldsets of model %s' % (related_model.__name__, model.__name__))
def _register(self, action): model = find_model_by_add_label(action) if model: verbose_name = get_metadata(model, 'verbose_name') button_label = get_metadata(model, 'add_label') save_button_label = get_metadata(model, 'add_label', _('Save')) func_name = slugify(button_label).replace('-', '_') else: verbose_name = action.replace(_('Register'), '').strip() model = find_model_by_verbose_name(verbose_name) button_label = _('Register') save_button_label = _('Save') func_name = 'cadastrar_{}'.format(model.__name__.lower()) # set the attributes of the usecase self.name = action self.description = '{} {} {}'.format(_('Add new records of'), verbose_name.lower(), _('in the system')) self.business_rules = utils.extract_exception_messages(model.save) self.post_condition = _( 'The record will be successfully registered in the system') required_data = [] for field in get_metadata(model, 'get_fields'): if isinstance(field, model_fields.ForeignKey): if not isinstance(field, model_fields.OneToOneField): if not isinstance(field, model_fields.OneToManyField): required_data.append(field.verbose_name.lower()) if required_data: pre_condition = _( 'The following information must have been previouly registered in the system: ' ) self.pre_conditions.append('{} {}'.format( pre_condition, ', '.join(required_data))) for meta_data in ('can_admin', 'can_admin_by_role', 'can_admin_by_unit', 'can_admin_by_organization', 'can_add', 'can_add_by_role', 'can_add_by_unit', 'can_add_by_organization'): for actor in get_metadata(model, meta_data, iterable=True): if actor: self.actors.append(actor) if not self.actors: self.actors.append(_('Superuser')) # register the interactions and testing code' username_attr = '' if CACHE['LAST_AUTHENTICATED_USERNAME']: username_attr = ", '{}'".format( CACHE['LAST_AUTHENTICATED_USERNAME']) func_decorator = '@testcase(\'{}\'{})'.format(self.name, username_attr) self._func_signature = '{}(self)'.format(func_name) self._test_function_code.append(' {}'.format(func_decorator)) self._test_function_code.append(' def {}:'.format( self._func_signature)) self._find(model, registering=True) self._test_function_code.append( " self.click_button('{}')".format(button_label)) a = _('The user clicks the button') b = _('on the right-side of the action bar') self._interactions.append('{} "{}" {}'.format(a, button_label, b)) form = factory.get_register_form(self._mocked_request(), model()) self._fill_out(form) interaction = _('The user clicks the button') self._interactions.append('{} "{}"'.format(interaction, save_button_label)) self._test_function_code.append( " self.click_button('{}')".format(save_button_label)) self._test_function_code.append( " self.click_icon('{}')".format('Principal'))
def _register(self, action): model = find_model_by_add_label(action) if model: verbose_name = get_metadata(model, 'verbose_name') button_label = get_metadata(model, 'add_label') func_name = slugify(button_label).replace('-', '_') else: verbose_name = action.replace(_(u'Register'), u'').strip() model = find_model_by_verbose_name(verbose_name) button_label = _(u'Register') func_name = u'cadastrar_%s' % model.__name__.lower() # set the attributes of the usecase self.name = action self.description = '%s %s %s' % (_(u'Add new records of'), verbose_name.lower(), _(u'in the system')) self.business_rules = utils.extract_exception_messages(model.save) self.post_condition = _( u'The record will be successfully registered in the system') required_data = [] for field in get_metadata(model, 'get_fields'): if isinstance(field, model_fields.ForeignKey): if not isinstance(field, model_fields.OneToOneField): if not isinstance(field, model_fields.OneToManyField): required_data.append(field.verbose_name.lower()) if required_data: pre_condition = _( u'The following information must have been previouly registered in the system: ' ) self.pre_conditions.append( '%s %s' % (pre_condition, u', '.join(required_data))) for meta_data in ('can_admin', 'can_admin_by_role', 'can_admin_by_unit', 'can_admin_by_organization', 'can_add', 'can_add_by_role', 'can_add_by_unit', 'can_add_by_organization'): for actor in get_metadata(model, meta_data, iterable=True): if actor: self.actors.append(actor) if not self.actors: self.actors.append(_(u'Superuser')) # register the interactions and testing code func_signature = u'%s(self)' % func_name self._test_flow_code.append(u'\t\t\t# %s' % action) self._test_flow_code.append(u'\t\t\tself.%s()' % func_name) self._test_function_code.append('\tdef %s:' % func_signature) self._find(model) self._test_function_code.append(u"\t\tself.click_button(u'%s')" % button_label) a = _(u'The user clicks the button') b = _(u'on the right-side of the action bar') self._interactions.append(u'%s "%s" %s' % (a, button_label, b)) form = factory.get_register_form(self._mocked_request(), model()) self._fill_out(form) interaction = _(u'The user clicks the button') self._interactions.append(u'%s "%s"' % (interaction, button_label)) self._test_function_code.append(u"\t\tself.click_button(u'%s')" % button_label) self._test_function_code.append(u"\t\tself.click_icon(u'%s')" % u'Principal')