Coverage for app/forms.py : 100%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from flask_wtf import FlaskForm
2from wtforms.fields import StringField, PasswordField, SelectMultipleField, SelectField, FileField, HiddenField
3from wtforms.widgets import TextArea, ListWidget, CheckboxInput
4from wtforms.validators import ValidationError, DataRequired, EqualTo
5from app.models import User
6from app import utils
7import json
10#
11# authantication forms
12#
14class LoginForm(FlaskForm):
15 username = StringField('Username', validators=[DataRequired()])
16 password = PasswordField('Password', validators=[DataRequired()])
18 def validate_username(self, username):
19 if User.query.filter_by(username=username.data).count() == 0:
20 raise ValidationError('Wrong username')
22 def validate_password(self, password):
23 user = User.query.filter_by(username=self.username.data).first()
24 if user and not user.verify_password(password.data):
25 raise ValidationError('Wrong password')
27class SingupForm(FlaskForm):
28 username = StringField('Username', validators=[DataRequired()])
29 password = PasswordField('Password', validators=[DataRequired()])
30 password2 = PasswordField('Password again', validators=[DataRequired(), EqualTo('password')])
32 def validate_username(self, username):
33 if User.query.filter_by(username=username.data).count() > 0:
34 raise ValidationError('This username is in use - please try another.')
36#
37# testrun import forms
38#
40class TestrunImportForm(FlaskForm):
42 file = FileField('Testrun Definition', validators=[DataRequired()])
43 #
44 # uncomment to have more datafiles for import
45 #
46 dataFile1 = FileField(f'Data File 1')
47 dataFile2 = FileField(f'Data File 2')
48 dataFile3 = FileField(f'Data File 3')
49 #dataFile4 = FileField(f'Data File 4')
50 #dataFile5 = FileField(f'Data File 5')
52 @property
53 def dataFiles(cls):
54 return [
55 cls.dataFile1,
56 cls.dataFile2,
57 cls.dataFile3,
58 #cls.dataFile4,
59 #cls.dataFile5,
60 ]
62class DataFileUpdateForm(FlaskForm):
64 datafile = FileField('Testrun Definition', validators=[DataRequired()])
65 datafile_id = HiddenField()
66 testcaseseq_id = HiddenField()
69#
70# testrun item create forms
71#
73class TestrunCreateForm(FlaskForm):
74 name = StringField('Name', validators=[DataRequired()])
75 description = StringField('Description', validators=[DataRequired()], widget=TextArea())
76 testcase_sequences = SelectMultipleField('Test Case Sequences')
78 # clobals
79 global_settings = StringField('Global Settings', render_kw={"placeholder": "Leave blank for defaults"}, widget=TextArea())
81 def validate_global_settings(self, global_settings):
82 if global_settings.data:
83 try:
84 json.loads(global_settings.data)
85 except Exception:
86 raise ValidationError('Global Settings should be a correct JSON')
88 @classmethod
89 def new(cls):
90 # update choices
91 form = cls()
92 form.testcase_sequences.choices = utils.getTestCaseSequences()
93 return form
96class TestCaseSequenceCreateForm(FlaskForm):
97 name = StringField('Name', validators=[DataRequired()])
98 description = StringField('Description', validators=[DataRequired()], widget=TextArea())
99 classname = SelectField('Class Name')
100 datafiles = SelectMultipleField('Data Files')
101 testcases = SelectMultipleField('Test Cases')
103 @classmethod
104 def new(cls, defaults=False):
105 # update choices
106 form = cls()
107 form.datafiles.choices = utils.getDataFiles()
108 form.testcases.choices = utils.getTestCases()
109 form.classname.choices = utils.getClassNames()
111 # set default values
112 if defaults:
113 form.classname.data = utils.getClassNames(default=utils.CLASSNAME_TESTCASESEQUENCE)
115 return form
118class TestCaseCreateForm(FlaskForm):
119 name = StringField('Name', validators=[DataRequired()])
120 description = StringField('Description', validators=[DataRequired()], widget=TextArea())
121 classname = SelectField('Class Name')
122 browser_type = SelectField('Browser Type')
123 testcase_type = SelectField('Test Case Type')
124 teststep_sequences = SelectMultipleField('Step Sequences')
126 @classmethod
127 def new(cls, defaults=False):
128 # update choices
129 form = cls()
130 form.teststep_sequences.choices = utils.getTestStepSequences()
131 form.classname.choices = utils.getClassNames()
132 form.browser_type.choices = utils.getBrowserTypes()
133 form.testcase_type.choices = utils.getTestCaseTypes()
135 # set default values
136 if defaults:
137 form.classname.data = utils.getClassNames(default=utils.CLASSNAME_TESTCASE)
138 form.browser_type.data = utils.getBrowserTypes(default=utils.BROWSER_TYPE)
139 form.testcase_type.data = utils.getTestCaseTypes(default=utils.TESTCASE_TYPE)
141 return form
144class TestStepSequenceCreateForm(FlaskForm):
145 name = StringField('Name', validators=[DataRequired()])
146 description = StringField('Description', validators=[DataRequired()], widget=TextArea())
147 classname = SelectField('Class Name')
148 teststeps = SelectMultipleField('Test Steps')
150 @classmethod
151 def new(cls, defaults=False, item_id=None):
152 # update choices
153 form = cls()
154 form.teststeps.choices = utils.getTestSteps(item_id)
155 form.classname.choices = utils.getClassNames()
157 # set default values
158 if defaults:
159 form.classname.data = utils.getClassNames(default=utils.CLASSNAME_TESTSTEP)
161 return form
164class TestStepCreateForm(FlaskForm):
165 name = StringField('Name', validators=[DataRequired()])
166 description = StringField('Description', validators=[DataRequired()], widget=TextArea())
167 activity_type = SelectField('Activity Type')
168 locator_type = SelectField('Locator Type')
169 locator = StringField('Locator')
170 value = StringField('Value')
171 value2 = StringField('Value 2')
172 comparison = SelectField('Comparison')
173 optional = SelectField('Optional')
174 timeout = StringField('Timeout')
175 release = StringField('Release')
177 @classmethod
178 def new(cls, defaults=False):
179 # update choices
180 form = cls()
181 form.activity_type.choices = utils.getActivityTypes()
182 form.locator_type.choices = utils.getLocatorTypes()
183 form.comparison.choices = utils.getComparisonChoices()
184 form.optional.choices=(('0', 'False'), ('1', 'True'))
186 # set default values
187 if defaults:
188 form.activity_type.data = utils.getActivityTypes(default=utils.ACTIVITY_TYPE)
189 form.locator_type.data = '0'
190 form.comparison.data = '0'
191 form.optional.data = '0'
193 return form