From 49593d1a00a81f443a63fcc9409e891cc4c5e439 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sat, 12 Jan 2019 12:08:13 +0000 Subject: [PATCH] FIX: Fix registration dialog popup for 'full screen' social logins Regression following the ember3 upgrade. In addition to fixing, this commit consolidates our social registration logic into one place, and adds tests for the behaviour. --- .../authentication-complete.js.no-module.es6 | 17 -------- .../initializers/auth-complete.js.es6 | 19 +++++++-- app/views/layouts/application.html.erb | 1 - config/application.rb | 1 - .../acceptance/auth-complete-test.js.es6 | 40 +++++++++++++++++++ 5 files changed, 55 insertions(+), 23 deletions(-) delete mode 100644 app/assets/javascripts/authentication-complete.js.no-module.es6 create mode 100644 test/javascripts/acceptance/auth-complete-test.js.es6 diff --git a/app/assets/javascripts/authentication-complete.js.no-module.es6 b/app/assets/javascripts/authentication-complete.js.no-module.es6 deleted file mode 100644 index be55e6d838..0000000000 --- a/app/assets/javascripts/authentication-complete.js.no-module.es6 +++ /dev/null @@ -1,17 +0,0 @@ -(function() { - const authenticationData = JSON.parse( - document.getElementById("data-authentication").dataset.authenticationData - ); - - Discourse.showingSignup = true; - require("discourse/routes/application").default.reopen({ - actions: { - didTransition: function() { - Ember.run.next(function() { - Discourse.authenticationComplete(authenticationData); - }); - return this._super(); - } - } - }); -})(); diff --git a/app/assets/javascripts/discourse/initializers/auth-complete.js.es6 b/app/assets/javascripts/discourse/initializers/auth-complete.js.es6 index 3e9d88d0e0..cecf831405 100644 --- a/app/assets/javascripts/discourse/initializers/auth-complete.js.es6 +++ b/app/assets/javascripts/discourse/initializers/auth-complete.js.es6 @@ -1,15 +1,26 @@ export default { name: "auth-complete", after: "inject-objects", - initialize() { + initialize(container) { + let lastAuthResult; + if (window.location.search.indexOf("authComplete=true") !== -1) { - const lastAuthResult = localStorage.getItem("lastAuthResult"); + // Happens when a popup social login loses connection to the parent window + lastAuthResult = localStorage.getItem("lastAuthResult"); localStorage.removeItem("lastAuthResult"); - if (lastAuthResult) { + } else if (document.getElementById("data-authentication")) { + // Happens for full screen logins + lastAuthResult = document.getElementById("data-authentication").dataset + .authenticationData; + } + + if (lastAuthResult) { + const router = container.lookup("router:main"); + router.one("didTransition", () => { Ember.run.next(() => Discourse.authenticationComplete(JSON.parse(lastAuthResult)) ); - } + }); } } }; diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index e6502658b3..fc109a741a 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -57,7 +57,6 @@ <%- if !current_user && cookies[:authentication_data] %> - <%= preload_script "authentication-complete" %> <%- end %> diff --git a/config/application.rb b/config/application.rb index 89c161bbfe..65233ef4d8 100644 --- a/config/application.rb +++ b/config/application.rb @@ -122,7 +122,6 @@ module Discourse google-tag-manager.js google-universal-analytics.js preload-application-data.js - authentication-complete.js print-page.js omniauth-complete.js activate-account.js diff --git a/test/javascripts/acceptance/auth-complete-test.js.es6 b/test/javascripts/acceptance/auth-complete-test.js.es6 new file mode 100644 index 0000000000..58a717bcc0 --- /dev/null +++ b/test/javascripts/acceptance/auth-complete-test.js.es6 @@ -0,0 +1,40 @@ +import { acceptance } from "helpers/qunit-helpers"; +acceptance("Auth Complete", { + beforeEach() { + const node = document.createElement("meta"); + node.dataset.authenticationData = JSON.stringify({ + auth_provider: "test", + email: "blah@example.com" + }); + node.id = "data-authentication"; + document.querySelector("head").appendChild(node); + }, + afterEach() { + document + .querySelector("head") + .removeChild(document.getElementById("data-authentication")); + } +}); + +QUnit.test("when login not required", async assert => { + await visit("/"); + + assert.equal(currentPath(), "discovery.latest", "it stays on the homepage"); + + assert.ok( + exists("#discourse-modal div.create-account"), + "it shows the registration modal" + ); +}); + +QUnit.test("when login required", async assert => { + Discourse.SiteSettings.login_required = true; + await visit("/"); + + assert.equal(currentPath(), "login", "it redirects to the login page"); + + assert.ok( + exists("#discourse-modal div.create-account"), + "it shows the registration modal" + ); +});