コード例 #1
0
class BaseCaseRunForm(forms.Form):
    build = forms.ModelChoiceField(queryset=Build.objects.all())
    status = forms.ModelChoiceField(queryset=TestExecutionStatus.objects.all(),
                                    required=False)
    assignee = UserField(required=False)
    case_text_version = forms.IntegerField(required=False)
    sortkey = forms.IntegerField(required=False)
コード例 #2
0
ファイル: forms.py プロジェクト: vladi1337/Kiwi
class SearchRunForm(forms.Form):
    """
        Includes *only* fields used in search.html b/c
        the actual search is now done via JSON RPC.
    """
    plan = forms.CharField(required=False)
    product = forms.ModelChoiceField(queryset=Product.objects.all(),
                                     required=False)
    product_version = forms.ModelChoiceField(queryset=Version.objects.none(),
                                             required=False)
    build = forms.ModelChoiceField(
        queryset=Build.objects.none(),
        required=False,
    )
    default_tester = UserField(required=False)
    tag__name__in = forms.CharField(required=False)

    def clean_tag__name__in(self):
        return string_to_list(self.cleaned_data['tag__name__in'])

    def populate(self, product_id=None):
        if product_id:
            self.fields['product_version'].queryset = Version.objects.filter(
                product__pk=product_id)
            self.fields['build'].queryset = Build.objects.filter(
                product__pk=product_id)
コード例 #3
0
class SearchRunForm(forms.Form):
    search = forms.CharField(required=False)
    summary = forms.CharField(required=False)
    plan = forms.CharField(required=False)
    product = forms.ModelChoiceField(queryset=Product.objects.all(),
                                     required=False)
    product_version = forms.ModelChoiceField(queryset=Version.objects.none(),
                                             required=False)
    env_group = forms.ModelChoiceField(
        label='Environment Group',
        queryset=TCMSEnvGroup.get_active().all(),
        required=False)
    build = forms.ModelChoiceField(
        label='Build',
        queryset=TestBuild.objects.none(),
        required=False,
    )
    people_type = forms.ChoiceField(choices=PEOPLE_TYPE_CHOICES,
                                    required=False)
    people = UserField(required=False)
    manager = UserField(required=False)
    default_tester = UserField(required=False)
    status = forms.ChoiceField(choices=STATUS_CHOICES, required=False)
    tag__name__in = forms.CharField(label='Tag', required=False)
    env_value__value__in = forms.CharField(label='Environment', required=False)

    case_run__assignee = UserField(required=False)

    def clean_tag__name__in(self):
        return string_to_list(self.cleaned_data['tag__name__in'])

    def clean_env_value__value__in(self):
        return string_to_list(self.cleaned_data['env_value__value__in'])

    def populate(self, product_id=None):
        # We can dynamically set choices for a form field:
        # Seen at: http://my.opera.com/jacob7908/blog/2009/06/19/
        #          django-choicefield-queryset (Chinese)
        # Is this documented elsewhere?
        if product_id:
            self.fields['product_version'].queryset = Version.objects.filter(
                product__pk=product_id)
            self.fields['build'].queryset = TestBuild.objects.filter(
                product__pk=product_id)
        else:
            self.fields['product_version'].queryset = Version.objects.all()
            self.fields['build'].queryset = TestBuild.list_active()
