Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Steur <tsteur@users.noreply.github.com>2019-05-09 01:26:39 +0300
committerdiosmosis <diosmosis@users.noreply.github.com>2019-05-09 01:26:39 +0300
commit76e60590f486f33a38e7ea08bf941fa57ac904c5 (patch)
tree695bafa55fcd74d79322ed3885e90c4a17ff3e01 /plugins/TwoFactorAuth
parent461a48e6d7050f73b1c25db98b6f96cff86bd043 (diff)
Switch UI tests from phantomjs to chrome headless (#14421)
* Make sure xss entries is always an array. * Update expected test files and submodule. * Regenerate broken omnifixture dump. * poc conversion to chrome headless for UI tests, single test works locally * Get single test to pass on travis & local w/ headless chrome. * Remove old diff viewer generation, and get output to look the same as before when there is a failure. * Add global timeout & get ViewDataTableTest to pass. * Convert BarGraph_spec.js. * Convert EmptySite_spec. * Update EvolutionGraph spec for chrome headless. * Convert GoalsTable test & find/replace for common changes. * Convert MeasurableManager. * Another find & replace. * Get Menus/OptOutForm to pass w/ chrome headless * Convert PeriodSelector, PieGraph & PivotByDimension UI tests. * undo unrelated debugging change * Convert QuickAccess UI tests * Converts ActionsDataTable UI tests * reset viewport after each testsuite * Converts RowEvolution UI tests * Converts Theme UI tests * Converts SiteSelector UI tests * Converts CustomVariables UI test * Converts DBStats UI test * Ignore empty responses when calling api/controller * Converts Dashboard UI tests * Converts Live UI tests * Converts SimpleUI tests * Converts Installation UI tests * Converts ImageGraph UI tests * Converts Login UI tests * Converts Marketplace UI tests * Converts Insights UI tests * Converts ReportExporting UI tests * Converts UIIntegration tests * Updates ViewDataTable UI tests * Converts CoreUpdater UI tests * Converts UsersManager UI tests * Converts Morpheus UI tests * Converts MultiSites UI tests * Fix testEnvironment.callApi handling of array parameters * Converts Overlay UI tests * Converts PrivacyManager UI tests * Converts ScheduledReports UI tests * Converts SegmentEditor UI tests * compare pixel difference in images * Converts PeriodSelector UI tests * allow a pixel difference * Converts SingleMetricView UI tests * Converts SitesManager UI tests * Converts Transitions UI tests * Converts MeasurableManager UI tests * Move Mouse out of screen after each test suite * Converts PieGraph UI tests * Ensure cursor is not shown in focused input elements * Converts VisitorMap UI tests * Converts CustomLogo UI tests * Converts BarGraph UI tests * Converts EvolutionGraph UI tests * Converts IntranetMeasurable UI tests * Converts TrackingFailures UI tests * Converts CampaignBuilder UI tests * Converts TagManagerTeaser UI tests * fix request url rewrite for changed port * Converts TwoFactorAuth UI tests * do not print full responses in logs, but size instead * improve additional style injection * use submodule branches * fix request interception * update dependencies * [TEMP] disable dangerous link checks * [TEMP] limit tests * Use puppeteer@next and make sure diffs get uploaded properly. * Use correct fs function. * Allow timeout to be specified on command line for UI tests and debug console logs. * timeout option tweak * Setup diff dir once before running tests not before each suite. * fix last commit * Update screenshots and fix some specs. * Convert some tests that were not converted during merge. * updating screenshots * Updating screenshots and fixing some tests. * more test fixes * couple more test fixes * More test fixes and plugin updates. * wait for jquery * Fix some screenshots and tests. * more test fixes * debug travis test failure * remove .only * more test fixes and updated expected files * another test fixing iteration * typo * another quick test change * more tests updates * Test fixes and & more debugging. * more debugging and test fixes * more fixes and debugging. * remove .only * Another round of fixed tests. * more debugging & fixes * more test changes * more debugging and fixes * Fixing more tests + some bug fixes. * Couple more fixes. * Couple more fixes. * Fixing tracking failures test * more fixes * Last couple fixes hopefully. * couple more test fixes * more fixes, bug fix in usersmanager, some test updates * Some more test fixes/changes. * more and more fixes * hoping for a green build * Do not compare against existing files in dashboard_spec. * more fixes, re-enabling travis * really re-enable travis * Install puppeteer on travis-ci. * more fixes * try to fix random failues * remove return * Convert some login tests I forgot and update UsersManager expected file * Fix test for primary key update * Update AddPrimaryKey.php * More test fixes + implement synchronous comparison threshold (so no resemblejs) * More wait fixes + reset token detection fix. * couple more fixes * Fix login/overlay screenshot issue & magick command running issue. * identify is the executable on travis (hopefully) + fix some random failures * Another run. * Last fix. * two more tweaks * typo
Diffstat (limited to 'plugins/TwoFactorAuth')
-rw-r--r--plugins/TwoFactorAuth/tests/UI/TwoFactorAuthUsersManager_spec.js66
-rw-r--r--plugins/TwoFactorAuth/tests/UI/TwoFactorAuth_spec.js244
-rw-r--r--plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_edit_with_2fa.png4
-rw-r--r--plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_edit_with_2fa_reset_confirm.png4
-rw-r--r--plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_edit_with_2fa_reset_confirmed.png4
-rw-r--r--plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_list.png4
-rw-r--r--plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_logme_not_verified.png4
-rw-r--r--plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_logme_not_verified_wrong_code.png4
-rw-r--r--plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_show_recovery_codes_step1.png4
-rw-r--r--plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_usersettings_twofa_enabled.png4
-rw-r--r--plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_widgetized_no_verify.png4
11 files changed, 158 insertions, 188 deletions
diff --git a/plugins/TwoFactorAuth/tests/UI/TwoFactorAuthUsersManager_spec.js b/plugins/TwoFactorAuth/tests/UI/TwoFactorAuthUsersManager_spec.js
index e39348caab..4e07f7cc97 100644
--- a/plugins/TwoFactorAuth/tests/UI/TwoFactorAuthUsersManager_spec.js
+++ b/plugins/TwoFactorAuth/tests/UI/TwoFactorAuthUsersManager_spec.js
@@ -20,57 +20,37 @@ describe("TwoFactorAuthUsersManager", function () {
testEnvironment.save();
});
-
- function selectModalButton(page, button)
- {
- page.click('.modal.open .modal-footer a:contains('+button+')');
- }
-
- function captureModal(done, screenshotName, test, selector) {
- captureScreen(done, screenshotName, test, '.modal.open');
- }
-
- function captureScreen(done, screenshotName, test, selector) {
- if (!selector) {
- selector = '#content,#notificationContainer';
- }
-
- expect.screenshot(screenshotName).to.be.captureSelector(selector, test, done);
- }
-
- function captureModal(done, screenshotName, test, selector) {
- captureScreen(done, screenshotName, test, '.modal.open');
- }
-
- it('shows users with 2fa and not 2fa', function (done) {
- captureScreen(done, 'list', function (page) {
- page.load(usersManager);
- page.evaluate(function () {
- $('td#last_seen').html(''); // fix random test failure
- });
+ it('shows users with 2fa and not 2fa', async function () {
+ await page.goto(usersManager);
+ await page.evaluate(function () {
+ $('td#last_seen').html(''); // fix random test failure
});
+ expect(await page.screenshotSelector('#content,#notificationContainer')).to.matchImage('list');
});
- it('menu should show 2fa tab', function (done) {
- captureScreen(done, 'edit_with_2fa', function (page) {
- page.setViewportSize(1250);
- page.click('#manageUsersTable #row2 .edituser');
- page.evaluate(function () {
- $('.userEditForm .menuUserTwoFa a').click();
- });
+ it('menu should show 2fa tab', async function () {
+ await page.webpage.setViewport({
+ width: 1250,
+ height: 768
+ });
+ await page.click('#manageUsersTable #row2 .edituser');
+ await page.evaluate(function () {
+ $('.userEditForm .menuUserTwoFa a').click();
});
+ expect(await page.screenshotSelector('#content,#notificationContainer')).to.matchImage('edit_with_2fa');
});
- it('should ask for confirmation before resetting 2fa', function (done) {
- captureModal(done, 'edit_with_2fa_reset_confirm', function (page) {
- page.click('.userEditForm .twofa-reset .resetTwoFa .btn');
- });
+ it('should ask for confirmation before resetting 2fa', async function () {
+ await page.click('.userEditForm .twofa-reset .resetTwoFa .btn');
+ await page.waitFor(500);
+ const modal = await page.$('.modal.open');
+ expect(await modal.screenshot()).to.matchImage('edit_with_2fa_reset_confirm');
});
- it('should be possible to confirm the reset', function (done) {
- captureScreen(done, 'edit_with_2fa_reset_confirmed', function (page) {
- page.click('.twofa-confirm-modal .modal-close:not(.modal-no)');
- });
+ it('should be possible to confirm the reset', async function () {
+ await page.click('.twofa-confirm-modal .modal-close:not(.modal-no)');
+ await page.waitFor(250); // wait for modal to close
+ expect(await page.screenshotSelector('#content,#notificationContainer')).to.matchImage('edit_with_2fa_reset_confirmed');
});
}); \ No newline at end of file
diff --git a/plugins/TwoFactorAuth/tests/UI/TwoFactorAuth_spec.js b/plugins/TwoFactorAuth/tests/UI/TwoFactorAuth_spec.js
index 259c9ba713..5e216d793d 100644
--- a/plugins/TwoFactorAuth/tests/UI/TwoFactorAuth_spec.js
+++ b/plugins/TwoFactorAuth/tests/UI/TwoFactorAuth_spec.js
@@ -17,15 +17,15 @@ describe("TwoFactorAuth", function () {
logoutUrl = '?module=Login&action=logout&period=day&date=yesterday';
- function selectModalButton(page, button)
+ async function selectModalButton(button)
{
- page.click('.modal.open .modal-footer a:contains('+button+')');
+ await page.click('.modal.open .modal-footer a:contains('+button+')');
}
- function loginUser(page, username, doAuth)
+ async function loginUser(username, doAuth)
{
// make sure to log out previous session
- page.load(logoutUrl);
+ await page.goto(logoutUrl);
if (typeof doAuth === 'undefined') {
doAuth = true;
@@ -34,8 +34,8 @@ describe("TwoFactorAuth", function () {
if (doAuth) {
logMeUrl += '&authCode=123456'; // we make sure in test config this code always works
}
- page.wait(1000);
- page.load(logMeUrl);
+ await page.waitFor(1000);
+ await page.goto(logMeUrl);
}
function requireTwoFa() {
@@ -68,169 +68,159 @@ describe("TwoFactorAuth", function () {
testEnvironment.save();
});
- function confirmPassword(page)
+ async function confirmPassword()
{
- page.wait(1000);
- page.sendKeys('.confirmPasswordForm #login_form_password', '123abcDk3_l3');
- page.click('.confirmPasswordForm #login_form_submit');
- }
-
- function captureScreen(done, screenshotName, test, selector) {
- if (!selector) {
- selector = '.loginSection,#content,#notificationContainer';
- }
-
- expect.screenshot(screenshotName).to.be.captureSelector(selector, test, done);
- }
-
- function captureUserSettings(done, screenshotName, test, selector) {
- captureScreen(done, screenshotName, test, '.userSettings2FA');
- }
-
- function captureModal(done, screenshotName, test, selector) {
- captureScreen(done, screenshotName, test, '.modal.open');
+ await page.evaluate(function(){
+ $('.confirmPasswordForm #login_form_password').val('123abcDk3_l3');
+ $('.confirmPasswordForm #login_form_submit').click();
+ });
+ await page.waitFor(750);
}
- it('a user with 2fa can open the widgetized view by token without needing to verify', function (done) {
- captureScreen(done, 'widgetized_no_verify', function (page) {
- page.load('?module=Widgetize&action=iframe&moduleToWidgetize=Actions&actionToWidgetize=getPageUrls&date=2018-03-04&token_auth=c4ca4238a0b923820dcc509a6f75849b&' + generalParams);
- });
+ it('a user with 2fa can open the widgetized view by token without needing to verify', async function () {
+ await page.goto('?module=Widgetize&action=iframe&moduleToWidgetize=Actions&actionToWidgetize=getPageUrls&date=2018-03-04&token_auth=c4ca4238a0b923820dcc509a6f75849b&' + generalParams);
+ expect(await page.screenshotSelector('.widget')).to.matchImage('widgetized_no_verify');
});
- it('when logging in through logme and not providing auth code it should show auth code screen', function (done) {
- captureScreen(done, 'logme_not_verified', function (page) {
- loginUser(page, 'with2FA', false);
+ it('when logging in through logme and not providing auth code it should show auth code screen', async function () {
+ await loginUser('with2FA', false);
+ expect(await page.screenshotSelector('.loginSection')).to.matchImage('logme_not_verified');
+ });
+return;
+ it('when logging in and providing wrong code an error is shown', async function () {
+ await page.type('.loginTwoFaForm #login_form_authcode', '555555');
+ await page.evaluate(function(){
+ $('.loginTwoFaForm #login_form_submit').click();
});
+ await page.waitForNetworkIdle();
+ expect(await page.screenshotSelector('.loginSection')).to.matchImage('logme_not_verified_wrong_code');
});
- it('when logging in and providing wrong code an error is shown', function (done) {
- captureScreen(done, 'logme_not_verified_wrong_code', function (page) {
- page.sendKeys('.loginTwoFaForm #login_form_authcode', '555555');
- page.click('.loginTwoFaForm #login_form_submit');
+ it('when logging in through logme and verifying screen it works to access ui', async function () {
+ await page.type('.loginTwoFaForm #login_form_authcode', '123456');
+ await page.evaluate(function(){
+ $('.loginTwoFaForm #login_form_submit').click();
});
+ await page.waitFor(1500);
+ expect(await page.screenshotSelector('#content')).to.matchImage('logme_verified');
});
- it('when logging in through logme and verifying screen it works to access ui', function (done) {
- captureScreen(done, 'logme_verified', function (page) {
- page.sendKeys('.loginTwoFaForm #login_form_authcode', '123456');
- page.click('.loginTwoFaForm #login_form_submit');
- });
+ it('should show user settings when two-fa enabled', async function () {
+ await loginUser('with2FA');
+ await page.goto(userSettings);
+ expect(await page.screenshotSelector('.userSettings2FA')).to.matchImage('usersettings_twofa_enabled');
});
- it('should show user settings when two-fa enabled', function (done) {
- captureUserSettings(done, 'usersettings_twofa_enabled', function (page) {
- loginUser(page, 'with2FA');
- page.load(userSettings);
- });
+ it('should be possible to show recovery codes step1 authentication', async function () {
+ await page.click('.showRecoveryCodesLink');
+ await page.waitForNetworkIdle();
+ expect(await page.screenshotSelector('.loginSection')).to.matchImage('show_recovery_codes_step1');
});
- it('should be possible to show recovery codes step1 authentication', function (done) {
- captureScreen(done, 'show_recovery_codes_step1', function (page) {
- page.click('.showRecoveryCodesLink');
- });
+ it('should be possible to show recovery codes step2 done', async function () {
+ await confirmPassword();
+ await page.waitForNetworkIdle();
+ expect(await page.screenshotSelector('#content')).to.matchImage('show_recovery_codes_step2');
});
- it('should be possible to show recovery codes step2 done', function (done) {
- captureScreen(done, 'show_recovery_codes_step2', function (page) {
- confirmPassword(page);
- });
+
+ it('should show user settings when two-fa enabled', async function () {
+ requireTwoFa();
+ await page.goto(userSettings);
+ expect(await page.screenshotSelector('.userSettings2FA')).to.matchImage('usersettings_twofa_enabled_required');
});
- it('should show user settings when two-fa enabled', function (done) {
- captureUserSettings(done, 'usersettings_twofa_enabled_required', function (page) {
- requireTwoFa();
- page.load(userSettings);
- });
+ it('should be possible to disable two factor', async function () {
+ await loginUser('with2FADisable');
+ await page.goto(userSettings);
+ await page.click('.disable2FaLink');
+
+ const modal = await page.$('.modal.open');
+ expect(await modal.screenshot()).to.matchImage('usersettings_twofa_disable_step1');
});
- it('should be possible to disable two factor', function (done) {
- captureModal(done, 'usersettings_twofa_disable_step1', function (page) {
- loginUser(page, 'with2FADisable');
- page.load(userSettings);
- page.click('.disable2FaLink');
- });
+ it('should be possible to disable two factor step 2 confirmed', async function () {
+ await selectModalButton('Yes');
+ expect(await page.screenshotSelector('.loginSection')).to.matchImage('usersettings_twofa_disable_step2');
});
- it('should be possible to disable two factor step 2 confirmed', function (done) {
- captureScreen(done, 'usersettings_twofa_disable_step2', function (page) {
- selectModalButton(page, 'Yes');
- });
+ it('should be possible to disable two factor step 3 verified', async function () {
+ await confirmPassword();
+ expect(await page.screenshotSelector('.userSettings2FA')).to.matchImage('usersettings_twofa_disable_step3');
});
- it('should be possible to disable two factor step 3 verified', function (done) {
- captureUserSettings(done, 'usersettings_twofa_disable_step3', function (page) {
- confirmPassword(page);
- });
+ it('should show setup screen - step 1', async function () {
+ await loginUser('without2FA');
+ await page.goto(userSettings);
+ await page.click('.enable2FaLink');
+ await confirmPassword();
+ expect(await page.screenshotSelector('#content')).to.matchImage('twofa_setup_step1');
});
- it('should show setup screen - step 1', function (done) {
- captureScreen(done, 'twofa_setup_step1', function (page) {
- loginUser(page, 'without2FA');
- page.load(userSettings);
- page.click('.enable2FaLink');
- confirmPassword(page);
+ it('should move to second step in setup - step 2', async function () {
+ console.log('start');
+ await page.evaluate(function(){
+ $('.setupTwoFactorAuthentication .backupRecoveryCode:first').click();
});
+ console.log(0);
+ await page.waitForNetworkIdle();
+ console.log(1);
+ await page.click('.setupTwoFactorAuthentication .goToStep2');
+ console.log(2);
+ await page.waitForNetworkIdle();
+ console.log(3);
+ await page.evaluate(function () {
+ $('#qrcode').hide();
+ });
+ console.log(4);
+ expect(await page.screenshotSelector('#content')).to.matchImage('twofa_setup_step2');
});
- it('should move to second step in setup - step 2', function (done) {
- captureScreen(done, 'twofa_setup_step2', function (page) {
- page.click('.setupTwoFactorAuthentication .backupRecoveryCode:first');
- page.click('.setupTwoFactorAuthentication .goToStep2');
- page.evaluate(function () {
- $('#qrcode').hide();
- });
- });
+ it('should move to third step in setup - step 3', async function () {
+ await page.click('.setupTwoFactorAuthentication .goToStep3');
+ await page.waitForNetworkIdle();
+ expect(await page.screenshotSelector('#content')).to.matchImage('twofa_setup_step3');
});
- it('should move to third step in setup - step 3', function (done) {
- captureScreen(done, 'twofa_setup_step3', function (page) {
- page.click('.setupTwoFactorAuthentication .goToStep3');
+ it('should move to third step in setup - step 4 confirm', async function () {
+ fakeCorrectAuthCode();
+ await page.type('.setupConfirmAuthCodeForm input[type=text]', '123458');
+ await page.evaluate(function () {
+ $('.setupConfirmAuthCodeForm input[type=text]').change();
});
+ await page.evaluate(function () {
+ $('.setupConfirmAuthCodeForm .confirmAuthCode').click();
+ });
+ expect(await page.screenshotSelector('#content')).to.matchImage('twofa_setup_step4');
});
- it('should move to third step in setup - step 4 confirm', function (done) {
- captureScreen(done, 'twofa_setup_step4', function (page) {
- fakeCorrectAuthCode();
- page.sendKeys('.setupConfirmAuthCodeForm input[type=text]', '123458');
- page.evaluate(function () {
- $('.setupConfirmAuthCodeForm input[type=text]').change();
- });
- page.evaluate(function () {
- $('.setupConfirmAuthCodeForm .confirmAuthCode').click();
- });
- });
+ it('should force user to setup 2fa when not set up yet but enforced', async function () {
+ requireTwoFa();
+ await loginUser('no2FA', false);
+ expect(await page.screenshotSelector('.loginSection,#content,#notificationContainer')).to.matchImage('twofa_forced_step1');
});
- it('should force user to setup 2fa when not set up yet but enforced', function (done) {
- captureScreen(done, 'twofa_forced_step1', function (page) {
- requireTwoFa();
- loginUser(page, 'no2FA', false);
- });
+ it('should force user to setup 2fa when not set up yet but enforced step 2', async function () {
+ await page.click('.setupTwoFactorAuthentication .backupRecoveryCode:first');
+ await page.click('.setupTwoFactorAuthentication .goToStep2');
+ expect(await page.screenshotSelector('.loginSection,#content,#notificationContainer')).to.matchImage('twofa_forced_step2');
});
- it('should force user to setup 2fa when not set up yet but enforced step 2', function (done) {
- captureScreen(done, 'twofa_forced_step2', function (page) {
- page.click('.setupTwoFactorAuthentication .backupRecoveryCode:first');
- page.click('.setupTwoFactorAuthentication .goToStep2');
- });
+ it('should force user to setup 2fa when not set up yet but enforced step 3', async function () {
+ await page.click('.setupTwoFactorAuthentication .goToStep3');
+ expect(await page.screenshotSelector('.loginSection,#content,#notificationContainer')).to.matchImage('twofa_forced_step3');
});
- it('should force user to setup 2fa when not set up yet but enforced step 3', function (done) {
- captureScreen(done, 'twofa_forced_step3', function (page) {
- page.click('.setupTwoFactorAuthentication .goToStep3');
+ it('should force user to setup 2fa when not set up yet but enforced confirm code', async function () {
+ requireTwoFa();
+ fakeCorrectAuthCode();
+ await page.type('.setupConfirmAuthCodeForm input[type=text]', '123458');
+ await page.evaluate(function () {
+ $('.setupConfirmAuthCodeForm input[type=text]').change();
});
- });
- it('should force user to setup 2fa when not set up yet but enforced confirm code', function (done) {
- captureScreen(done, 'twofa_forced_step4', function (page) {
- requireTwoFa();
- fakeCorrectAuthCode();
- page.sendKeys('.setupConfirmAuthCodeForm input[type=text]', '123458');
- page.evaluate(function () {
- $('.setupConfirmAuthCodeForm input[type=text]').change();
- });
- page.evaluate(function () {
- $('.setupConfirmAuthCodeForm .confirmAuthCode').click();
- });
+ await page.evaluate(function () {
+ $('.setupConfirmAuthCodeForm .confirmAuthCode').click();
});
+ expect(await page.screenshotSelector('.loginSection,#content,#notificationContainer')).to.matchImage('twofa_forced_step4');
});
}); \ No newline at end of file
diff --git a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_edit_with_2fa.png b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_edit_with_2fa.png
index 335637f094..426e8e0c7f 100644
--- a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_edit_with_2fa.png
+++ b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_edit_with_2fa.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4ac0782af709d6f2d686fca96bd9290882fdcfd111b41453f590c0e4fb5c4b95
-size 27874
+oid sha256:f4dfaa069ded28df6dcc3a23b104d0863d9b5ba852c606b29b867a94103acc26
+size 27252
diff --git a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_edit_with_2fa_reset_confirm.png b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_edit_with_2fa_reset_confirm.png
index 79e12910fc..79e0717b30 100644
--- a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_edit_with_2fa_reset_confirm.png
+++ b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_edit_with_2fa_reset_confirm.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d906bbd7824a69df5e8ce9aa604a2c3417634ce28ab2e341657a8abc2b81efbc
-size 6125
+oid sha256:e9a4bf0da314910678fc3acd4e62f18616352f12a2fb122b27262ad9f011c59c
+size 6159
diff --git a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_edit_with_2fa_reset_confirmed.png b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_edit_with_2fa_reset_confirmed.png
index ef22ba811c..631b48a8e7 100644
--- a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_edit_with_2fa_reset_confirmed.png
+++ b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_edit_with_2fa_reset_confirmed.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:56d61ea7b78a07318421b35e1dae2233f8ea568dd066c4f6c96b9b3c159610b3
-size 28794
+oid sha256:e51ce8c2d7cf9e6e81b84e89e83a0f6a453196102265b52da8be1eac7aa13b83
+size 28365
diff --git a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_list.png b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_list.png
index 3d16520962..dd1ee87fdd 100644
--- a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_list.png
+++ b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_list.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6a03a40d29de20cabbfda1fef74e9c007977846858fd8dcf54a67f863313865b
-size 53925
+oid sha256:7b94002780dbc44e7382858defa946a81fe67239ea2deccfeeb75217de7aa71f
+size 53075
diff --git a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_logme_not_verified.png b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_logme_not_verified.png
index 3f3529b56c..27a559a3de 100644
--- a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_logme_not_verified.png
+++ b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_logme_not_verified.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:64555eaa6653c9ea60b7a7005f918db7bd1ce78f5bc4952e9dfe7a2d6948c48f
-size 43000
+oid sha256:778df09560788fe7995fe6b94c78ec4e671b13dcb9cc844d5ccaa8c3d5e8c9f5
+size 41370
diff --git a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_logme_not_verified_wrong_code.png b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_logme_not_verified_wrong_code.png
index ea0a73c26f..6409ebc3c6 100644
--- a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_logme_not_verified_wrong_code.png
+++ b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_logme_not_verified_wrong_code.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4170d350ffc0074b9c60fe3a8aab6aae70289073cec28edc17ff422ade22b32d
-size 51387
+oid sha256:69c1dbbf415620f8d133bfd5894d5e698a732f5f82aa3aa90d3a142f14b03c0d
+size 49008
diff --git a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_show_recovery_codes_step1.png b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_show_recovery_codes_step1.png
index a98ade64c8..5a439faa51 100644
--- a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_show_recovery_codes_step1.png
+++ b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_show_recovery_codes_step1.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9dddb94c30224362115ae13ebd5170c96caa80be88b18583f7920e0fd213117a
-size 15127
+oid sha256:b6d5c8f0591b7c3455ec903881f1f0466b6b63029f2a950d83a7a2f51d304a7a
+size 13390
diff --git a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_usersettings_twofa_enabled.png b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_usersettings_twofa_enabled.png
index 51f254b0ef..8d7197e95b 100644
--- a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_usersettings_twofa_enabled.png
+++ b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_usersettings_twofa_enabled.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f35c663a2705823ed3cc81f9038928a5691575018fd14802ca83788123a3ce5a
-size 49059
+oid sha256:d11dc17a3b0d891e8dbee1734ec31ff22230d71aa0bedab23f4389e0bb8e8e1e
+size 46583
diff --git a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_widgetized_no_verify.png b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_widgetized_no_verify.png
index dbeb7d4a4b..73b8845b3f 100644
--- a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_widgetized_no_verify.png
+++ b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuth_widgetized_no_verify.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9dd3c510f45fec8f5d9fce69b0e89faaa63687e8c8119fa140668fa099406179
-size 10749
+oid sha256:4dc32be73bf4ca764ec316721a81809924daea6ddf35659af33f2ada6f7bdd08
+size 4979