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)
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)
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()
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()
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()
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
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)
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()
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()
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 )
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
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()
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)
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 )
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
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
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)
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()
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()
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()
def setUpTestData(cls): cls.user = UserFactory(username="******", email="*****@*****.**") cls.user_field = UserField()
class EditPlanForm(NewPlanForm): author = UserField(required=False)
class UserForm(forms.Form): # pylint: disable=must-inherit-from-model-form user = UserField()
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()
def setUpTestData(cls): cls.user = UserFactory(username='******', email='*****@*****.**') cls.user_field = UserField()
class Meta: model = TestCase exclude = ('author', ) widgets = { 'default_tester': UserField(), }
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()