コード例 #4
0
class BaseCaseForm(forms.Form):
    summary = forms.CharField(label="Summary", )
    default_tester = UserField(label="Default tester", required=False)
    requirement = forms.CharField(label="Requirement", required=False)
    is_automated = forms.BooleanField(initial=False, required=False)
    script = forms.CharField(label="Script", required=False)
    arguments = forms.CharField(label="Arguments", required=False)
    extra_link = StripURLField(label='Extra link',
                               max_length=1024,
                               required=False)
    # sortkey = forms.IntegerField(label = 'Sortkey', required = False)
    case_status = forms.ModelChoiceField(label="Case status",
                                         queryset=TestCaseStatus.objects.all(),
                                         empty_label=None,
                                         required=False)
    priority = forms.ModelChoiceField(
        label="Priority",
        queryset=Priority.objects.filter(is_active=True),
        empty_label=None,
    )
    product = forms.ModelChoiceField(
        label="Product",
        queryset=Product.objects.all(),
        empty_label=None,
    )
    category = forms.ModelChoiceField(
        label="Category",
        queryset=Category.objects.none(),
        empty_label=None,
    )
    notes = forms.CharField(label='Notes',
                            widget=forms.Textarea,
                            required=False)
    text = forms.CharField(
        widget=SimpleMDE(),
        required=False,
        initial=_("""**Scenario**: ... what behavior will be tested ...
  **Given** ... conditions ...
  **When** ... actions ...
  **Then** ... expected results ...

*Actions*:

1. item
2. item
3. item

*Expected results*:

1. item
2. item
3. item"""))

    def populate(self, product_id=None):
        if product_id:
            self.fields['category'].queryset = Category.objects.filter(
                product_id=product_id)
        else:
            self.fields['category'].queryset = Category.objects.all()
コード例 #5
0
class SearchPlanForm(forms.ModelForm):
    class Meta:
        model = TestPlan
        fields = "__all__"

    # overriden widget
    author = UserField()

    # extra fields
    default_tester = UserField()

    def populate(self, product_id=None):
        if product_id:
            self.fields["product_version"].queryset = Version.objects.filter(
                product_id=product_id)
        else:
            self.fields["product_version"].queryset = Version.objects.none()
コード例 #6
0
class BaseRunForm(forms.Form):
    summary = forms.CharField(label='Summary', max_length=255)
    manager = UserField(label='Manager')
    default_tester = UserField(label='Default Tester', required=False)
    product = forms.ModelChoiceField(
        label='Product',
        queryset=Product.objects.all(),
        empty_label=None,
    )
    estimated_time = forms.DurationField(required=False)
    product_version = forms.ModelChoiceField(
        label='Product Version',
        queryset=Version.objects.none(),
        empty_label=None,
    )
    build = forms.ModelChoiceField(
        label='Build',
        queryset=Build.objects.none(),
    )
    notes = forms.CharField(label='Notes',
                            widget=forms.Textarea,
                            required=False)
    keep_status = forms.BooleanField(label='Reserve Status',
                                     widget=forms.CheckboxInput(),
                                     required=False)
    keep_assignee = forms.BooleanField(label='Reserve Assignee',
                                       widget=forms.CheckboxInput(),
                                       required=False,
                                       initial=True)

    def populate(self, product_id):
        # We can dynamically set choices for a form field:
        # Seen at: http://my.opera.com/jacob7908/blog/2009/06/19/
        #          django-choicefield-queryset (Chinese)
        # Is this documented elsewhere?
        query = {'product_id': product_id}
        self.fields['product_version'].queryset = Version.objects.filter(
            product__id=product_id)
        self.fields['build'].queryset = Build.list_active(query)

    def clean_estimated_time(self):
        estimated_time = self.cleaned_data.get('estimated_time', timedelta(0))
        # can be either None, '', 0 or timedelta(0)
        if not estimated_time:
            estimated_time = timedelta(0)
        return estimated_time
