class PlanFilterRunForm(forms.Form): build = forms.ModelChoiceField( label='Build', queryset=TestBuild.objects.all(), required=False ) manager__username__iexact = UserField(required=False) plan = forms.CharField(required=True) run_id = forms.CharField(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.iteritems() if v.strip()) ) def clean(self): cleaned_data = {} for key, value in self.cleaned_data.iteritems(): if not value: continue if not (isinstance(value, basestring) and not value.strip()): cleaned_data[key] = value return cleaned_data
class RunModelForm(forms.ModelForm): manager = UserField(label='Manager') default_tester = UserField(label='Default Tester', required=False) product = forms.ModelChoiceField( label='Product', queryset=Product.objects.all(), empty_label=None, ) build = forms.ModelChoiceField( label='Build', queryset=TestBuild.objects.none(), ) class Meta: model = TestRun 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 = TestBuild.list_active(query) def clean_product_version(self): if hasattr(self.cleaned_data['product_version'], 'value'): return self.cleaned_data['product_version'].value
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).order_by('-pk') 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 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 = DurationField(required=False) product_version = forms.ModelChoiceField( label='Product Version', queryset=Version.objects.none(), empty_label=None, ) build = forms.ModelChoiceField( label='Build', queryset=TestBuild.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 ) errata_id = forms.IntegerField( label='Errata_id', required=False, ) auto_update_run_status = forms.BooleanField( label='Set Status Automatically', widget=forms.CheckboxInput(), help_text='Check to update test run status automatically', required=False, initial=False ) 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 = TestBuild.list_active(query)
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) case_run__assignee = UserField(required=False) def clean_tag__name__in(self): return TestTag.string_to_list(self.cleaned_data['tag__name__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 BaseCaseRunForm(forms.Form): build = forms.ModelChoiceField( label='Build', queryset=TestBuild.objects.all(), ) case_run_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 ) notes = forms.CharField(label='Notes', required=False) sortkey = forms.IntegerField(label='Sortkey', required=False)
class NewReviewForm(forms.ModelForm): default_reviewer = UserField(required=False) case = forms.ModelMultipleChoiceField(queryset=TestCase.objects.all()) class Meta: model = TestReview exclude = ('plan', 'author') def __init__(self, author, plan, *args, **kwargs): super(NewReviewForm, self).__init__(*args, **kwargs) self.plan = plan self.author = author query = {'product_id': self.plan.product_id} self.fields['build'].queryset = TestBuild.list_active(query)
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()
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 = TestTag.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()
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): # 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 hasattr(self, 'product') and self.product and not product_id: product = self.product 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()
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 = forms.URLField( 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 = TimedeltaFormField() setup = forms.CharField(label="Setup", widget = TinyMCEWidget, required = False) action = forms.CharField(label="Actions", widget = TinyMCEWidget, required = False) effect = forms.CharField(label="Expect results", widget = TinyMCEWidget, required = False) breakdown = forms.CharField(label="Breakdown", widget = TinyMCEWidget, required = False) tag = forms.CharField( label = "Tag", required = False ) def __init__(self, *args, **kwargs): self.notes_val = args[0].get('notes', None) self.script_val = args[0].get('script', None) 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, e: return data[0] return data