Hide keyboard shortcuts

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 

8 

9 

10# 

11# authantication forms 

12# 

13 

14class LoginForm(FlaskForm): 

15 username = StringField('Username', validators=[DataRequired()]) 

16 password = PasswordField('Password', validators=[DataRequired()]) 

17 

18 def validate_username(self, username): 

19 if User.query.filter_by(username=username.data).count() == 0: 

20 raise ValidationError('Wrong username') 

21 

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') 

26 

27class SingupForm(FlaskForm): 

28 username = StringField('Username', validators=[DataRequired()]) 

29 password = PasswordField('Password', validators=[DataRequired()]) 

30 password2 = PasswordField('Password again', validators=[DataRequired(), EqualTo('password')]) 

31 

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.') 

35 

36# 

37# testrun import forms 

38# 

39 

40class TestrunImportForm(FlaskForm): 

41 

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') 

51 

52 @property 

53 def dataFiles(cls): 

54 return [ 

55 cls.dataFile1, 

56 cls.dataFile2, 

57 cls.dataFile3, 

58 #cls.dataFile4, 

59 #cls.dataFile5, 

60 ] 

61 

62class DataFileUpdateForm(FlaskForm): 

63 

64 datafile = FileField('Testrun Definition', validators=[DataRequired()]) 

65 datafile_id = HiddenField() 

66 testcaseseq_id = HiddenField() 

67 

68 

69# 

70# testrun item create forms 

71# 

72 

73class TestrunCreateForm(FlaskForm): 

74 name = StringField('Name', validators=[DataRequired()]) 

75 description = StringField('Description', validators=[DataRequired()], widget=TextArea()) 

76 testcase_sequences = SelectMultipleField('Test Case Sequences') 

77 

78 # clobals 

79 global_settings = StringField('Global Settings', render_kw={"placeholder": "Leave blank for defaults"}, widget=TextArea()) 

80 

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') 

87 

88 @classmethod 

89 def new(cls): 

90 # update choices 

91 form = cls() 

92 form.testcase_sequences.choices = utils.getTestCaseSequences() 

93 return form 

94 

95 

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') 

102 

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() 

110 

111 # set default values 

112 if defaults: 

113 form.classname.data = utils.getClassNames(default=utils.CLASSNAME_TESTCASESEQUENCE) 

114 

115 return form 

116 

117 

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') 

125 

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() 

134 

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) 

140 

141 return form 

142 

143 

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') 

149 

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() 

156 

157 # set default values 

158 if defaults: 

159 form.classname.data = utils.getClassNames(default=utils.CLASSNAME_TESTSTEP) 

160 

161 return form 

162 

163 

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') 

176 

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')) 

185 

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' 

192 

193 return form 

194 

195 

196