コード例 #7
0
class MulitpleRunsCloneForm(forms.Form):
    run = forms.ModelMultipleChoiceField(queryset=TestRun.objects.none(),
                                         widget=forms.CheckboxSelectMultiple(),
                                         required=False)
    product = forms.ModelChoiceField(queryset=Product.objects.all(),
                                     required=False)
    product_version = forms.ModelChoiceField(queryset=Version.objects.none(),
                                             required=False)
    build = forms.ModelChoiceField(
        label='Build',
        queryset=TestBuild.objects.none(),
        empty_label=None,
    )
    manager = UserField(required=False)
    default_tester = UserField(required=False)
    # assignee = UserField(required=False)
    update_manager = forms.BooleanField(
        help_text='Unchecking will keep the original manager',
        required=False,
    )
    update_default_tester = forms.BooleanField(
        help_text='Unchecking will keep the original default tester',
        required=False,
    )
    # update_assignee = forms.BooleanField(
    # help_text='Unchecking will keep the original assignee of case runs',
    #     required=False,
    # )
    update_case_text = forms.BooleanField(
        label='Use newest case text(setup/actions/effects/breakdown)',
        help_text='Unchecking will make me the default tester of copied cases',
        required=False)
    clone_cc = forms.BooleanField(
        help_text='Unchecking it will not clone the CC', required=False)
    clone_tag = forms.BooleanField(
        help_text='Unchecking it will not clone the tags', required=False)

    def populate(self, trs, product_id=None):
        self.fields['run'].queryset = TestRun.objects.filter(pk__in=trs)

        if product_id:
            self.fields['product_version'].queryset = Version.objects.filter(
                product__pk=product_id)
            self.fields['build'].queryset = TestBuild.objects.filter(
                product__pk=product_id)
コード例 #8
0
ファイル: forms.py プロジェクト: mfonism/Kiwi
class TestCaseForm(forms.ModelForm):
    class Meta:
        model = TestCase
        exclude = [  # pylint: disable=modelform-uses-exclude
            "reviewer",
            "tag",
            "component",
            "plan",
        ]

    default_tester = UserField(required=False)
    priority = forms.ModelChoiceField(
        queryset=Priority.objects.filter(is_active=True),
        empty_label=None,
    )
    product = forms.ModelChoiceField(
        queryset=Product.objects.all(),
        empty_label=None,
    )
    setup_duration = forms.DurationField(
        widget=DurationWidget(),
        required=False,
    )
    testing_duration = forms.DurationField(
        widget=DurationWidget(),
        required=False,
    )
    text = forms.CharField(
        widget=SimpleMDE(),
        required=False,
        initial=_(
            """**Scenario**: ... what behavior will be tested ...
  **Given** ... conditions ...
  **When** ... actions ...
  **Then** ... expected results ...

*Actions*:

1. item
2. item
3. item

*Expected results*:

1. item
2. item
3. item"""
        ),
    )

    def populate(self, product_id=None):
        if product_id:
            self.fields["category"].queryset = Category.objects.filter(
                product_id=product_id
            )
        else:
            self.fields["category"].queryset = Category.objects.all()
コード例 #9
0
ファイル: forms.py プロジェクト: sonyagennova/Kiwi
class NewRunForm(forms.ModelForm):
    class Meta:
        model = TestRun
        exclude = ("tag", "cc")  # pylint: disable=modelform-uses-exclude

    manager = UserField()
    default_tester = UserField(required=False)
    start_date = DateTimeField(required=False)
    stop_date = DateTimeField(required=False)
    planned_start = DateTimeField(required=False)
    planned_stop = DateTimeField(required=False)

    case = forms.ModelMultipleChoiceField(
        queryset=TestCase.objects.none(),
        required=False,
    )

    product = forms.ModelChoiceField(
        queryset=Product.objects.all(),
        required=False,
    )

    def populate(self, plan_id):
        if plan_id:
            # plan is ModelChoiceField which contains all the plans
            # as we need only the plan for current run we filter the queryset
            self.fields["plan"].queryset = self.fields["plan"].queryset.filter(
                pk=plan_id
            )
            self.fields["product"].queryset = Product.objects.filter(
                pk=self.fields["plan"].queryset.first().product_id,
            )
            self.fields["build"].queryset = Build.objects.filter(
                version_id=self.fields["plan"].queryset.first().product_version_id,
                is_active=True,
            )
        else:
            # these are dynamically filtered via JavaScript
            self.fields["plan"].queryset = self.fields["plan"].queryset.none()
            self.fields["build"].queryset = Build.objects.none()

        self.fields["case"].queryset = TestCase.objects.filter(
            case_status__is_confirmed=True
        ).all()
