コード例 #1
0
ファイル: usecase.py プロジェクト: adelsonllima/djangoplus
 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)
コード例 #2
0
ファイル: usecase.py プロジェクト: adelsonllima/djangoplus
    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__))
コード例 #3
0
    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__))
コード例 #4
0
ファイル: usecase.py プロジェクト: adelsonllima/djangoplus
    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'))
コード例 #5
0
    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')