Merge lp:~diegosarmentero/ubuntuone-windows-installer/setupaccount-form-behavior into lp:ubuntuone-windows-installer

Proposed by Diego Sarmentero
Status: Merged
Approved by: Natalia Bidart
Approved revision: 54
Merged at revision: 34
Proposed branch: lp:~diegosarmentero/ubuntuone-windows-installer/setupaccount-form-behavior
Merge into: lp:ubuntuone-windows-installer
Diff against target: 1184 lines (+609/-148)
4 files modified
data/qt/setup_account.ui (+289/-53)
data/qt/ubuntuone.qss (+8/-3)
ubuntuone_installer/gui/qt/setup_account.py (+83/-26)
ubuntuone_installer/gui/qt/tests/test_gui.py (+229/-66)
To merge this branch: bzr merge lp:~diegosarmentero/ubuntuone-windows-installer/setupaccount-form-behavior
Reviewer Review Type Date Requested Status
Natalia Bidart (community) Approve
Review via email: mp+71937@code.launchpad.net
To post a comment you must log in.
40. By Diego Sarmentero

adding more tests and fixing lint issues

41. By Diego Sarmentero

link branch to bug

42. By Diego Sarmentero

fixing some issues in setup_account.ui

43. By Diego Sarmentero

connecting signal on showEvent and disconnecting signal on hideEvent.
Avoid setup account resizing on form errors.

44. By Diego Sarmentero

fixing some connections in setup_account.
adding more tests to: focus_changed

45. By Diego Sarmentero

fixing some issues related to focus managment.

46. By Diego Sarmentero

setting password_assistance to visible = True if the user click on confirmation password

47. By Diego Sarmentero

tests improved.

48. By Diego Sarmentero

fixing some tests to use assertIn

49. By Diego Sarmentero

fixing test to user assertNotIn

50. By Diego Sarmentero

fixing docstrings

51. By Diego Sarmentero

removing password_assistance_in_focus to avoid code duplication.
fixing tests related to this method.

52. By Diego Sarmentero

docstring fixed.
tests modified to be more clear.

53. By Diego Sarmentero

adding missing docstrings to the new methods.

Revision history for this message
Natalia Bidart (nataliabidart) wrote :

Looks great!

review: Approve
54. By Diego Sarmentero