コード例 #10
0
ファイル: forms.py プロジェクト: sugus86/Kiwi
class EditPlanForm(NewPlanForm):
    product_version = forms.ModelChoiceField(
        label="Product Version",
        queryset=Version.objects.all(),
        empty_label=None,
    )
    is_active = forms.BooleanField(label="Active", required=False)
    author = UserField(
        label=' plan\'s author',
        required=False
    )
コード例 #11
0
class NewTestExecutionForm(forms.ModelForm):
    class Meta:
        model = TestExecution
        fields = '__all__'

    assignee = UserField(required=False)
    tested_by = UserField(required=False)

    def clean_case_text_version(self):
        data = self.cleaned_data.get('case_text_version')
        if not data and self.cleaned_data.get('case'):
            data = self.cleaned_data['case'].history.latest().history_id

        return data

    def clean_status(self):
        data = self.cleaned_data.get('status')
        if not data:
            data = TestExecutionStatus.objects.filter(weight=0).first()

        return data
コード例 #12
0
class NewRunForm(forms.ModelForm):
    class Meta:
        model = TestRun
        exclude = ("tag", "cc")  # pylint: disable=modelform-uses-exclude

    manager = UserField()
    default_tester = UserField(required=False)

    case = forms.ModelMultipleChoiceField(
        queryset=TestCase.objects.none(),
        required=False,
    )

    def populate(self, plan_id):
        # plan is ModelChoiceField which contains all the plans
        # as we need only the plan for current run we filter the queryset
        self.fields["plan"].queryset = self.fields["plan"].queryset.filter(pk=plan_id)

        # reusing version from plan b/c TestRun.product_version is scheduled for removal
        # vvv allow modifying an immutable QueryDict.
        if hasattr(self.data, "_mutable"):
            self.data._mutable = True  # pylint: disable=protected-access
        self.data["product_version"] = (
            self.fields["plan"].queryset.first().product_version_id
        )
        if hasattr(self.data, "_mutable"):
            self.data._mutable = False  # pylint: disable=protected-access

        self.fields["product_version"].queryset = Version.objects.filter(
            pk=self.fields["plan"].queryset.first().product_version_id
        )

        self.fields["build"].queryset = Build.objects.filter(
            version_id=self.fields["plan"].queryset.first().product_version_id,
            is_active=True,
        )
        self.fields["case"].queryset = TestCase.objects.filter(
            case_status__is_confirmed=True
        ).all()
コード例 #13
0
class BaseCaseRunForm(forms.Form):
    build = forms.ModelChoiceField(
        label='Build', queryset=Build.objects.all(),
    )
    status = forms.ModelChoiceField(
        label='Case Run Status', queryset=TestCaseRunStatus.objects.all(),
        required=False,
    )
    assignee = UserField(label='Assignee', required=False)
    case_text_version = forms.IntegerField(
        label='Case text version', required=False
    )
    sortkey = forms.IntegerField(label='Sortkey', required=False)
コード例 #14
0
ファイル: forms.py プロジェクト: sonyagennova/Kiwi
class SearchRunForm(forms.ModelForm):
    class Meta:
        model = TestRun
        fields = "__all__"

    # overriden widget
    manager = UserField()
    default_tester = UserField()

    # extra fields
    product = forms.ModelChoiceField(queryset=Product.objects.all(), required=False)
    version = forms.ModelChoiceField(queryset=Version.objects.none(), required=False)
    running = forms.IntegerField(required=False)

    def populate(self, product_id=None):
        if product_id:
            self.fields["version"].queryset = Version.objects.filter(
                product__pk=product_id
            )
            self.fields["build"].queryset = Build.objects.filter(
                version__product=product_id
            )
