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/Login
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/Login')
-rw-r--r--plugins/Login/templates/login.twig2
-rw-r--r--plugins/Login/tests/UI/Login_spec.js232
-rw-r--r--plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_blockedlogin.png4
-rw-r--r--plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_blockedlogme.png4
-rw-r--r--plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_noentries.png4
-rw-r--r--plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_withentries.png4
-rw-r--r--plugins/Login/tests/UI/expected-screenshots/Login_forgot_password.png4
-rw-r--r--plugins/Login/tests/UI/expected-screenshots/Login_ip_not_whitelisted.png4
-rw-r--r--plugins/Login/tests/UI/expected-screenshots/Login_login_fail.png4
-rw-r--r--plugins/Login/tests/UI/expected-screenshots/Login_login_form.png4
-rw-r--r--plugins/Login/tests/UI/expected-screenshots/Login_login_form_logout.png3
-rw-r--r--plugins/Login/tests/UI/expected-screenshots/Login_password_reset.png4
-rw-r--r--plugins/Login/tests/UI/expected-screenshots/Login_password_reset_complete.png4
-rw-r--r--plugins/Login/tests/UI/expected-screenshots/Login_password_reset_error.png4
14 files changed, 166 insertions, 115 deletions
diff --git a/plugins/Login/templates/login.twig b/plugins/Login/templates/login.twig
index a3bf51fd46..51c6612024 100644
--- a/plugins/Login/templates/login.twig
+++ b/plugins/Login/templates/login.twig
@@ -48,7 +48,7 @@
<input name="form_rememberme" type="checkbox" id="login_form_rememberme" value="1" tabindex="90"
{% if form_data.form_rememberme.value %}checked="checked" {% endif %}/>
<label for="login_form_rememberme">{{ 'Login_RememberMe'|translate }}</label>
- <input class="submit btn" id='login_form_submit' type="submit" value="{{ 'Login_LogIn'|translate }}"
+ <input class="submit btn" id="login_form_submit" type="submit" value="{{ 'Login_LogIn'|translate }}"
tabindex="100"/>
</div>
</div>
diff --git a/plugins/Login/tests/UI/Login_spec.js b/plugins/Login/tests/UI/Login_spec.js
index 84bbc33190..855973dbc4 100644
--- a/plugins/Login/tests/UI/Login_spec.js
+++ b/plugins/Login/tests/UI/Login_spec.js
@@ -15,10 +15,12 @@ describe("Login", function () {
bruteForceLogUrl = "?module=Login&action=bruteForceLog",
apiAuthUrl = "?module=API&method=UsersManager.getTokenAuth&format=json&userLogin=ovliverqueen&md5Password=" + md5Pass;
- before(function () {
+ before(async function () {
testEnvironment.testUseMockAuth = 0;
testEnvironment.queryParamOverride = {date: "2012-01-01", period: "year"};
testEnvironment.save();
+
+ await page.clearCookies();
});
beforeEach(function () {
@@ -27,12 +29,14 @@ describe("Login", function () {
testEnvironment.save();
});
- after(function () {
+ after(async function () {
testEnvironment.testUseMockAuth = 1;
delete testEnvironment.bruteForceBlockIps;
delete testEnvironment.bruteForceBlockThisIp;
delete testEnvironment.queryParamOverride;
testEnvironment.save();
+
+ await page.clearCookies();
});
afterEach(function () {
@@ -43,114 +47,158 @@ describe("Login", function () {
testEnvironment.save();
});
- it("should show error when trying to log in through login form", function (done) {
+ it("should show error when trying to log in through login form", async function () {
testEnvironment.testUseMockAuth = 0;
testEnvironment.bruteForceBlockThisIp = 1;
delete testEnvironment.bruteForceBlockIps;
delete testEnvironment.queryParamOverride;
testEnvironment.save();
- expect.screenshot("bruteforcelog_blockedlogin").to.be.capture(function (page) {
- page.load("");
- }, done);
+ await page.goto("");
+ expect(await page.screenshot({ fullPage: true })).to.matchImage('bruteforcelog_blockedlogin');
});
- it("should load correctly", function (done) {
- expect.screenshot("login_form").to.be.capture(function (page) {
- page.load("");
- }, done);
+ it("should load correctly", async function() {
+ await page.goto("");
+ await page.waitForNetworkIdle();
+ await page.waitFor('input');
+ await page.mouse.click(0, 0);
+ await page.waitFor(250);
+
+ expect(await page.screenshot({ fullPage: true })).to.matchImage('login_form');
});
- it("should fail when incorrect credentials are supplied", function (done) {
- expect.screenshot("login_fail").to.be.capture(function (page) {
- page.sendKeys('#login_form_login', 'superUserLogin');
- page.sendKeys('#login_form_password', 'wrongpassword');
- page.click('#login_form_submit');
- }, done);
+ it("should fail when incorrect credentials are supplied", async function() {
+ await page.type('#login_form_login', 'superUserLogin');
+ await page.type('#login_form_password', 'wrongpassword');
+ await page.evaluate(function(){
+ $('#login_form_submit').click();
+ });
+ await page.waitForNetworkIdle();
+ await page.waitFor('.notification');
+ await page.mouse.click(0, 0);
+ await page.waitFor(250);
+
+ expect(await page.screenshot({ fullPage: true })).to.matchImage('login_fail');
});
- it("should redirect to Piwik when correct credentials are supplied", function (done) {
- expect.current_page.contains("#dashboard", function (page) {
- page.sendKeys("#login_form_login", "superUserLogin");
- page.sendKeys("#login_form_password", "superUserPass");
- page.click("#login_form_submit");
- }, done);
+ it("should redirect to Matomo when correct credentials are supplied", async function() {
+ await page.type("#login_form_login", "superUserLogin");
+ await page.type("#login_form_password", "superUserPass");
+ await page.evaluate(function(){
+ $('#login_form_submit').click();
+ });
+ await page.waitForNetworkIdle();
+
+ // check dashboard is shown
+ await page.waitForSelector('#dashboard');
+ await page.waitForNetworkIdle();
});
- it("should redirect to login when logout link clicked", function (done) {
- expect.screenshot("login_form").to.be.capture("logout_form", function (page) {
- page.click("nav .right .icon-sign-out");
- }, done);
+ it("should redirect to login when logout link clicked", async function() {
+ await page.click("nav .right .icon-sign-out");
+ await page.waitForNetworkIdle();
+ await page.waitFor('input');
+ await page.mouse.click(0, 0);
+ await page.waitFor(250);
+
+ expect(await page.screenshot({ fullPage: true })).to.matchImage('login_form_logout');
});
- it("login with email and password should work", function (done) {
- expect.current_page.contains("#dashboard", function (page) {
- page.sendKeys("#login_form_login", "hello@example.org");
- page.sendKeys("#login_form_password", "superUserPass");
- page.click("#login_form_submit");
- }, done);
+ it("login with email and password should work", async function() {
+ await page.type("#login_form_login", "hello@example.org");
+ await page.type("#login_form_password", "superUserPass");
+ await page.evaluate(function(){
+ $('#login_form_submit').click();
+ });
+
+ // check dashboard is shown
+ await page.waitForNetworkIdle();
+ await page.waitForSelector('#dashboard');
});
- it("should display password reset form when forgot password link clicked", function (done) {
- expect.screenshot("forgot_password").to.be.capture(function (page) {
- page.click("nav .right .icon-sign-out");
- page.click("a#login_form_nav");
- }, done);
+ it("should display password reset form when forgot password link clicked", async function() {
+ await page.click("nav .right .icon-sign-out");
+ await page.waitForNetworkIdle();
+ await page.waitFor("a#login_form_nav");
+ await page.click("a#login_form_nav");
+ await page.waitForNetworkIdle();
+
+ expect(await page.screenshot({ fullPage: true })).to.matchImage('forgot_password');
});
- it("should show reset password form and error message on error", function (done) {
- expect.screenshot("password_reset_error").to.be.capture(function (page) {
- page.sendKeys("#reset_form_login", "superUserLogin");
- page.sendKeys("#reset_form_password", "superUserPass2");
- page.click("#reset_form_submit", 3000);
- }, done);
+ it("should show reset password form and error message on error", async function() {
+ await page.type("#reset_form_login", "superUserLogin");
+ await page.type("#reset_form_password", "superUserPass2");
+ await page.click("#reset_form_submit");
+ await page.waitForNetworkIdle();
+ await page.waitFor('.notification');
+
+ expect(await page.screenshot({ fullPage: true })).to.matchImage('password_reset_error');
});
- it("should send email when password reset form submitted", function (done) {
- expect.screenshot("password_reset").to.be.capture(function (page) {
- page.reload();
- page.click("a#login_form_nav");
- page.sendKeys("#reset_form_login", "superUserLogin");
- page.sendKeys("#reset_form_password", "superUserPass2");
- page.sendKeys("#reset_form_password_bis", "superUserPass2");
- page.click("#reset_form_submit", 3000);
- }, done);
+ it("should send email when password reset form submitted", async function() {
+ await page.reload();
+ await page.click("a#login_form_nav");
+ await page.type("#reset_form_login", "superUserLogin");
+ await page.type("#reset_form_password", "superUserPass2");
+ await page.type("#reset_form_password_bis", "superUserPass2");
+ await page.click("#reset_form_submit");
+ await page.waitForNetworkIdle();
+
+ expect(await page.screenshot({ fullPage: true })).to.matchImage('password_reset');
});
- it("should reset password when password reset link is clicked", function (done) {
- expect.screenshot("password_reset_complete").to.be.capture(function (page) {
- var expectedMailOutputFile = PIWIK_INCLUDE_PATH + '/tmp/Login.resetPassword.mail.json',
- mailSent = JSON.parse(require("fs").read(expectedMailOutputFile)),
- resetUrl = mailSent.contents.match(/http:\/\/.*/)[0];
+ it("should reset password when password reset link is clicked", async function() {
+ var expectedMailOutputFile = PIWIK_INCLUDE_PATH + '/tmp/Login.resetPassword.mail.json',
+ fileContents = require("fs").readFileSync(expectedMailOutputFile),
+ mailSent = JSON.parse(fileContents),
+ resetUrl = mailSent.contents.match(/http:\/\/[^\s]+resetToken[^\s]+<\/p>/);
- page.load(resetUrl);
- }, done);
+ if (!resetUrl || !resetUrl[0]) {
+ throw new Error(`Could not find reset URL in email, captured mail info: ${fileContents}`)
+ }
+ resetUrl = resetUrl[0].replace(/<\/p>$/, '');
+
+ await page.goto(resetUrl);
+ await page.waitForNetworkIdle();
+
+ expect(await page.screenshot({ fullPage: true })).to.matchImage('password_reset_complete');
});
- it("should login successfully when new credentials used", function (done) {
- expect.page("").contains("#dashboard", function (page) {
- page.sendKeys("#login_form_login", "superUserLogin");
- page.sendKeys("#login_form_password", "superUserPass2");
- page.click("#login_form_submit");
- }, done);
+ it("should login successfully when new credentials used", async function() {
+ await page.type("#login_form_login", "superUserLogin");
+ await page.type("#login_form_password", "superUserPass2");
+ await page.evaluate(function(){
+ $('#login_form_submit').click();
+ });
+
+ // check dashboard is shown
+ await page.waitForNetworkIdle();
+ await page.waitForSelector('#dashboard');
});
- it("should login successfully when formless login used", function (done) {
- expect.page("").contains('#dashboard', /*'formless_login',*/ function (page) {
- page.click("nav .right .icon-sign-out");
- page.load(formlessLoginUrl);
- }, done);
+ it("should login successfully when formless login used", async function() {
+ await page.click("nav .right .icon-sign-out");
+ await page.waitForNetworkIdle();
+ await page.goto(formlessLoginUrl);
+
+ // check dashboard is shown
+ await page.waitForNetworkIdle();
+ await page.waitForSelector('#dashboard');
});
- it('should not show login page when ips whitelisted and ip is not matching', function (done) {
- expect.screenshot('ip_not_whitelisted').to.be.captureSelector('.box', function (page) {
- testEnvironment.overrideConfig('General', 'login_whitelist_ip', ['199.199.199.199']);
- testEnvironment.save();
- page.load('');
- }, done);
+ it('should not show login page when ips whitelisted and ip is not matching', async function() {
+ testEnvironment.overrideConfig('General', 'login_whitelist_ip', ['199.199.199.199']);
+ testEnvironment.save();
+ await page.goto('');
+ await page.waitForNetworkIdle();
+
+ const element = await page.$('.box');
+ expect(await element.screenshot()).to.matchImage('ip_not_whitelisted');
});
- it("should show brute force log url when there are no entries", function (done) {
+ it("should show brute force log url when there are no entries", async function () {
testEnvironment.testUseMockAuth = 1;
delete testEnvironment.queryParamOverride;
delete testEnvironment.bruteForceBlockThisIp;
@@ -158,44 +206,44 @@ describe("Login", function () {
testEnvironment.overrideConfig('General', 'login_whitelist_ip', []);
testEnvironment.save();
- expect.screenshot("bruteforcelog_noentries").to.be.capture(function (page) {
- page.load(bruteForceLogUrl);
- }, done);
+ await page.goto(bruteForceLogUrl);
+
+ expect(await page.screenshot({ fullPage: true })).to.matchImage('bruteforcelog_noentries');
});
- it("should show brute force log url when there are entries", function (done) {
+ it("should show brute force log url when there are entries", async function () {
testEnvironment.testUseMockAuth = 1;
testEnvironment.bruteForceBlockIps = 1;
delete testEnvironment.bruteForceBlockThisIp;
delete testEnvironment.queryParamOverride;
testEnvironment.save();
- expect.screenshot("bruteforcelog_withentries").to.be.capture(function (page) {
- page.load(bruteForceLogUrl);
- }, done);
+ await page.goto(bruteForceLogUrl);
+
+ expect(await page.screenshot({ fullPage: true })).to.matchImage('bruteforcelog_withentries');
});
- it("should show error when trying to attempt a log in through API", function (done) {
+ it("should show error when trying to attempt a log in through API", async function () {
testEnvironment.testUseMockAuth = 1;
testEnvironment.bruteForceBlockThisIp = 1;
delete testEnvironment.bruteForceBlockIps;
delete testEnvironment.queryParamOverride;
testEnvironment.save();
- expect.screenshot("bruteforcelog_blockedapi").to.be.capture(function (page) {
- page.load(apiAuthUrl);
- }, done);
+ await page.goto(apiAuthUrl);
+
+ expect(await page.screenshot({ fullPage: true })).to.matchImage('bruteforcelog_blockedapi');
});
- it("should show error when trying to log in through logme", function (done) {
+ it("should show error when trying to log in through logme", async function () {
testEnvironment.testUseMockAuth = 0;
testEnvironment.bruteForceBlockThisIp = 1;
delete testEnvironment.bruteForceBlockIps;
delete testEnvironment.queryParamOverride;
testEnvironment.save();
- expect.screenshot("bruteforcelog_blockedlogme").to.be.capture(function (page) {
- page.load(formlessLoginUrl);
- }, done);
+ await page.goto(formlessLoginUrl);
+
+ expect(await page.screenshot({ fullPage: true })).to.matchImage('bruteforcelog_blockedlogme');
});
}); \ No newline at end of file
diff --git a/plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_blockedlogin.png b/plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_blockedlogin.png
index 88958e2c47..d4aea14ed4 100644
--- a/plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_blockedlogin.png
+++ b/plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_blockedlogin.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8593ba93dbb91fdc1bdad14635707d9b6b06b0344a6c931b4a55ebe3ee33dccb
-size 51402
+oid sha256:8d3ca7cafa81a2bfa62f29e680b75baceb85229271a9360aa3bacd9609e719f4
+size 48989
diff --git a/plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_blockedlogme.png b/plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_blockedlogme.png
index 88958e2c47..d4aea14ed4 100644
--- a/plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_blockedlogme.png
+++ b/plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_blockedlogme.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8593ba93dbb91fdc1bdad14635707d9b6b06b0344a6c931b4a55ebe3ee33dccb
-size 51402
+oid sha256:8d3ca7cafa81a2bfa62f29e680b75baceb85229271a9360aa3bacd9609e719f4
+size 48989
diff --git a/plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_noentries.png b/plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_noentries.png
index 70bff45cd1..8cb22cd5c3 100644
--- a/plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_noentries.png
+++ b/plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_noentries.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:7c5beced282043e1249bc18867483839161f3d6721f275ed78f882538d2b4c38
-size 88777
+oid sha256:887fa42574f909fe2077428d67e6231cd636e8b2eb4350c642ee45973de64887
+size 87819
diff --git a/plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_withentries.png b/plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_withentries.png
index 6974907aba..c77fa662fd 100644
--- a/plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_withentries.png
+++ b/plugins/Login/tests/UI/expected-screenshots/Login_bruteforcelog_withentries.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5f88331f67e24bfa06930e6412c97c5c4c8e0f81771a4aa7d80ae2ddec1a184e
-size 107892
+oid sha256:3afeba7796bf73bd38219259140df8256559f54451e2f29edf792ee5e9506c77
+size 105541
diff --git a/plugins/Login/tests/UI/expected-screenshots/Login_forgot_password.png b/plugins/Login/tests/UI/expected-screenshots/Login_forgot_password.png
index 97d5ce3d38..3d24a7b522 100644
--- a/plugins/Login/tests/UI/expected-screenshots/Login_forgot_password.png
+++ b/plugins/Login/tests/UI/expected-screenshots/Login_forgot_password.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:83dd23dc44000c21a7b9b9b579a624bae3d117df132b9345a7f1e6486b3d56ae
-size 31574
+oid sha256:29929740cf87fd450c6d56c72d6751f1e85d7e3e12b78894d3365b5abe642670
+size 30414
diff --git a/plugins/Login/tests/UI/expected-screenshots/Login_ip_not_whitelisted.png b/plugins/Login/tests/UI/expected-screenshots/Login_ip_not_whitelisted.png
index 43461ee0e8..5d228d1e95 100644
--- a/plugins/Login/tests/UI/expected-screenshots/Login_ip_not_whitelisted.png
+++ b/plugins/Login/tests/UI/expected-screenshots/Login_ip_not_whitelisted.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:62ab95ecf00c2311e4c6fa32f24addb9149b5b863d82d96c29b3427a2a38141c
-size 47443
+oid sha256:db6db569606a2685d6ce0a3a70c3ee6348516e0efca5d765bfe55b136335dcee
+size 35222
diff --git a/plugins/Login/tests/UI/expected-screenshots/Login_login_fail.png b/plugins/Login/tests/UI/expected-screenshots/Login_login_fail.png
index a4a6605219..50dcebcf23 100644
--- a/plugins/Login/tests/UI/expected-screenshots/Login_login_fail.png
+++ b/plugins/Login/tests/UI/expected-screenshots/Login_login_fail.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e1e11c1594b03553f9ad82e139e74a6f878cd62bcf1a2630cf53895b0d7961ff
-size 33498
+oid sha256:2bf4825c1cc653b0aeca918670f56bbfe2c948dc2cb761a543ea2efaea49bb16
+size 32338
diff --git a/plugins/Login/tests/UI/expected-screenshots/Login_login_form.png b/plugins/Login/tests/UI/expected-screenshots/Login_login_form.png
index 38890beaad..e69acbf95a 100644
--- a/plugins/Login/tests/UI/expected-screenshots/Login_login_form.png
+++ b/plugins/Login/tests/UI/expected-screenshots/Login_login_form.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cca33e7b83218f4c13f65fdbf845d05b5c798afc2ce74d0cc0596f4632955a2d
-size 25570
+oid sha256:5cf56b7df49eb6ad15f32acbb44dd432d91bbce528698b97b632e1586af7d448
+size 24747
diff --git a/plugins/Login/tests/UI/expected-screenshots/Login_login_form_logout.png b/plugins/Login/tests/UI/expected-screenshots/Login_login_form_logout.png
new file mode 100644
index 0000000000..e69acbf95a
--- /dev/null
+++ b/plugins/Login/tests/UI/expected-screenshots/Login_login_form_logout.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5cf56b7df49eb6ad15f32acbb44dd432d91bbce528698b97b632e1586af7d448
+size 24747
diff --git a/plugins/Login/tests/UI/expected-screenshots/Login_password_reset.png b/plugins/Login/tests/UI/expected-screenshots/Login_password_reset.png
index 2530357281..c0472d2130 100644
--- a/plugins/Login/tests/UI/expected-screenshots/Login_password_reset.png
+++ b/plugins/Login/tests/UI/expected-screenshots/Login_password_reset.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:bf9227950e5dd40eec1acf1b35edadab6921995e3a65a09548688d08285640ce
-size 36488
+oid sha256:bcc5cb39a136e37dc65647b8d521ff31ebd58c857a38ecbb3e11b0fc6657cef3
+size 34925
diff --git a/plugins/Login/tests/UI/expected-screenshots/Login_password_reset_complete.png b/plugins/Login/tests/UI/expected-screenshots/Login_password_reset_complete.png
index 583d02d00f..de9130663e 100644
--- a/plugins/Login/tests/UI/expected-screenshots/Login_password_reset_complete.png
+++ b/plugins/Login/tests/UI/expected-screenshots/Login_password_reset_complete.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a59f9aba1c7e16437d3df6a28ed0d4f28a64888080b2a878ff1f5055274df44e
-size 30015
+oid sha256:e8bf83920ee47f8ac67d81a97840c286b4dd7456149d7b56457ee18659730519
+size 29453
diff --git a/plugins/Login/tests/UI/expected-screenshots/Login_password_reset_error.png b/plugins/Login/tests/UI/expected-screenshots/Login_password_reset_error.png
index 7c9d16258b..f177ae6bd4 100644
--- a/plugins/Login/tests/UI/expected-screenshots/Login_password_reset_error.png
+++ b/plugins/Login/tests/UI/expected-screenshots/Login_password_reset_error.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a89dff1e76ef19aa8024fec566e4656035e1a642c32f250864e5cff2a1ac7aef
-size 41881
+oid sha256:ec39dc81e0218843cb4f6ca13fd181c5be7a17c474c13c4721dbd910175065f8
+size 39431