adding missing docstrings.
fixing some lint issues.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'data/qt/setup_account.ui'
--- data/qt/setup_account.ui 2011-08-17 14:22:25 +0000
+++ data/qt/setup_account.ui 2011-08-22 14:08:26 +0000
@@ -7,7 +7,7 @@
7 <x>0</x>7 <x>0</x>
8 <y>0</y>8 <y>0</y>
9 <width>575</width>9 <width>575</width>
10 <height>521</height>10 <height>573</height>
11 </rect>11 </rect>
12 </property>12 </property>
13 <property name="windowTitle">13 <property name="windowTitle">
@@ -18,7 +18,7 @@
18 <number>6</number>18 <number>6</number>
19 </property>19 </property>
20 <item>20 <item>
21 <layout class="QGridLayout" name="gridLayout" columnminimumwidth="300,250">21 <layout class="QGridLayout" name="gridLayout" columnminimumwidth="310,250">
22 <item row="0" column="0">22 <item row="0" column="0">
23 <widget class="QLabel" name="password_info_label">23 <widget class="QLabel" name="password_info_label">
24 <property name="sizePolicy">24 <property name="sizePolicy">
@@ -55,29 +55,37 @@
55 </item>55 </item>
56 <item>56 <item>
57 <widget class="QLineEdit" name="name_edit">57 <widget class="QLineEdit" name="name_edit">
58 <property name="sizePolicy">
59 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
60 <horstretch>0</horstretch>
61 <verstretch>0</verstretch>
62 </sizepolicy>
63 </property>
64 <property name="minimumSize">
65 <size>
66 <width>300</width>
67 <height>0</height>
68 </size>
69 </property>
70 <property name="maximumSize">
71 <size>
72 <width>300</width>
73 <height>16777215</height>
74 </size>
75 </property>
58 <property name="font">76 <property name="font">
59 <font>77 <font>
60 <pointsize>11</pointsize>78 <pointsize>11</pointsize>
61 </font>79 </font>
62 </property>80 </property>
81 <property name="formError" stdset="0">
82 <bool>false</bool>
83 </property>
63 </widget>84 </widget>
64 </item>85 </item>
65 </layout>86 </layout>
66 </item>87 </item>
67 <item row="1" column="1">88 <item row="3" column="0">
68 <widget class="QLabel" name="name_assistance">
69 <property name="text">
70 <string>name_assistance</string>
71 </property>
72 <property name="alignment">
73 <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
74 </property>
75 <property name="indent">
76 <number>20</number>
77 </property>
78 </widget>
79 </item>
80 <item row="2" column="0">
81 <layout class="QVBoxLayout" name="verticalLayout">89 <layout class="QVBoxLayout" name="verticalLayout">
82 <property name="spacing">90 <property name="spacing">
83 <number>3</number>91 <number>3</number>
@@ -97,6 +105,24 @@
97 </item>105 </item>
98 <item>106 <item>
99 <widget class="QLineEdit" name="email_edit">107 <widget class="QLineEdit" name="email_edit">
108 <property name="sizePolicy">
109 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
110 <horstretch>0</horstretch>
111 <verstretch>0</verstretch>
112 </sizepolicy>
113 </property>
114 <property name="minimumSize">
115 <size>
116 <width>300</width>
117 <height>0</height>
118 </size>
119 </property>
120 <property name="maximumSize">
121 <size>
122 <width>300</width>
123 <height>16777215</height>
124 </size>
125 </property>
100 <property name="font">126 <property name="font">
101 <font>127 <font>
102 <pointsize>11</pointsize>128 <pointsize>11</pointsize>
@@ -105,21 +131,14 @@
105 <property name="placeholderText">131 <property name="placeholderText">
106 <string/>132 <string/>
107 </property>133 </property>
134 <property name="formError" stdset="0">
135 <bool>false</bool>
136 </property>
108 </widget>137 </widget>
109 </item>138 </item>
110 </layout>139 </layout>
111 </item>140 </item>
112 <item row="2" column="1">141 <item row="4" column="0">
113 <widget class="QLabel" name="email_assistance">
114 <property name="text">
115 <string>email_assistance</string>
116 </property>
117 <property name="indent">
118 <number>20</number>
119 </property>
120 </widget>
121 </item>
122 <item row="3" column="0">
123 <layout class="QVBoxLayout" name="verticalLayout">142 <layout class="QVBoxLayout" name="verticalLayout">
124 <property name="spacing">143 <property name="spacing">
125 <number>3</number>144 <number>3</number>
@@ -139,6 +158,24 @@
139 </item>158 </item>
140 <item>159 <item>
141 <widget class="QLineEdit" name="confirm_email_edit">160 <widget class="QLineEdit" name="confirm_email_edit">
161 <property name="sizePolicy">
162 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
163 <horstretch>0</horstretch>
164 <verstretch>0</verstretch>
165 </sizepolicy>
166 </property>
167 <property name="minimumSize">
168 <size>
169 <width>300</width>
170 <height>0</height>
171 </size>
172 </property>
173 <property name="maximumSize">
174 <size>
175 <width>300</width>
176 <height>16777215</height>
177 </size>
178 </property>
142 <property name="font">179 <property name="font">
143 <font>180 <font>
144 <pointsize>11</pointsize>181 <pointsize>11</pointsize>
@@ -147,21 +184,14 @@
147 <property name="placeholderText">184 <property name="placeholderText">
148 <string/>185 <string/>
149 </property>186 </property>
187 <property name="formError" stdset="0">
188 <bool>false</bool>
189 </property>
150 </widget>190 </widget>
151 </item>191 </item>
152 </layout>192 </layout>
153 </item>193 </item>
154 <item row="3" column="1">194 <item row="6" column="0">
155 <widget class="QLabel" name="confirm_email_assistance">
156 <property name="text">
157 <string>confirm_email_assistance</string>
158 </property>
159 <property name="indent">
160 <number>20</number>
161 </property>
162 </widget>
163 </item>
164 <item row="4" column="0">
165 <layout class="QVBoxLayout" name="verticalLayout">195 <layout class="QVBoxLayout" name="verticalLayout">
166 <property name="spacing">196 <property name="spacing">
167 <number>3</number>197 <number>3</number>
@@ -181,6 +211,24 @@
181 </item>211 </item>
182 <item>212 <item>
183 <widget class="QLineEdit" name="password_edit">213 <widget class="QLineEdit" name="password_edit">
214 <property name="sizePolicy">
215 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
216 <horstretch>0</horstretch>
217 <verstretch>0</verstretch>
218 </sizepolicy>
219 </property>
220 <property name="minimumSize">
221 <size>
222 <width>300</width>
223 <height>0</height>
224 </size>
225 </property>
226 <property name="maximumSize">
227 <size>
228 <width>300</width>
229 <height>16777215</height>
230 </size>
231 </property>
184 <property name="font">232 <property name="font">
185 <font>233 <font>
186 <pointsize>11</pointsize>234 <pointsize>11</pointsize>
@@ -198,11 +246,14 @@
198 <property name="placeholderText">246 <property name="placeholderText">
199 <string/>247 <string/>
200 </property>248 </property>
249 <property name="formError" stdset="0">
250 <bool>false</bool>
251 </property>
201 </widget>252 </widget>
202 </item>253 </item>
203 </layout>254 </layout>
204 </item>255 </item>
205 <item row="5" column="0">256 <item row="7" column="0">
206 <layout class="QVBoxLayout" name="verticalLayout">257 <layout class="QVBoxLayout" name="verticalLayout">
207 <property name="spacing">258 <property name="spacing">
208 <number>3</number>259 <number>3</number>
@@ -222,6 +273,24 @@
222 </item>273 </item>
223 <item>274 <item>
224 <widget class="QLineEdit" name="confirm_password_edit">275 <widget class="QLineEdit" name="confirm_password_edit">
276 <property name="sizePolicy">
277 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
278 <horstretch>0</horstretch>
279 <verstretch>0</verstretch>
280 </sizepolicy>
281 </property>
282 <property name="minimumSize">
283 <size>
284 <width>300</width>
285 <height>0</height>
286 </size>
287 </property>
288 <property name="maximumSize">
289 <size>
290 <width>300</width>
291 <height>16777215</height>
292 </size>
293 </property>
225 <property name="font">294 <property name="font">
226 <font>295 <font>
227 <pointsize>11</pointsize>296 <pointsize>11</pointsize>
@@ -233,21 +302,14 @@
233 <property name="placeholderText">302 <property name="placeholderText">
234 <string/>303 <string/>
235 </property>304 </property>
305 <property name="formError" stdset="0">
306 <bool>false</bool>
307 </property>
236 </widget>308 </widget>
237 </item>309 </item>
238 </layout>310 </layout>
239 </item>311 </item>
240 <item row="4" column="1" rowspan="2">312 <item row="8" column="0">
241 <widget class="QLabel" name="password_assistance">
242 <property name="text">
243 <string>password_assistance</string>
244 </property>
245 <property name="indent">
246 <number>20</number>
247 </property>
248 </widget>
249 </item>
250 <item row="6" column="0">
251 <layout class="QVBoxLayout" name="verticalLayout">313 <layout class="QVBoxLayout" name="verticalLayout">
252 <property name="spacing">314 <property name="spacing">
253 <number>3</number>315 <number>3</number>
@@ -255,7 +317,7 @@
255 <item>317 <item>
256 <widget class="QLabel" name="captcha_view">318 <widget class="QLabel" name="captcha_view">
257 <property name="sizePolicy">319 <property name="sizePolicy">
258 <sizepolicy hsizetype="Fixed" vsizetype="Fixed">320 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
259 <horstretch>0</horstretch>321 <horstretch>0</horstretch>
260 <verstretch>0</verstretch>322 <verstretch>0</verstretch>
261 </sizepolicy>323 </sizepolicy>
@@ -266,6 +328,12 @@
266 <height>57</height>328 <height>57</height>
267 </size>329 </size>
268 </property>330 </property>
331 <property name="maximumSize">
332 <size>
333 <width>300</width>
334 <height>16777215</height>
335 </size>
336 </property>
269 <property name="styleSheet">337 <property name="styleSheet">
270 <string notr="true">background-color: white</string>338 <string notr="true">background-color: white</string>
271 </property>339 </property>
@@ -279,6 +347,24 @@
279 </item>347 </item>
280 <item>348 <item>
281 <widget class="QLineEdit" name="captcha_solution_edit">349 <widget class="QLineEdit" name="captcha_solution_edit">
350 <property name="sizePolicy">
351 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
352 <horstretch>0</horstretch>
353 <verstretch>0</verstretch>
354 </sizepolicy>
355 </property>
356 <property name="minimumSize">
357 <size>
358 <width>300</width>
359 <height>0</height>
360 </size>
361 </property>
362 <property name="maximumSize">
363 <size>
364 <width>300</width>
365 <height>16777215</height>
366 </size>
367 </property>
282 <property name="font">368 <property name="font">
283 <font>369 <font>
284 <pointsize>11</pointsize>370 <pointsize>11</pointsize>
@@ -296,18 +382,27 @@
296 <property name="placeholderText">382 <property name="placeholderText">
297 <string/>383 <string/>
298 </property>384 </property>
385 <property name="formError" stdset="0">
386 <bool>false</bool>
387 </property>
299 </widget>388 </widget>
300 </item>389 </item>
301 </layout>390 </layout>
302 </item>391 </item>
303 <item row="6" column="1">392 <item row="8" column="1">
304 <widget class="QLabel" name="refresh_label">393 <widget class="QLabel" name="refresh_label">
305 <property name="sizePolicy">394 <property name="sizePolicy">
306 <sizepolicy hsizetype="Preferred" vsizetype="Preferred">395 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
307 <horstretch>0</horstretch>396 <horstretch>0</horstretch>
308 <verstretch>0</verstretch>397 <verstretch>0</verstretch>
309 </sizepolicy>398 </sizepolicy>
310 </property>399 </property>
400 <property name="maximumSize">
401 <size>
402 <width>300</width>
403 <height>16777215</height>
404 </size>
405 </property>
311 <property name="locale">406 <property name="locale">
312 <locale language="English" country="UnitedStates"/>407 <locale language="English" country="UnitedStates"/>
313 </property>408 </property>
@@ -322,6 +417,147 @@
322 </property>417 </property>
323 </widget>418 </widget>
324 </item>419 </item>
420 <item row="1" column="1">
421 <layout class="QVBoxLayout" name="verticalLayout_7">
422 <property name="leftMargin">
423 <number>10</number>
424 </property>
425 <item>
426 <widget class="QLabel" name="name_assistance">
427 <property name="sizePolicy">
428 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
429 <horstretch>0</horstretch>
430 <verstretch>0</verstretch>
431 </sizepolicy>
432 </property>
433 <property name="maximumSize">
434 <size>
435 <width>300</width>
436 <height>16777215</height>
437 </size>
438 </property>
439 <property name="text">
440 <string>name_assistance</string>
441 </property>
442 <property name="alignment">
443 <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
444 </property>
445 </widget>
446 </item>
447 </layout>
448 </item>
449 <item row="3" column="1">
450 <layout class="QVBoxLayout" name="verticalLayout_8">
451 <property name="leftMargin">
452 <number>10</number>
453 </property>
454 <item>
455 <widget class="QLabel" name="email_assistance">
456 <property name="sizePolicy">
457 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
458 <horstretch>0</horstretch>
459 <verstretch>0</verstretch>
460 </sizepolicy>
461 </property>
462 <property name="maximumSize">
463 <size>
464 <width>300</width>
465 <height>16777215</height>
466 </size>
467 </property>
468 <property name="text">
469 <string>email_assistance</string>
470 </property>
471 <property name="alignment">
472 <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
473 </property>
474 </widget>
475 </item>
476 </layout>
477 </item>
478 <item row="4" column="1">
479 <layout class="QVBoxLayout" name="verticalLayout_9">
480 <property name="leftMargin">
481 <number>10</number>
482 </property>
483 <item>
484 <widget class="QLabel" name="confirm_email_assistance">
485 <property name="sizePolicy">
486 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
487 <horstretch>0</horstretch>
488 <verstretch>0</verstretch>
489 </sizepolicy>
490 </property>
491 <property name="maximumSize">
492 <size>
493 <width>300</width>
494 <height>16777215</height>
495 </size>
496 </property>
497 <property name="text">
498 <string>confirm_email_assistance</string>
499 </property>
500 <property name="alignment">
501 <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
502 </property>
503 </widget>
504 </item>
505 </layout>
506 </item>
507 <item row="6" column="1" rowspan="2">
508 <widget class="QLabel" name="password_assistance">
509 <property name="sizePolicy">
510 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
511 <horstretch>0</horstretch>
512 <verstretch>0</verstretch>
513 </sizepolicy>
514 </property>
515 <property name="maximumSize">
516 <size>
517 <width>300</width>
518 <height>16777215</height>
519 </size>
520 </property>
521 <property name="text">
522 <string>password_assistance</string>
523 </property>
524 <property name="indent">
525 <number>20</number>
526 </property>
527 </widget>
528 </item>
529 <item row="2" column="1">
530 <spacer name="verticalSpacer">
531 <property name="orientation">
532 <enum>Qt::Vertical</enum>
533 </property>
534 <property name="sizeType">
535 <enum>QSizePolicy::Fixed</enum>
536 </property>
537 <property name="sizeHint" stdset="0">
538 <size>
539 <width>20</width>
540 <height>20</height>
541 </size>
542 </property>
543 </spacer>
544 </item>
545 <item row="5" column="1">
546 <spacer name="verticalSpacer_2">
547 <property name="orientation">
548 <enum>Qt::Vertical</enum>
549 </property>
550 <property name="sizeType">
551 <enum>QSizePolicy::Fixed</enum>
552 </property>
553 <property name="sizeHint" stdset="0">
554 <size>
555 <width>20</width>
556 <height>20</height>
557 </size>
558 </property>
559 </spacer>
560 </item>
325 </layout>561 </layout>
326 </item>562 </item>
327 <item>563 <item>
328564
=== modified file 'data/qt/ubuntuone.qss'
--- data/qt/ubuntuone.qss 2011-08-17 14:34:27 +0000
+++ data/qt/ubuntuone.qss 2011-08-22 14:08:26 +0000
@@ -18,9 +18,6 @@
18 background-color: white;18 background-color: white;
19}19}
2020
21QLabel#name_assistance,
22QLabel#email_assistance,
23QLabel#confirm_email_assistance,
24QLabel#password_assistance,21QLabel#password_assistance,
25QLabel#refresh_label{22QLabel#refresh_label{
26 border-image: url(":/balloon_shape.png");23 border-image: url(":/balloon_shape.png");
@@ -174,3 +171,11 @@
174 font: bold 14px;171 font: bold 14px;
175 color: #dd4814;172 color: #dd4814;
176}173}
174
175QLineEdit[formError="true"]{
176 background-color: #ffe5e5;
177}
178
179QLineEdit[formError="false"]{
180 background-color: white;
181}
177182
=== modified file 'ubuntuone_installer/gui/qt/setup_account.py'
--- ubuntuone_installer/gui/qt/setup_account.py 2011-08-08 21:48:11 +0000
+++ ubuntuone_installer/gui/qt/setup_account.py 2011-08-22 14:08:26 +0000
@@ -21,15 +21,17 @@
21import gettext21import gettext
22import re22import re
2323
24from PyQt4 import QtGui24from PyQt4 import QtGui, QtCore
2525
26from ubuntu_sso.qt import gui as sso_gui26from ubuntu_sso.qt import gui as sso_gui
2727
28_ = gettext.gettext28_ = gettext.gettext
2929
30# pylint: disable=C010330# pylint: disable=C0103
31BAD = u'<img src=":/password_hint_warning.png" /><font color="red"> %s </font>'31BAD = u'<img src=":/password_hint_warning.png" /><font> %s </font>'
32GOOD = u'<img src=":/password_hint_ok.png" /><font color="green"> %s </font>'32ERROR = u'<font color="#dd4814"><b> %s </b></font>'
33GOOD = u'<img src=":/password_hint_ok.png" /><font> %s </font>'
34NORMAL = u'<font> %s </font>'
33TITLE_STYLE = "<span style=\"font-size:24px\">%s</span>"35TITLE_STYLE = "<span style=\"font-size:24px\">%s</span>"
3436
35EMPTY_NAME = _("Please enter your name")37EMPTY_NAME = _("Please enter your name")
@@ -42,8 +44,19 @@
4244
4345
44class SetupAccountPage(sso_gui.SetupAccountPage):46class SetupAccountPage(sso_gui.SetupAccountPage):
47 """Customized Setup Account page for SSO."""
4548
46 """Customized Setup Account page for SSO"""49 def __init__(self, *args, **kwargs):
50 super(SetupAccountPage, self).__init__(*args, **kwargs)
51 self.ui.name_edit.textEdited.connect(self.name_assistance)
52 self.ui.email_edit.textEdited.connect(self.email_assistance)
53 self.ui.email_edit.textEdited.connect(self.confirm_email_assistance)
54 self.ui.confirm_email_edit.textEdited.connect(
55 self.confirm_email_assistance)
56 self.ui.password_edit.textEdited.connect(
57 lambda: self.password_assistance(NORMAL))
58 self.ui.confirm_password_edit.textEdited.connect(
59 self.password_assistance)
4760
48 # Invalid name "initializePage"61 # Invalid name "initializePage"
49 # pylint: disable=C010362 # pylint: disable=C0103
@@ -73,75 +86,107 @@
73 QtGui.QWizard.BackButton,86 QtGui.QWizard.BackButton,
74 QtGui.QWizard.Stretch])87 QtGui.QWizard.Stretch])
7588
76 self.ui.name_edit.textEdited.connect(self.name_assistance)89 self.password_default_assistance()
77 self.name_assistance()90 # Hide assistance labels by default
78 self.ui.email_edit.textEdited.connect(self.email_assistance)91 self.ui.name_assistance.setVisible(False)
79 self.ui.email_edit.textEdited.connect(self.confirm_email_assistance)92 self.ui.email_assistance.setVisible(False)
80 self.email_assistance()93 self.ui.confirm_email_assistance.setVisible(False)
81 self.ui.confirm_email_edit.textEdited.connect(94 self.ui.password_assistance.setVisible(False)
82 self.confirm_email_assistance)95 self.ui.refresh_label.setVisible(True)
83 self.confirm_email_assistance()96
84 self.ui.password_edit.textEdited.connect(self.password_assistance)97 def focus_changed(self, old, now):
85 self.ui.confirm_password_edit.textEdited.connect(98 """Check who has the focus to activate password popups if necessary."""
86 self.password_assistance)99 if now == self.ui.password_edit:
87 self.password_assistance()100 self.ui.password_assistance.setVisible(True)
101 elif old == self.ui.password_edit or \
102 now == self.ui.confirm_password_edit:
103 self.ui.password_assistance.setVisible(True)
104 self.password_assistance()
88105
89 def name_assistance(self):106 def name_assistance(self):
90 """Show help for the name field."""107 """Show help for the name field."""
91 text = unicode(self.ui.name_edit.text())108 text = unicode(self.ui.name_edit.text())
92 if not text.strip():109 if not text.strip():
93 self.ui.name_assistance.setVisible(True)110 self.ui.name_assistance.setVisible(True)
94 self.ui.name_assistance.setText(BAD % EMPTY_NAME)111 self.ui.name_assistance.setText(ERROR % EMPTY_NAME)
112 self.check_as_invalid(self.ui.name_edit)
95 else:113 else:
96 self.ui.name_assistance.setVisible(False)114 self.ui.name_assistance.setVisible(False)
115 self.check_as_valid(self.ui.name_edit)
97116
98 def email_assistance(self):117 def email_assistance(self):
99 """Show help for the email field."""118 """Show help for the email field."""
100 text = unicode(self.ui.email_edit.text())119 text = unicode(self.ui.email_edit.text())
101 if not is_correct_email(text):120 if not is_correct_email(text):
102 self.ui.email_assistance.setText(BAD % INVALID_EMAIL)121 self.ui.email_assistance.setText(ERROR % INVALID_EMAIL)
103 self.ui.email_assistance.setVisible(True)122 self.ui.email_assistance.setVisible(True)
123 self.check_as_invalid(self.ui.email_edit)
104 else:124 else:
105 self.ui.email_assistance.setVisible(False)125 self.ui.email_assistance.setVisible(False)
126 self.check_as_valid(self.ui.email_edit)
106127
107 def confirm_email_assistance(self):128 def confirm_email_assistance(self):
108 """Show help for the confirm email field."""129 """Show help for the confirm email field."""
109 text1 = unicode(self.ui.email_edit.text())130 text1 = unicode(self.ui.email_edit.text())
110 text2 = unicode(self.ui.confirm_email_edit.text())131 text2 = unicode(self.ui.confirm_email_edit.text())
111 if text1 != text2:132 if text1 != text2:
112 self.ui.confirm_email_assistance.setText(BAD % EMAIL_MATCH)133 self.ui.confirm_email_assistance.setText(ERROR % EMAIL_MATCH)
113 self.ui.confirm_email_assistance.setVisible(True)134 self.ui.confirm_email_assistance.setVisible(True)
135 self.check_as_invalid(self.ui.confirm_email_edit)
114 else:136 else:
115 self.ui.confirm_email_assistance.setVisible(False)137 self.ui.confirm_email_assistance.setVisible(False)
138 self.check_as_valid(self.ui.confirm_email_edit)
116139
117 def password_assistance(self):140 def password_assistance(self, icon_type=BAD):
118 """Show help for the password field."""141 """Show help for the password field."""
119 text1 = unicode(self.ui.password_edit.text())142 text1 = unicode(self.ui.password_edit.text())
120 text2 = unicode(self.ui.confirm_password_edit.text())143 text2 = unicode(self.ui.confirm_password_edit.text())
121 label_text = ["<b>%s</b>" % _("Your password must contain"), ]144 label_text = ["<b>%s</b>" % _("Your password must contain"), ]
122145
123 if len(text1) < 8:146 if len(text1) < 8:
124 sign = BAD147 sign = icon_type
125 else:148 else:
126 sign = GOOD149 sign = GOOD
127 label_text.append(sign % PASSWORD_LENGTH)150 label_text.append(sign % PASSWORD_LENGTH)
128151
129 if re.search('[A-Z]', text1) is None:152 if re.search('[A-Z]', text1) is None:
130 sign = BAD153 sign = icon_type
131 else:154 else:
132 sign = GOOD155 sign = GOOD
133 label_text.append(sign % PASSWORD_UPPER)156 label_text.append(sign % PASSWORD_UPPER)
134157
135 if re.search('[\d+]', text1) is None:158 if re.search('[\d+]', text1) is None:
136 sign = BAD159 sign = icon_type
137 else:160 else:
138 sign = GOOD161 sign = GOOD
139 label_text.append(sign % PASSWORD_DIGIT)162 label_text.append(sign % PASSWORD_DIGIT)
140163
141 if text1 != text2:164 if text1 != text2:
142 label_text.append(BAD % PASSWORD_MATCH)165 label_text.append(icon_type % PASSWORD_MATCH)
143166
144 self.ui.password_assistance.setText("<br>".join(label_text))167 self.ui.password_assistance.setText("<br>".join(label_text))
168
169 def password_default_assistance(self):
170 """Show default help for the password field."""
171 label_text = ["<b>%s</b>" % _("Your password must contain"), ]
172
173 label_text.append(NORMAL % PASSWORD_LENGTH)
174 label_text.append(NORMAL % PASSWORD_UPPER)
175 label_text.append(NORMAL % PASSWORD_DIGIT)
176
177 self.ui.password_assistance.setText("<br>".join(label_text))
178
179 def check_as_invalid(self, line_edit):
180 """Set QLineEdit's formError property as True, refresh the style."""
181 line_edit.setProperty("formError", True)
182 line_edit.style().unpolish(line_edit)
183 line_edit.style().polish(line_edit)
184
185 def check_as_valid(self, line_edit):
186 """Set QLineEdit's formError property as False, refresh the style."""
187 line_edit.setProperty("formError", False)
188 line_edit.style().unpolish(line_edit)
189 line_edit.style().polish(line_edit)
145190
146 def showEvent(self, event):191 def showEvent(self, event):
147 """Set set_up_button as default button when the page is shown."""192 """Set set_up_button as default button when the page is shown."""
@@ -151,6 +196,18 @@
151 self.ui.set_up_button.setProperty("DisabledState", True)196 self.ui.set_up_button.setProperty("DisabledState", True)
152 self.ui.set_up_button.style().unpolish(self.ui.set_up_button)197 self.ui.set_up_button.style().unpolish(self.ui.set_up_button)
153 self.ui.set_up_button.style().polish(self.ui.set_up_button)198 self.ui.set_up_button.style().polish(self.ui.set_up_button)
199 self.connect(QtGui.QApplication.instance(),
200 QtCore.SIGNAL("focusChanged(QWidget*, QWidget*)"),
201 self.focus_changed)
202
203 def hideEvent(self, event):
204 """Disconnect the focusChanged signal when the page change."""
205 try:
206 self.disconnect(QtGui.QApplication.instance(),
207 QtCore.SIGNAL("focusChanged(QWidget*, QWidget*)"),
208 self.focus_changed)
209 except TypeError:
210 pass
154211
155212
156def is_min_required_password(password):213def is_min_required_password(password):
157214
=== modified file 'ubuntuone_installer/gui/qt/tests/test_gui.py'
--- ubuntuone_installer/gui/qt/tests/test_gui.py 2011-08-17 13:34:23 +0000
+++ ubuntuone_installer/gui/qt/tests/test_gui.py 2011-08-22 14:08:26 +0000
@@ -371,8 +371,8 @@
371 gui.sys.frozen = True371 gui.sys.frozen = True
372 self.patch(gui.subprocess, "Popen", self._set_called)372 self.patch(gui.subprocess, "Popen", self._set_called)
373 self.ui.done(result=1)373 self.ui.done(result=1)
374 self.assertTrue(os.sep in self._called[0][0][0])374 self.assertIn(os.sep, self._called[0][0][0])
375 self.assertTrue('ubuntuone-control-panel-qt' in self._called[0][0][0])375 self.assertIn('ubuntuone-control-panel-qt', self._called[0][0][0])
376376
377 def test_not_start_control_panel_on_cancel(self):377 def test_not_start_control_panel_on_cancel(self):
378 """Called done with result=0, control panel should NOT be called."""378 """Called done with result=0, control panel should NOT be called."""
@@ -636,7 +636,7 @@
636 u"Space (1337)")636 u"Space (1337)")
637637
638 def test_add_twice(self):638 def test_add_twice(self):
639 """Behaviour for adding the same folder twice:639 """Behaviour for adding the same folder twice.
640640
641 * It's added only once.641 * It's added only once.
642 """642 """
@@ -649,7 +649,7 @@
649 self.assertEqual(1, self.ui.ui.folder_list.topLevelItemCount())649 self.assertEqual(1, self.ui.ui.folder_list.topLevelItemCount())
650650
651 def test_add_missing_folder(self):651 def test_add_missing_folder(self):
652 """Behaviour for adding a folder that doesn't exist:652 """Behaviour for adding a folder that doesn't exist.
653653
654 * It's added.654 * It's added.
655 * Has size 0.655 * Has size 0.
@@ -687,6 +687,21 @@
687 'see bug #824675 for reference.'687 'see bug #824675 for reference.'
688688
689689
690class FakeWizard(object):
691 """Replace wizard() function on wizard pages."""
692
693 params = None
694
695 # Invalid name "setButtonLayout"
696 # pylint: disable=C0103
697
698 def setButtonLayout(self, *args, **kwargs):
699 """Fake the functionality of setButtonLayout on QWizard class."""
700 FakeWizard.params = (args, kwargs)
701
702 # pylint: enable=C0103
703
704
690class SetupAccountTestCase(BaseTestCase):705class SetupAccountTestCase(BaseTestCase):
691 """Test the SetupAccountPage code."""706 """Test the SetupAccountPage code."""
692707
@@ -701,11 +716,37 @@
701 """Initialize this test instance."""716 """Initialize this test instance."""
702 super(SetupAccountTestCase, self).setUp()717 super(SetupAccountTestCase, self).setUp()
703718
719 def test_init(self):
720 """Check the initial state of SetupAccount."""
721 self.assertEqual(self.ui.ui.name_edit.receivers(
722 QtCore.SIGNAL('textEdited(QString)')), 1)
723 self.assertEqual(self.ui.ui.email_edit.receivers(
724 QtCore.SIGNAL('textEdited(QString)')), 2)
725 self.assertEqual(self.ui.ui.confirm_email_edit.receivers(
726 QtCore.SIGNAL('textEdited(QString)')), 1)
727 self.assertEqual(self.ui.ui.password_edit.receivers(
728 QtCore.SIGNAL('textEdited(QString)')), 1)
729 self.assertEqual(self.ui.ui.confirm_password_edit.receivers(
730 QtCore.SIGNAL('textEdited(QString)')), 1)
731
732 def test_initialize_page(self):
733 """Check the initializePage to ensure proper widgets visibility."""
734 self.ui.show()
735 self.patch(self.ui, 'wizard', FakeWizard)
736 self.ui.initializePage()
737 self.assertEqual(FakeWizard.params, (([
738 QtGui.QWizard.BackButton,
739 QtGui.QWizard.Stretch],), {}))
740 self.assertFalse(self.ui.ui.name_assistance.isVisible())
741 self.assertFalse(self.ui.ui.email_assistance.isVisible())
742 self.assertFalse(self.ui.ui.confirm_email_assistance.isVisible())
743 self.assertFalse(self.ui.ui.password_assistance.isVisible())
744
704 def test_empty_name(self):745 def test_empty_name(self):
705 """Status when the name field is empty:746 """Status when the name field is empty.
706747
707 * Name Assistance label visible748 * Name Assistance label visible.
708 * Correct error message in it749 * Correct error message in it.
709 """750 """
710 self.ui.ui.name_edit.setText("")751 self.ui.ui.name_edit.setText("")
711 self.ui.name_assistance()752 self.ui.name_assistance()
@@ -713,14 +754,14 @@
713 self.assertEqual(self.ui.ui.name_assistance.isVisible(), True)754 self.assertEqual(self.ui.ui.name_assistance.isVisible(), True)
714 self.assertEqual(755 self.assertEqual(
715 unicode(self.ui.ui.name_assistance.text()),756 unicode(self.ui.ui.name_assistance.text()),
716 setup_account.BAD % setup_account.EMPTY_NAME)757 setup_account.ERROR % setup_account.EMPTY_NAME)
717 self.ui.hide()758 self.ui.hide()
718759
719 def test_blank_name(self):760 def test_blank_name(self):
720 """Status when the name field is blank (spaces):761 """Status when the name field is blank (spaces).
721762
722 * Name Assistance label visible763 * Name Assistance label visible.
723 * Correct error message in it764 * Correct error message in it.
724 """765 """
725 self.ui.ui.name_edit.setText(" ")766 self.ui.ui.name_edit.setText(" ")
726 self.ui.name_assistance()767 self.ui.name_assistance()
@@ -728,13 +769,13 @@
728 self.assertEqual(self.ui.ui.name_assistance.isVisible(), True)769 self.assertEqual(self.ui.ui.name_assistance.isVisible(), True)
729 self.assertEqual(770 self.assertEqual(
730 unicode(self.ui.ui.name_assistance.text()),771 unicode(self.ui.ui.name_assistance.text()),
731 setup_account.BAD % setup_account.EMPTY_NAME)772 setup_account.ERROR % setup_account.EMPTY_NAME)
732 self.ui.hide()773 self.ui.hide()
733774
734 def test_valid_name(self):775 def test_valid_name(self):
735 """Status when the name field is valid:776 """Status when the name field is valid.
736777
737 * Name Assistance label invisible778 * Name Assistance label invisible.
738 """779 """
739 self.ui.ui.name_edit.setText("John Doe")780 self.ui.ui.name_edit.setText("John Doe")
740 self.ui.name_assistance()781 self.ui.name_assistance()
@@ -743,10 +784,10 @@
743 self.ui.hide()784 self.ui.hide()
744785
745 def test_invalid_email(self):786 def test_invalid_email(self):
746 """Status when the email field has no @:787 """Status when the email field has no @.
747788
748 * Email Assistance label visible789 * Email Assistance label visible.
749 * Correct error message in it790 * Correct error message in it.
750 """791 """
751 self.ui.ui.email_edit.setText("foobar")792 self.ui.ui.email_edit.setText("foobar")
752 self.ui.email_assistance()793 self.ui.email_assistance()
@@ -754,13 +795,13 @@
754 self.assertEqual(self.ui.ui.email_assistance.isVisible(), True)795 self.assertEqual(self.ui.ui.email_assistance.isVisible(), True)
755 self.assertEqual(796 self.assertEqual(
756 unicode(self.ui.ui.email_assistance.text()),797 unicode(self.ui.ui.email_assistance.text()),
757 setup_account.BAD % setup_account.INVALID_EMAIL)798 setup_account.ERROR % setup_account.INVALID_EMAIL)
758 self.ui.hide()799 self.ui.hide()
759800
760 def test_valid_email(self):801 def test_valid_email(self):
761 """Status when the email field has a @:802 """Status when the email field has a @.
762803
763 * Email Assistance label invisible804 * Email Assistance label invisible.
764 """805 """
765 self.ui.ui.email_edit.setText("foo@bar")806 self.ui.ui.email_edit.setText("foo@bar")
766 self.ui.email_assistance()807 self.ui.email_assistance()
@@ -769,9 +810,9 @@
769 self.ui.hide()810 self.ui.hide()
770811
771 def test_matching_emails(self):812 def test_matching_emails(self):
772 """Status when the email fields match:813 """Status when the email fields match.
773814
774 * Email Assistance label invisible815 * Email Assistance label invisible.
775 """816 """
776 self.ui.ui.email_edit.setText("foo@bar")817 self.ui.ui.email_edit.setText("foo@bar")
777 self.ui.ui.confirm_email_edit.setText("foo@bar")818 self.ui.ui.confirm_email_edit.setText("foo@bar")
@@ -782,10 +823,10 @@
782 self.ui.hide()823 self.ui.hide()
783824
784 def test_not_matching_emails(self):825 def test_not_matching_emails(self):
785 """Status when the email fields don't match:826 """Status when the email fields don't match.
786827
787 * Email Assistance label visible828 * Email Assistance label visible.
788 * Correct error message829 * Correct error message.
789 """830 """
790 self.ui.ui.email_edit.setText("foo@bar")831 self.ui.ui.email_edit.setText("foo@bar")
791 self.ui.ui.confirm_email_edit.setText("foo@baz")832 self.ui.ui.confirm_email_edit.setText("foo@baz")
@@ -794,112 +835,214 @@
794 self.assertEqual(self.ui.ui.confirm_email_assistance.isVisible(), True)835 self.assertEqual(self.ui.ui.confirm_email_assistance.isVisible(), True)
795 self.assertEqual(836 self.assertEqual(
796 unicode(self.ui.ui.confirm_email_assistance.text()),837 unicode(self.ui.ui.confirm_email_assistance.text()),
797 setup_account.BAD % setup_account.EMAIL_MATCH)838 setup_account.ERROR % setup_account.EMAIL_MATCH)
798 self.ui.hide()839 self.ui.hide()
799840
800 def test_short_password(self):841 def test_short_password(self):
801 """Status with short password:842 """Status with short password.
802843
803 * Password assistance contains the right message844 * Password assistance contains the right message.
804 """845 """
805 self.ui.ui.password_edit.setText("foobar")846 self.ui.ui.password_edit.setText("foobar")
806 self.ui.password_assistance()847 self.ui.password_assistance()
807 self.assertEqual(848 self.assertIn(
808 True,849 setup_account.BAD % setup_account.PASSWORD_LENGTH,
809 setup_account.BAD % setup_account.PASSWORD_LENGTH in
810 unicode(self.ui.ui.password_assistance.text()),850 unicode(self.ui.ui.password_assistance.text()),
811 )851 )
812852
813 def test_long_password(self):853 def test_long_password(self):
814 """Status with long password:854 """Status with long password.
815855
816 * Password assistance contains the right message856 * Password assistance contains the right message.
817 """857 """
818 self.ui.ui.password_edit.setText("foobarbaz")858 self.ui.ui.password_edit.setText("foobarbaz")
819 self.ui.password_assistance()859 self.ui.password_assistance()
820 self.assertEqual(860 self.assertIn(
821 True,861 setup_account.GOOD % setup_account.PASSWORD_LENGTH,
822 setup_account.GOOD % setup_account.PASSWORD_LENGTH in
823 unicode(self.ui.ui.password_assistance.text()),862 unicode(self.ui.ui.password_assistance.text()),
824 )863 )
825864
826 def test_no_number_password(self):865 def test_no_number_password(self):
827 """Status with password without a number:866 """Status with password without a number.
828867
829 * Password assistance contains the right message868 * Password assistance contains the right message.
830 """869 """
831 self.ui.ui.password_edit.setText("foobarbaz")870 self.ui.ui.password_edit.setText("foobarbaz")
832 self.ui.password_assistance()871 self.ui.password_assistance()
833 self.assertEqual(872 self.assertIn(
834 True,873 setup_account.BAD % setup_account.PASSWORD_DIGIT,
835 setup_account.BAD % setup_account.PASSWORD_DIGIT in
836 unicode(self.ui.ui.password_assistance.text()),874 unicode(self.ui.ui.password_assistance.text()),
837 )875 )
838876
839 def test_number_password(self):877 def test_number_password(self):
840 """Status with password with a number:878 """Status with password with a number.
841879
842 * Password assistance contains the right message880 * Password assistance contains the right message.
843 """881 """
844 self.ui.ui.password_edit.setText("foobarba7")882 self.ui.ui.password_edit.setText("foobarba7")
845 self.ui.password_assistance()883 self.ui.password_assistance()
846 self.assertEqual(884 self.assertIn(
847 True,885 setup_account.GOOD % setup_account.PASSWORD_DIGIT,
848 setup_account.GOOD % setup_account.PASSWORD_DIGIT in
849 unicode(self.ui.ui.password_assistance.text()),886 unicode(self.ui.ui.password_assistance.text()),
850 )887 )
851888
852 def test_no_uppercase_password(self):889 def test_no_uppercase_password(self):
853 """Status with password without uppercase letters:890 """Status with password without uppercase letters.
854891
855 * Password assistance contains the right message892 * Password assistance contains the right message.
856 """893 """
857 self.ui.ui.password_edit.setText("foobarbaz")894 self.ui.ui.password_edit.setText("foobarbaz")
858 self.ui.password_assistance()895 self.ui.password_assistance()
859 self.assertEqual(896 self.assertIn(
860 True,897 setup_account.BAD % setup_account.PASSWORD_UPPER,
861 setup_account.BAD % setup_account.PASSWORD_UPPER in
862 unicode(self.ui.ui.password_assistance.text()),898 unicode(self.ui.ui.password_assistance.text()),
863 )899 )
864900
865 def test_upper_password(self):901 def test_upper_password(self):
866 """Status with password with uppercase letters:902 """Status with password with uppercase letters.
867903
868 * Password assistance contains the right message904 * Password assistance contains the right message.
869 """905 """
870 self.ui.ui.password_edit.setText("Foobarba7")906 self.ui.ui.password_edit.setText("Foobarba7")
871 self.ui.password_assistance()907 self.ui.password_assistance()
872 self.assertEqual(908 self.assertIn(
873 True,909 setup_account.GOOD % setup_account.PASSWORD_UPPER,
874 setup_account.GOOD % setup_account.PASSWORD_UPPER in
875 unicode(self.ui.ui.password_assistance.text()),910 unicode(self.ui.ui.password_assistance.text()),
876 )911 )
877912
878 def test_matching_passwords(self):913 def test_matching_passwords(self):
879 """Status when the passwords match:914 """Status when the passwords match.
880915
881 * Password assistance doesn't contain the message916 * Password assistance doesn't contain the message.
882 """917 """
883 self.ui.ui.password_edit.setText("Foobarba7")918 self.ui.ui.password_edit.setText("Foobarba7")
884 self.ui.ui.confirm_password_edit.setText("Foobarba7")919 self.ui.ui.confirm_password_edit.setText("Foobarba7")
885 self.ui.password_assistance()920 self.ui.password_assistance()
886 self.assertEqual(921 self.assertNotIn(
887 False,922 setup_account.PASSWORD_MATCH,
888 setup_account.PASSWORD_MATCH in
889 unicode(self.ui.ui.password_assistance.text()),923 unicode(self.ui.ui.password_assistance.text()),
890 )924 )
891925
892 def test_not_matching_passwords(self):926 def test_not_matching_passwords(self):
893 """Status when the passwords not match:927 """Status when the passwords not match.
894928
895 * Password assistance contains the right message929 * Password assistance contains the right message.
896 """930 """
897 self.ui.ui.password_edit.setText("Foobarba7")931 self.ui.ui.password_edit.setText("Foobarba7")
898 self.ui.ui.confirm_password_edit.setText("BazBarFo0")932 self.ui.ui.confirm_password_edit.setText("BazBarFo0")
899 self.ui.password_assistance()933 self.ui.password_assistance()
900 self.assertEqual(934 self.assertIn(
901 True,935 setup_account.BAD % setup_account.PASSWORD_MATCH,
902 setup_account.BAD % setup_account.PASSWORD_MATCH in936 unicode(self.ui.ui.password_assistance.text()),
937 )
938
939 def test_password_default_assistance(self):
940 """Status when the password line edit receive focus and shows popup.
941
942 * Password assistance contains the right message.
943 """
944 self.ui.ui.password_edit.setText("")
945 self.ui.ui.confirm_password_edit.setText("")
946 self.ui.password_assistance()
947 self.ui.focus_changed(None, self.ui.ui.password_edit)
948 self.assertIn(
949 setup_account.NORMAL % setup_account.PASSWORD_LENGTH,
950 unicode(self.ui.ui.password_assistance.text()),
951 )
952 self.assertIn(
953 setup_account.NORMAL % setup_account.PASSWORD_UPPER,
954 unicode(self.ui.ui.password_assistance.text()),
955 )
956 self.assertIn(
957 setup_account.NORMAL % setup_account.PASSWORD_DIGIT,
958 unicode(self.ui.ui.password_assistance.text()),
959 )
960
961 def test_password_assistance_in_focus_length_correct(self):
962 """Check the QLineEdit for password when the length is correct."""
963 self.ui.ui.password_edit.setText("aaaaaaaaa")
964 self.ui.ui.confirm_password_edit.setText("")
965 self.ui.password_assistance(setup_account.NORMAL)
966 self.assertIn(
967 setup_account.GOOD % setup_account.PASSWORD_LENGTH,
968 unicode(self.ui.ui.password_assistance.text()),
969 )
970 self.assertIn(
971 setup_account.NORMAL % setup_account.PASSWORD_UPPER,
972 unicode(self.ui.ui.password_assistance.text()),
973 )
974 self.assertIn(
975 setup_account.NORMAL % setup_account.PASSWORD_DIGIT,
976 unicode(self.ui.ui.password_assistance.text()),
977 )
978 self.assertIn(
979 setup_account.NORMAL % setup_account.PASSWORD_MATCH,
980 unicode(self.ui.ui.password_assistance.text()),
981 )
982
983 def test_password_assistance_in_focus_with_upper(self):
984 """Check the QLineEdit for password when it has an upper case char."""
985 self.ui.ui.password_edit.setText("AAa")
986 self.ui.ui.confirm_password_edit.setText("")
987 self.ui.password_assistance(setup_account.NORMAL)
988 self.assertIn(
989 setup_account.NORMAL % setup_account.PASSWORD_LENGTH,
990 unicode(self.ui.ui.password_assistance.text()),
991 )
992 self.assertIn(
993 setup_account.GOOD % setup_account.PASSWORD_UPPER,
994 unicode(self.ui.ui.password_assistance.text()),
995 )
996 self.assertIn(
997 setup_account.NORMAL % setup_account.PASSWORD_DIGIT,
998 unicode(self.ui.ui.password_assistance.text()),
999 )
1000 self.assertIn(
1001 setup_account.NORMAL % setup_account.PASSWORD_MATCH,
1002 unicode(self.ui.ui.password_assistance.text()),
1003 )
1004
1005 def test_password_assistance_in_focus_with_number(self):
1006 """Check the QLineEdit for password when it contains numbers."""
1007 self.ui.ui.password_edit.setText("a123")
1008 self.ui.ui.confirm_password_edit.setText("")
1009 self.ui.password_assistance(setup_account.NORMAL)
1010 self.assertIn(
1011 setup_account.NORMAL % setup_account.PASSWORD_LENGTH,
1012 unicode(self.ui.ui.password_assistance.text()),
1013 )
1014 self.assertIn(
1015 setup_account.NORMAL % setup_account.PASSWORD_UPPER,
1016 unicode(self.ui.ui.password_assistance.text()),
1017 )
1018 self.assertIn(
1019 setup_account.GOOD % setup_account.PASSWORD_DIGIT,
1020 unicode(self.ui.ui.password_assistance.text()),
1021 )
1022 self.assertIn(
1023 setup_account.NORMAL % setup_account.PASSWORD_MATCH,
1024 unicode(self.ui.ui.password_assistance.text()),
1025 )
1026
1027 def test_password_assistance_in_focus_all_ok(self):
1028 """Check the QLineEdit for password when all the condition are ok."""
1029 self.ui.ui.password_edit.setText("T3st3rqw")
1030 self.ui.ui.confirm_password_edit.setText("T3st3rqw")
1031 self.ui.password_assistance(setup_account.NORMAL)
1032 self.assertIn(
1033 setup_account.GOOD % setup_account.PASSWORD_LENGTH,
1034 unicode(self.ui.ui.password_assistance.text()),
1035 )
1036 self.assertIn(
1037 setup_account.GOOD % setup_account.PASSWORD_UPPER,
1038 unicode(self.ui.ui.password_assistance.text()),
1039 )
1040 self.assertIn(
1041 setup_account.GOOD % setup_account.PASSWORD_DIGIT,
1042 unicode(self.ui.ui.password_assistance.text()),
1043 )
1044 self.assertNotIn(
1045 setup_account.NORMAL % setup_account.PASSWORD_MATCH,
903 unicode(self.ui.ui.password_assistance.text()),1046 unicode(self.ui.ui.password_assistance.text()),
904 )1047 )
9051048
@@ -924,6 +1067,26 @@
924 True,1067 True,
925 self.ui.sideWidget().ui.states_frame.isVisible())1068 self.ui.sideWidget().ui.states_frame.isVisible())
9261069
1070 def test_check_valid(self):
1071 """Check the propery value of a QLineEdit marked as valid."""
1072 self.ui.check_as_valid(self.ui.ui.name_edit)
1073 self.assertEqual(self.ui.ui.name_edit.property("formError"),
1074 False)
1075
1076 def test_check_invalid(self):
1077 """Check the propery value of a QLineEdit marked as invalid."""
1078 self.ui.check_as_invalid(self.ui.ui.name_edit)
1079 self.assertEqual(self.ui.ui.name_edit.property("formError"),
1080 True)
1081
1082 def test_focus_changed(self):
1083 """Check visibility changes when focus_changed() is executed."""
1084 self.ui.show()
1085 self.ui.focus_changed(None, self.ui.ui.password_edit)
1086 self.assertTrue(self.ui.ui.password_assistance.isVisible())
1087 self.ui.focus_changed(None, self.ui.ui.captcha_solution_edit)
1088 self.assertTrue(self.ui.ui.refresh_label.isVisible())
1089
9271090
928class FakeFailingCredentialsManagementTool(object):1091class FakeFailingCredentialsManagementTool(object):
9291092

Subscribers

People subscribed via source and target branches