コード例 #15
0
class PlanFilterRunForm(forms.Form):
    build = forms.ModelChoiceField(label='Build',
                                   queryset=Build.objects.all(),
                                   required=False)
    manager__username__iexact = UserField(required=False)
    plan = forms.IntegerField(required=True)
    run_id = forms.IntegerField(required=False)
    start_date__gt = forms.DateTimeField(required=False)
    summary__icontains = forms.CharField(required=False)
    default_tester__username__iexact = UserField(required=False)

    def __init__(self, request_data):
        super(PlanFilterRunForm, self).__init__(
            dict((k, v) for k, v in request_data.items() if v.strip()))

    def clean(self):
        cleaned_data = {}
        for key, value in self.cleaned_data.items():
            if not value:
                continue
            if not (isinstance(value, str) and not value.strip()):
                cleaned_data[key] = value
        return cleaned_data
コード例 #16
0
ファイル: forms.py プロジェクト: jaydenxxx/Kiwi
class BaseRunForm(forms.Form):
    summary = forms.CharField(max_length=255)
    manager = UserField()
    default_tester = UserField(required=False)
    estimated_time = forms.DurationField(required=False)
    build = forms.ModelChoiceField(
        queryset=Build.objects.none(),
    )
    notes = forms.CharField(
        widget=forms.Textarea,
        required=False,
    )

    def populate(self, product_id):
        query = {'product_id': product_id}
        self.fields['build'].queryset = Build.list_active(query)

    def clean_estimated_time(self):
        estimated_time = self.cleaned_data.get('estimated_time', timedelta(0))
        # can be either None, '', 0 or timedelta(0)
        if not estimated_time:
            estimated_time = timedelta(0)
        return estimated_time
コード例 #17
0
ファイル: admin.py プロジェクト: kiwitcms/tenants
class AuthorizedUsersChangeForm(forms.ModelForm):
    """
        A custom add/change form which will filter the available
        values of the ``tenant`` field so that only the current
        tenant is shown!
    """
    # IMPORTANT NOTICE:
    # As a security concern we would like to have this queryset set to
    # Tenant.objects.none() instead of .all(). However ModelChoiceField.to_python()
    # is trying to self.queryset.get() the currently selected value! When the queryset
    # is empty this raises ValidationError!
    # The internal mechanics of this are in BaseForm._clean_fields()::L399(Django 2.1.7)
    # which calls field.clean(value) before any clean_<field_name>() methods on the form!
    tenant = forms.models.ModelChoiceField(queryset=Tenant.objects.all(), )
    user = UserField(  # pylint: disable=form-field-help-text-used
        help_text=_('Existing username, email or user ID'))

    def __init__(
            self,  # pylint: disable=too-many-arguments
            data=None,
            files=None,
            auto_id='id_%s',
            prefix=None,
            initial=None,
            error_class=ErrorList,
            label_suffix=None,
            empty_permitted=False,
            instance=None,
            use_required_attribute=None,
            renderer=None):
        super().__init__(data, files, auto_id, prefix, initial, error_class,
                         label_suffix, empty_permitted, instance,
                         use_required_attribute, renderer)
        # this is passed by ModelAdmin._chageform_view():L1578
        # when adding a new object
        if initial and 'tenant' in initial:
            self.fields['tenant'].queryset = Tenant.objects.filter(
                pk=initial['tenant'])
        # this is passed by ModelAdmin._chageform_view():L1581
        # when changing an existing object
        elif instance:
            self.fields['tenant'].queryset = Tenant.objects.filter(
                pk=instance.tenant.pk)
