File indexing completed on 2024-04-28 15:31:53
0001 /* 0002 SPDX-FileCopyrightText: 2015 Elvis Angelaccio <elvis.angelaccio@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "knewpasswordwidgettest.h" 0008 0009 #include <QAction> 0010 #include <QLineEdit> 0011 #include <QTest> 0012 0013 #include <KPasswordLineEdit> 0014 #include <knewpasswordwidget.h> 0015 0016 QTEST_MAIN(KNewPasswordWidgetTest) 0017 0018 void KNewPasswordWidgetTest::testEmptyPasswordAllowed() 0019 { 0020 KNewPasswordWidget pwdWidget; 0021 0022 QVERIFY(pwdWidget.allowEmptyPasswords()); 0023 QCOMPARE(pwdWidget.minimumPasswordLength(), 0); 0024 QCOMPARE(pwdWidget.passwordStatus(), KNewPasswordWidget::WeakPassword); 0025 } 0026 0027 void KNewPasswordWidgetTest::testEmptyPasswordNotAllowed() 0028 { 0029 KNewPasswordWidget pwdWidget; 0030 0031 pwdWidget.setAllowEmptyPasswords(false); 0032 0033 QVERIFY(!pwdWidget.allowEmptyPasswords()); 0034 QCOMPARE(pwdWidget.minimumPasswordLength(), 1); 0035 QCOMPARE(pwdWidget.passwordStatus(), KNewPasswordWidget::EmptyPasswordNotAllowed); 0036 } 0037 0038 void KNewPasswordWidgetTest::testPasswordTooShort() 0039 { 0040 KNewPasswordWidget pwdWidget; 0041 0042 pwdWidget.setMinimumPasswordLength(5); 0043 auto linePassword = pwdWidget.findChild<KPasswordLineEdit *>(QStringLiteral("linePassword")); 0044 auto lineVerifyPassword = pwdWidget.findChild<QLineEdit *>(QStringLiteral("lineVerifyPassword")); 0045 0046 QVERIFY(linePassword); 0047 QVERIFY(lineVerifyPassword); 0048 0049 const QString password = QStringLiteral("1234"); 0050 // We can't use setPassword here as when we call it for security we don't allow to show password. So we need to use setText 0051 linePassword->lineEdit()->setText(password); 0052 lineVerifyPassword->setText(password); 0053 0054 QCOMPARE(pwdWidget.passwordStatus(), KNewPasswordWidget::PasswordTooShort); 0055 } 0056 0057 void KNewPasswordWidgetTest::testPasswordMatch() 0058 { 0059 KNewPasswordWidget pwdWidget; 0060 0061 auto linePassword = pwdWidget.findChild<KPasswordLineEdit *>(QStringLiteral("linePassword")); 0062 auto lineVerifyPassword = pwdWidget.findChild<QLineEdit *>(QStringLiteral("lineVerifyPassword")); 0063 0064 QVERIFY(linePassword); 0065 QVERIFY(lineVerifyPassword); 0066 0067 const QString password = QStringLiteral("1234"); 0068 linePassword->lineEdit()->setText(password); 0069 lineVerifyPassword->setText(password); 0070 0071 QVERIFY(pwdWidget.passwordStatus() != KNewPasswordWidget::PasswordNotVerified); 0072 QCOMPARE(pwdWidget.password(), password); 0073 } 0074 0075 void KNewPasswordWidgetTest::testPasswordNotVerified() 0076 { 0077 KNewPasswordWidget pwdWidget; 0078 0079 auto linePassword = pwdWidget.findChild<KPasswordLineEdit *>(QStringLiteral("linePassword")); 0080 0081 QVERIFY(linePassword); 0082 0083 const QString password = QStringLiteral("1234"); 0084 linePassword->lineEdit()->setText(password); 0085 0086 QCOMPARE(pwdWidget.passwordStatus(), KNewPasswordWidget::PasswordNotVerified); 0087 } 0088 0089 void KNewPasswordWidgetTest::testWeakPassword() 0090 { 0091 KNewPasswordWidget pwdWidget; 0092 0093 pwdWidget.setPasswordStrengthWarningLevel(30); 0094 auto linePassword = pwdWidget.findChild<KPasswordLineEdit *>(QStringLiteral("linePassword")); 0095 auto lineVerifyPassword = pwdWidget.findChild<QLineEdit *>(QStringLiteral("lineVerifyPassword")); 0096 0097 QVERIFY(linePassword); 0098 QVERIFY(lineVerifyPassword); 0099 0100 const QString password = QStringLiteral("1234"); 0101 linePassword->lineEdit()->setText(password); 0102 lineVerifyPassword->setText(password); 0103 0104 QCOMPARE(pwdWidget.passwordStatus(), KNewPasswordWidget::WeakPassword); 0105 } 0106 0107 void KNewPasswordWidgetTest::testStrongPassword() 0108 { 0109 KNewPasswordWidget pwdWidget; 0110 0111 pwdWidget.setPasswordStrengthWarningLevel(99); 0112 auto linePassword = pwdWidget.findChild<KPasswordLineEdit *>(QStringLiteral("linePassword")); 0113 auto lineVerifyPassword = pwdWidget.findChild<QLineEdit *>(QStringLiteral("lineVerifyPassword")); 0114 0115 QVERIFY(linePassword); 0116 QVERIFY(lineVerifyPassword); 0117 0118 const auto password = QStringLiteral("DHlKOJ1GotXWVE_fnqm1"); // generated by KeePass 0119 linePassword->lineEdit()->setText(password); 0120 lineVerifyPassword->setText(password); 0121 0122 QCOMPARE(pwdWidget.passwordStatus(), KNewPasswordWidget::StrongPassword); 0123 } 0124 0125 void KNewPasswordWidgetTest::testReasonablePasswordLength() 0126 { 0127 KNewPasswordWidget pwdWidget; 0128 0129 pwdWidget.setReasonablePasswordLength(10); 0130 QCOMPARE(pwdWidget.reasonablePasswordLength(), 10); 0131 0132 pwdWidget.setReasonablePasswordLength(0); 0133 QCOMPARE(pwdWidget.reasonablePasswordLength(), 1); 0134 0135 pwdWidget.setReasonablePasswordLength(pwdWidget.maximumPasswordLength() + 1); 0136 QCOMPARE(pwdWidget.reasonablePasswordLength(), pwdWidget.maximumPasswordLength()); 0137 } 0138 0139 void KNewPasswordWidgetTest::testPasswordStrengthWarningLevel() 0140 { 0141 KNewPasswordWidget pwdWidget; 0142 0143 pwdWidget.setPasswordStrengthWarningLevel(40); 0144 QCOMPARE(pwdWidget.passwordStrengthWarningLevel(), 40); 0145 0146 pwdWidget.setPasswordStrengthWarningLevel(-1); 0147 QCOMPARE(pwdWidget.passwordStrengthWarningLevel(), 0); 0148 0149 pwdWidget.setPasswordStrengthWarningLevel(100); 0150 QCOMPARE(pwdWidget.passwordStrengthWarningLevel(), 99); 0151 } 0152 0153 void KNewPasswordWidgetTest::testNoWarningColorBeforeMismatch() 0154 { 0155 KNewPasswordWidget pwdWidget; 0156 QColor defaultColor = pwdWidget.palette().color(QPalette::Base); 0157 QColor warningColor(Qt::red); 0158 0159 pwdWidget.setBackgroundWarningColor(warningColor); 0160 0161 auto linePassword = pwdWidget.findChild<KPasswordLineEdit *>(QStringLiteral("linePassword")); 0162 auto lineVerifyPassword = pwdWidget.findChild<QLineEdit *>(QStringLiteral("lineVerifyPassword")); 0163 0164 QVERIFY(linePassword); 0165 QVERIFY(lineVerifyPassword); 0166 0167 linePassword->lineEdit()->setText(QStringLiteral("1234")); 0168 QCOMPARE(lineVerifyPassword->palette().color(QPalette::Base), defaultColor); 0169 0170 lineVerifyPassword->setText(QStringLiteral("12")); 0171 QCOMPARE(lineVerifyPassword->palette().color(QPalette::Base), defaultColor); 0172 } 0173 0174 void KNewPasswordWidgetTest::testWarningColorIfMismatch() 0175 { 0176 KNewPasswordWidget pwdWidget; 0177 QColor defaultColor = pwdWidget.palette().color(QPalette::Base); 0178 QColor warningColor(Qt::red); 0179 0180 pwdWidget.setBackgroundWarningColor(warningColor); 0181 0182 auto linePassword = pwdWidget.findChild<KPasswordLineEdit *>(QStringLiteral("linePassword")); 0183 auto lineVerifyPassword = pwdWidget.findChild<QLineEdit *>(QStringLiteral("lineVerifyPassword")); 0184 0185 QVERIFY(linePassword); 0186 QVERIFY(lineVerifyPassword); 0187 0188 linePassword->lineEdit()->setText(QStringLiteral("1234")); 0189 QCOMPARE(lineVerifyPassword->palette().color(QPalette::Base), defaultColor); 0190 0191 lineVerifyPassword->setText(QStringLiteral("122")); 0192 QCOMPARE(lineVerifyPassword->palette().color(QPalette::Base), warningColor); 0193 0194 lineVerifyPassword->setText(QStringLiteral("1224")); 0195 QCOMPARE(lineVerifyPassword->palette().color(QPalette::Base), warningColor); 0196 } 0197 0198 void KNewPasswordWidgetTest::testWarningColorPostMatch() 0199 { 0200 KNewPasswordWidget pwdWidget; 0201 QColor defaultColor = pwdWidget.palette().color(QPalette::Base); 0202 QColor warningColor(Qt::red); 0203 0204 pwdWidget.setBackgroundWarningColor(warningColor); 0205 0206 auto linePassword = pwdWidget.findChild<KPasswordLineEdit *>(QStringLiteral("linePassword")); 0207 auto lineVerifyPassword = pwdWidget.findChild<QLineEdit *>(QStringLiteral("lineVerifyPassword")); 0208 0209 QVERIFY(linePassword); 0210 QVERIFY(lineVerifyPassword); 0211 0212 linePassword->lineEdit()->setText(QStringLiteral("1234")); 0213 lineVerifyPassword->setText(QStringLiteral("1234")); 0214 QCOMPARE(lineVerifyPassword->palette().color(QPalette::Base), defaultColor); 0215 0216 lineVerifyPassword->setText(QStringLiteral("12345")); 0217 QCOMPARE(lineVerifyPassword->palette().color(QPalette::Base), warningColor); 0218 } 0219 0220 void KNewPasswordWidgetTest::disablingWidgetShouldUseDisabledPalette() 0221 { 0222 KNewPasswordWidget pwdWidget; 0223 0224 auto linePassword = pwdWidget.findChild<KPasswordLineEdit *>(QStringLiteral("linePassword")); 0225 auto lineVerifyPassword = pwdWidget.findChild<QLineEdit *>(QStringLiteral("lineVerifyPassword")); 0226 0227 QVERIFY(linePassword && linePassword->isEnabled()); 0228 QVERIFY(lineVerifyPassword && lineVerifyPassword->isEnabled()); 0229 0230 pwdWidget.setEnabled(false); 0231 0232 QVERIFY(!linePassword->isEnabled()); 0233 QVERIFY(!lineVerifyPassword->isEnabled()); 0234 0235 QCOMPARE(linePassword->palette(), pwdWidget.palette()); 0236 QCOMPARE(lineVerifyPassword->palette(), pwdWidget.palette()); 0237 } 0238 0239 void KNewPasswordWidgetTest::disablingParentShouldUseDisabledPalette() 0240 { 0241 auto widget = new QWidget(); 0242 widget->setEnabled(false); 0243 0244 auto pwdWidget = new KNewPasswordWidget(widget); 0245 QVERIFY(!pwdWidget->isEnabled()); 0246 0247 auto linePassword = pwdWidget->findChild<KPasswordLineEdit *>(QStringLiteral("linePassword")); 0248 auto lineVerifyPassword = pwdWidget->findChild<QLineEdit *>(QStringLiteral("lineVerifyPassword")); 0249 0250 QVERIFY(linePassword && !linePassword->isEnabled()); 0251 QVERIFY(lineVerifyPassword && !lineVerifyPassword->isEnabled()); 0252 0253 QCOMPARE(linePassword->palette(), widget->palette()); 0254 QCOMPARE(lineVerifyPassword->palette(), widget->palette()); 0255 0256 delete widget; 0257 } 0258 0259 void KNewPasswordWidgetTest::disablingRevealPasswordShouldHideVisibilityAction() 0260 { 0261 KNewPasswordWidget pwdWidget; 0262 0263 auto linePassword = pwdWidget.findChild<KPasswordLineEdit *>(QStringLiteral("linePassword")); 0264 QVERIFY(linePassword); 0265 0266 auto visibilityAction = linePassword->findChild<QAction *>(QStringLiteral("visibilityAction")); 0267 QVERIFY(visibilityAction && !visibilityAction->isVisible()); 0268 0269 linePassword->lineEdit()->setText(QStringLiteral("1234")); 0270 QVERIFY(visibilityAction->isVisible()); 0271 QCOMPARE(pwdWidget.isRevealPasswordAvailable(), visibilityAction->isVisible()); 0272 0273 pwdWidget.setRevealPasswordAvailable(false); 0274 QVERIFY(!visibilityAction->isVisible()); 0275 QCOMPARE(pwdWidget.isRevealPasswordAvailable(), visibilityAction->isVisible()); 0276 } 0277 0278 void KNewPasswordWidgetTest::shouldNotHideVisibilityActionInPlaintextMode() 0279 { 0280 KNewPasswordWidget pwdWidget; 0281 0282 auto linePassword = pwdWidget.findChild<KPasswordLineEdit *>(QStringLiteral("linePassword")); 0283 QVERIFY(linePassword); 0284 0285 auto visibilityAction = linePassword->findChild<QAction *>(QStringLiteral("visibilityAction")); 0286 QVERIFY(visibilityAction && !visibilityAction->isVisible()); 0287 0288 linePassword->lineEdit()->setText(QStringLiteral("1234")); 0289 QVERIFY(visibilityAction->isVisible()); 0290 0291 visibilityAction->trigger(); 0292 linePassword->clear(); 0293 QVERIFY(visibilityAction->isVisible()); 0294 } 0295 0296 void KNewPasswordWidgetTest::shouldHideVerificationLineEditInPlaintextMode() 0297 { 0298 KNewPasswordWidget pwdWidget; 0299 pwdWidget.show(); 0300 0301 auto linePassword = pwdWidget.findChild<KPasswordLineEdit *>(QStringLiteral("linePassword")); 0302 auto lineVerifyPassword = pwdWidget.findChild<QLineEdit *>(QStringLiteral("lineVerifyPassword")); 0303 QVERIFY(linePassword); 0304 QVERIFY(lineVerifyPassword && lineVerifyPassword->isVisible()); 0305 0306 auto visibilityAction = linePassword->findChild<QAction *>(QStringLiteral("visibilityAction")); 0307 QVERIFY(visibilityAction); 0308 0309 linePassword->lineEdit()->setText(QStringLiteral("1234")); 0310 visibilityAction->trigger(); 0311 QVERIFY(!lineVerifyPassword->isVisible()); 0312 } 0313 0314 #include "moc_knewpasswordwidgettest.cpp"