コード例 #18
0
ファイル: forms.py プロジェクト: sonyagennova/Kiwi
class NewBugForm(forms.ModelForm):
    class Meta:
        model = Bug
        fields = [
            "summary", "assignee", "reporter", "product", "version", "build"
        ]

    assignee = UserField(required=False)

    text = forms.CharField(
        widget=SimpleMDE(),
        required=False,
        initial=_("""Description of problem:


How often reproducible:


Steps to Reproduce:
1.
2.
3.

Actual results:


Expected results:


Additional info:"""),
    )

    def populate(self, product_id=None):
        if product_id:
            self.fields["version"].queryset = Version.objects.filter(
                product_id=product_id)
            self.fields["build"].queryset = Build.objects.filter(
                version__product=product_id)
        else:
            self.fields["version"].queryset = Version.objects.all()
            self.fields["build"].queryset = Build.objects.all()
コード例 #19
0
class TestCaseForm(forms.ModelForm):
    class Meta:
        model = TestCase
        exclude = [  # pylint: disable=modelform-uses-exclude
            "reviewer",
            "tag",
            "component",
            "plan",
        ]

    default_tester = UserField(required=False)
    priority = forms.ModelChoiceField(
        queryset=Priority.objects.filter(is_active=True),
        empty_label=None,
    )
    product = forms.ModelChoiceField(
        queryset=Product.objects.all(),
        empty_label=None,
    )
    setup_duration = forms.DurationField(
        widget=DurationWidget(),
        required=False,
    )
    testing_duration = forms.DurationField(
        widget=DurationWidget(),
        required=False,
    )
    text = forms.CharField(
        widget=SimpleMDE(),
        required=False,
    )

    def populate(self, product_id=None):
        if product_id:
            self.fields["category"].queryset = Category.objects.filter(
                product_id=product_id
            )
        else:
            self.fields["category"].queryset = Category.objects.all()
コード例 #20
0
class BaseCaseForm(forms.Form):
    summary = forms.CharField(label="Summary", )
    default_tester = UserField(label="Default tester", required=False)
    requirement = forms.CharField(label="Requirement", required=False)
    is_automated = forms.MultipleChoiceField(
        choices=AUTOMATED_CHOICES,
        widget=forms.CheckboxSelectMultiple(),
    )
    is_automated_proposed = forms.BooleanField(label='Autoproposed',
                                               required=False)
    script = forms.CharField(label="Script", required=False)
    arguments = forms.CharField(label="Arguments", required=False)
    alias = forms.CharField(label="Alias", required=False)
    extra_link = StripURLField(label='Extra link',
                               max_length=1024,
                               required=False)
    # sortkey = forms.IntegerField(label = 'Sortkey', required = False)
    case_status = forms.ModelChoiceField(label="Case status",
                                         queryset=TestCaseStatus.objects.all(),
                                         empty_label=None,
                                         required=False)
    priority = forms.ModelChoiceField(
        label="Priority",
        queryset=Priority.objects.filter(is_active=True),
        empty_label=None,
    )
    product = forms.ModelChoiceField(
        label="Product",
        queryset=Product.objects.all(),
        empty_label=None,
    )
    category = forms.ModelChoiceField(
        label="Category",
        queryset=Category.objects.none(),
        empty_label=None,
    )
    component = forms.ModelMultipleChoiceField(
        label="Components",
        queryset=Component.objects.none(),
        required=False,
    )
    notes = forms.CharField(label='Notes',
                            widget=forms.Textarea,
                            required=False)
    setup = forms.CharField(label="Setup", widget=SimpleMDE(), required=False)
    action = forms.CharField(label="Actions",
                             widget=SimpleMDE(),
                             required=False)
    effect = forms.CharField(label="Expect results",
                             widget=SimpleMDE(),
                             required=False)
    breakdown = forms.CharField(label="Breakdown",
                                widget=SimpleMDE(),
                                required=False)

    def __init__(self, *args, **kwargs):
        if args:
            self.notes_val = args[0].get('notes', None)
            self.script_val = args[0].get('script', None)
        elif kwargs:
            self.notes_val = kwargs.get('notes', None)
            self.script_val = kwargs.get('script', None)
        else:
            self.notes_val = ''
            self.script_val = ''
        super(BaseCaseForm, self).__init__(*args, **kwargs)

    def clean_is_automated(self):
        data = self.cleaned_data['is_automated']
        if len(data) == 2:
            return 2

        if data:
            # FIXME: Should data always be a list?
            try:
                return int(data[0])
            except ValueError:
                return data[0]

        return data

    def clean_script(self):
        if self.script_val:
            return self.cleaned_data['script']

        return ''

    def clean_notes(self):
        if self.notes_val:
            return self.cleaned_data['notes']

        return ''

    def populate(self, product_id=None):
        if product_id:
            self.fields['category'].queryset = Category.objects.filter(
                product__id=product_id)
            self.fields['component'].queryset = Component.objects.filter(
                product__id=product_id)
        else:
            self.fields['category'].queryset = Category.objects.all()
            self.fields['component'].queryset = Component.objects.all()
コード例 #21
0
 def setUpTestData(cls):
     cls.user = UserFactory(username="******", email="*****@*****.**")
     cls.user_field = UserField()
コード例 #22
0
ファイル: forms.py プロジェクト: google2013/Kiwi
class EditPlanForm(NewPlanForm):
    author = UserField(required=False)
コード例 #23
0
class UserForm(forms.Form):  # pylint: disable=must-inherit-from-model-form
    user = UserField()
コード例 #24
0
class BaseCaseForm(forms.Form):
    summary = forms.CharField(label="Summary", )
    default_tester = UserField(label="Default tester", required=False)
    requirement = forms.CharField(label="Requirement", required=False)
    is_automated = forms.MultipleChoiceField(
        choices=AUTOMATED_CHOICES,
        widget=forms.CheckboxSelectMultiple(),
    )
    is_automated_proposed = forms.BooleanField(label='Autoproposed',
                                               required=False)
    script = forms.CharField(label="Script", required=False)
    arguments = forms.CharField(label="Arguments", required=False)
    alias = forms.CharField(label="Alias", required=False)
    extra_link = StripURLField(label='Extra link',
                               max_length=1024,
                               required=False)
    # sortkey = forms.IntegerField(label = 'Sortkey', required = False)
    case_status = forms.ModelChoiceField(label="Case status",
                                         queryset=TestCaseStatus.objects.all(),
                                         empty_label=None,
                                         required=False)
    priority = forms.ModelChoiceField(
        label="Priority",
        queryset=Priority.objects.all(),
        empty_label=None,
    )
    product = forms.ModelChoiceField(
        label="Product",
        queryset=Product.objects.all(),
        empty_label=None,
    )
    category = forms.ModelChoiceField(
        label="Category",
        queryset=TestCaseCategory.objects.none(),
        empty_label=None,
    )
    component = forms.ModelMultipleChoiceField(
        label="Components",
        queryset=Component.objects.none(),
        required=False,
    )
    notes = forms.CharField(label='Notes',
                            widget=forms.Textarea,
                            required=False)
    estimated_time = DurationField(label='Estimated Time',
                                   initial='0m',
                                   required=False)
    setup = forms.CharField(label="Setup", widget=TinyMCE(), required=False)
    action = forms.CharField(label="Actions", widget=TinyMCE(), required=False)
    effect = forms.CharField(label="Expect results",
                             widget=TinyMCE(),
                             required=False)
    breakdown = forms.CharField(label="Breakdown",
                                widget=TinyMCE(),
                                required=False)

    tag = forms.CharField(label="Tag", required=False)

    def __init__(self, *args, **kwargs):
        if args:
            self.notes_val = args[0].get('notes', None)
            self.script_val = args[0].get('script', None)
        elif kwargs:
            self.notes_val = kwargs.get('notes', None)
            self.script_val = kwargs.get('script', None)
        else:
            self.notes_val = ''
            self.script_val = ''
        super(BaseCaseForm, self).__init__(*args, **kwargs)

    def clean_is_automated(self):
        data = self.cleaned_data['is_automated']
        if len(data) == 2:
            return 2

        if len(data):
            # FIXME: Should data always be a list?
            try:
                return int(data[0])
            except ValueError:
                return data[0]

        return data

    def clean_script(self):
        if self.script_val == '':
            return u''
        elif self.script_val:
            return self.cleaned_data['script']
        else:
            return None

    def clean_notes(self):
        if self.notes_val == '':
            return u''
        elif self.notes_val:
            return self.cleaned_data['notes']
        else:
            return None

    # def clean_alias(self):
    #    data = self.cleaned_data['alias']
    #    tc_count = TestCase.objects.filter(alias = data).count()
    #
    #    if tc_count == 0:
    #        return data
    #
    #    raise forms.ValidationError('Duplicated alias exist in database.')

    def clean_tag(self):
        tags = []
        if self.cleaned_data['tag']:
            tag_names = string_to_list(self.cleaned_data['tag'])
            tags = TestTag.get_or_create_many_by_name(tag_names)
        return tags

    def populate(self, product_id=None):
        if product_id:
            self.fields['category'].queryset = TestCaseCategory.objects.filter(
                product__id=product_id)
            self.fields['component'].queryset = Component.objects.filter(
                product__id=product_id)
        else:
            self.fields['category'].queryset = TestCaseCategory.objects.all()
            self.fields['component'].queryset = Component.objects.all()
コード例 #25
0
ファイル: test_forms.py プロジェクト: kazpanda/PythonDjango
 def setUpTestData(cls):
     cls.user = UserFactory(username='******', email='*****@*****.**')
     cls.user_field = UserField()
コード例 #26
0
ファイル: forms.py プロジェクト: jetlyb/Kiwi
 class Meta:
     model = TestCase
     exclude = ('author', )
     widgets = {
         'default_tester': UserField(),
     }
コード例 #27
0
ファイル: forms.py プロジェクト: jetlyb/Kiwi
class CaseModelForm(forms.ModelForm):
    default_tester = UserField(required=False)

    is_automated = forms.MultipleChoiceField(
        choices=AUTOMATED_CHOICES,
        widget=forms.CheckboxSelectMultiple(),
    )
    is_automated_proposed = forms.BooleanField(label='Autoproposed',
                                               widget=forms.CheckboxInput(),
                                               required=False)

    product = forms.ModelChoiceField(
        label="Product",
        queryset=Product.objects.all(),
        empty_label=None,
    )
    category = forms.ModelChoiceField(
        label="Category",
        queryset=TestCaseCategory.objects.none(),
        empty_label=None,
    )
    component = forms.ModelMultipleChoiceField(
        label="Components",
        queryset=Component.objects.none(),
        required=False,
    )

    case_status = forms.ModelChoiceField(
        label="Case status",
        queryset=TestCaseStatus.objects.all(),
        empty_label=None,
    )

    priority = forms.ModelChoiceField(
        label="Priority",
        queryset=Priority.objects.all(),
        empty_label=None,
    )

    class Meta:
        model = TestCase
        exclude = ('author', )
        widgets = {
            'default_tester': UserField(),
        }

    # def clean_alias(self):
    #    data = self.cleaned_data['alias']
    #    tc_count = TestCase.objects.filter(alias = data).count()
    #
    #    if tc_count == 0:
    #        return data
    #    raise forms.ValidationError('Duplicated alias exist in database.')

    def clean_is_automated(self):
        data = self.cleaned_data['is_automated']
        if len(data) == 2:
            return 2

        if len(data):
            return data[0]

        return data

    def populate(self, product_id=None):
        if product_id:
            self.fields['category'].queryset = TestCaseCategory.objects.filter(
                product__id=product_id)
            self.fields['component'].queryset = Component.objects.filter(
                product__id=product_id)
        else:
            self.fields['category'].queryset = TestCaseCategory.objects.all()
            self.fields['component'].queryset = Component.objects.all()