Commit 911926da authored by Anastasiia Nikolaienko's avatar Anastasiia Nikolaienko Committed by Commit Bot

Signin screen JS tests

Bug: 1054798
Change-Id: I09f616428f0dd123f51505af4afc552619111a5a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2107630
Commit-Queue: Anastasiia Nikolaienko <anastasiian@chromium.org>
Reviewed-by: default avatarRebekah Potter <rbpotter@chromium.org>
Reviewed-by: default avatarKush Sinha <sinhak@chromium.org>
Cr-Commit-Position: refs/heads/master@{#754852}
parent f72a3ff6
......@@ -165,5 +165,11 @@ Polymer({
handleGoBack_(e) {
e.stopPropagation();
this.navigateBackInWebview_();
}
},
/** @param {Authenticator} authExtHost */
setAuthExtHostForTest(authExtHost) {
this.authExtHost_ = authExtHost;
this.addAuthExtHostListeners_();
},
});
......@@ -128,3 +128,27 @@ TEST_F('EduLoginParentSigninTest', 'ShowHidePassword', function() {
TEST_F('EduLoginParentSigninTest', 'ClearState', function() {
this.runMochaTest(edu_login_parent_signin_tests.TestNames.ClearState);
});
var EduLoginSigninTest = class extends EduLoginTest {
/** @override */
get browsePreload() {
return 'chrome://chrome-signin/test_loader.html?module=chromeos/edu_login/edu_login_signin_test.js';
}
/** @override */
get suiteName() {
return edu_login_signin_tests.suiteName;
}
};
TEST_F('EduLoginSigninTest', 'Init', function() {
this.runMochaTest(edu_login_signin_tests.TestNames.Init);
});
TEST_F('EduLoginSigninTest', 'WebUICallbacks', function() {
this.runMochaTest(edu_login_signin_tests.TestNames.WebUICallbacks);
});
TEST_F('EduLoginSigninTest', 'AuthExtHostCallbacks', function() {
this.runMochaTest(edu_login_signin_tests.TestNames.AuthExtHostCallbacks);
});
......@@ -11,8 +11,7 @@ import {assert} from 'chrome://resources/js/assert.m.js';
import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {TestBrowserProxy} from '../../test_browser_proxy.m.js';
import {getFakeParent} from './edu_login_test_util.js';
import {getFakeParent, TestEduAccountLoginBrowserProxy} from './edu_login_test_util.js';
window.edu_login_parent_signin_tests = {};
edu_login_parent_signin_tests.suiteName = 'EduLoginParentSigninTest';
......@@ -35,26 +34,6 @@ suite(edu_login_parent_signin_tests.suiteName, function() {
let testBrowserProxy;
let passwordField;
/** @implements {EduAccountLoginBrowserProxy} */
class TestEduAccountLoginBrowserProxy extends TestBrowserProxy {
constructor() {
super(['parentSignin']);
/** @private {function} */
this.parentSigninResponse_ = null;
}
/** @param {function} parentSigninResponse */
setParentSigninResponse(parentSigninResponse) {
this.parentSigninResponse_ = parentSigninResponse;
}
/** @override */
parentSignin(parent, password) {
this.methodCalled('parentSignin', parent, password);
return this.parentSigninResponse_();
}
}
/** @param {string} type */
function clickButton(type) {
parentSigninComponent.$$(`edu-login-button[button-type="${type}"]`)
......
......@@ -9,8 +9,7 @@ import {ParentAccount} from 'chrome://chrome-signin/edu_login_util.js';
import {assert} from 'chrome://resources/js/assert.m.js';
import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {TestBrowserProxy} from '../../test_browser_proxy.m.js';
import {getFakeParent} from './edu_login_test_util.js';
import {getFakeParent, getFakeParentsList, TestEduAccountLoginBrowserProxy} from './edu_login_test_util.js';
window.edu_login_parents_tests = {};
edu_login_parents_tests.suiteName = 'EduLoginParentsTest';
......@@ -23,31 +22,10 @@ edu_login_parents_tests.TestNames = {
SelectedParent: 'Selected parent',
};
/** @return {Array<ParentAccount>} */
function getFakeParentsList() {
return [
getFakeParent('parent1@gmail.com', 'Parent 1', '', 'parent1gaia'),
getFakeParent('parent2@gmail.com', 'Parent 2', '', 'parent2gaia'),
];
}
suite(edu_login_parents_tests.suiteName, function() {
let parentsComponent;
let testBrowserProxy;
/** @implements {EduAccountLoginBrowserProxy} */
class TestEduAccountLoginBrowserProxy extends TestBrowserProxy {
constructor() {
super(['getParents']);
}
/** @override */
getParents() {
this.methodCalled('getParents');
return Promise.resolve(getFakeParentsList());
}
}
/** @return {NodeList} */
function getAccountListItems() {
return parentsComponent.shadowRoot.querySelectorAll('.account-list-item');
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'chrome://chrome-signin/edu_login_signin.js';
import {EduAccountLoginBrowserProxyImpl} from 'chrome://chrome-signin/browser_proxy.js';
import {AuthMode, AuthParams} from 'chrome://chrome-signin/gaia_auth_host/authenticator.m.js';
import {assert} from 'chrome://resources/js/assert.m.js';
import {webUIListenerCallback} from 'chrome://resources/js/cr.m.js';
import {NativeEventTarget as EventTarget} from 'chrome://resources/js/cr/event_target.m.js';
import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {TestEduAccountLoginBrowserProxy} from './edu_login_test_util.js';
window.edu_login_signin_tests = {};
edu_login_signin_tests.suiteName = 'EduLoginSigninTest';
/** @enum {string} */
edu_login_signin_tests.TestNames = {
Init: 'Initial state',
WebUICallbacks: 'WebUI callbacks test',
AuthExtHostCallbacks: 'AuthExtHost callbacks test',
};
const fakeLoginParams = {
reAuthProofToken: 'test-rapt',
parentObfuscatedGaiaId: 'test-parent-gaia',
};
suite(edu_login_signin_tests.suiteName, function() {
let signinComponent;
let testBrowserProxy;
let testAuthenticator;
class TestAuthenticator extends EventTarget {
constructor() {
super();
/** @type {AuthMode} */
this.authMode = null;
/** @type {AuthParams} */
this.data = null;
/** @type {Number} */
this.loadCalls = 0;
}
/**
* @param {AuthMode} authMode Authorization mode.
* @param {AuthParams} data Parameters for the authorization flow.
*/
load(authMode, data) {
this.loadCalls++;
this.authMode = authMode;
this.data = data;
}
}
setup(function() {
testBrowserProxy = new TestEduAccountLoginBrowserProxy();
EduAccountLoginBrowserProxyImpl.instance_ = testBrowserProxy;
PolymerTest.clearBody();
signinComponent = document.createElement('edu-login-signin');
signinComponent.loginParams = fakeLoginParams;
document.body.appendChild(signinComponent);
testAuthenticator = new TestAuthenticator();
signinComponent.setAuthExtHostForTest(testAuthenticator);
flush();
});
test(assert(edu_login_signin_tests.TestNames.Init), function() {
assertTrue(signinComponent.$$('.spinner').active);
assertTrue(signinComponent.$$('#signinFrame').hidden);
assertEquals(1, testBrowserProxy.getCallCount('loginInitialize'));
});
test(assert(edu_login_signin_tests.TestNames.WebUICallbacks), function() {
let goBackCalls = 0;
signinComponent.addEventListener('go-back', function() {
goBackCalls++;
});
webUIListenerCallback('navigate-back-in-webview');
expectEquals(1, goBackCalls);
const fakeAuthExtensionData = {
hl: 'hl',
gaiaUrl: 'gaiaUrl',
authMode: 1,
email: 'example@gmail.com',
};
webUIListenerCallback('load-auth-extension', fakeAuthExtensionData);
assertEquals(1, testAuthenticator.loadCalls);
assertEquals(fakeAuthExtensionData, testAuthenticator.data);
assertEquals(fakeAuthExtensionData.authMode, testAuthenticator.authMode);
webUIListenerCallback('close-dialog');
assertEquals(1, testBrowserProxy.getCallCount('dialogClose'));
});
test(
assert(edu_login_signin_tests.TestNames.AuthExtHostCallbacks),
function() {
assertTrue(signinComponent.$$('.spinner').active);
testAuthenticator.dispatchEvent(new Event('ready'));
assertEquals(1, testBrowserProxy.getCallCount('authExtensionReady'));
assertFalse(signinComponent.$$('.spinner').active);
const fakeUrl = 'www.google.com/fake';
testAuthenticator.dispatchEvent(
new CustomEvent('resize', {detail: fakeUrl}));
testBrowserProxy.whenCalled('switchToFullTab').then(function(result) {
assertEquals(fakeUrl, result);
});
const fakeCredentials = {email: 'example@gmail.com'};
testAuthenticator.dispatchEvent(
new CustomEvent('authCompleted', {detail: fakeCredentials}));
testBrowserProxy.whenCalled('completeLogin').then(function(result) {
assertTrue(signinComponent.$$('.spinner').active);
assertEquals(fakeCredentials, result[0]);
assertDeepEquals(fakeLoginParams, result[1]);
});
});
});
......@@ -2,12 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {TestBrowserProxy} from '../../test_browser_proxy.m.js';
/**
* @param {string} email
* @param {string} displayName
* @param {string} profileImage
* @param {string} obfuscatedGaiaId
* @return {ParentAccount}
* @return {!ParentAccount}
*/
export function getFakeParent(
email, displayName, profileImage, obfuscatedGaiaId) {
......@@ -18,3 +20,71 @@ export function getFakeParent(
obfuscatedGaiaId: obfuscatedGaiaId,
};
}
/** @return {!Array<!ParentAccount>} */
export function getFakeParentsList() {
return [
getFakeParent('parent1@gmail.com', 'Parent 1', '', 'parent1gaia'),
getFakeParent('parent2@gmail.com', 'Parent 2', '', 'parent2gaia'),
];
}
/** @implements {EduAccountLoginBrowserProxy} */
export class TestEduAccountLoginBrowserProxy extends TestBrowserProxy {
constructor() {
super([
'getParents',
'parentSignin',
'loginInitialize',
'authExtensionReady',
'switchToFullTab',
'completeLogin',
'dialogClose',
]);
/** @private {function} */
this.parentSigninResponse_ = null;
}
/** @override */
getParents() {
this.methodCalled('getParents');
return Promise.resolve(getFakeParentsList());
}
/** @override */
parentSignin(parent, password) {
this.methodCalled('parentSignin', parent, password);
return this.parentSigninResponse_();
}
/** @param {function} parentSigninResponse */
setParentSigninResponse(parentSigninResponse) {
this.parentSigninResponse_ = parentSigninResponse;
}
/** @override */
loginInitialize() {
this.methodCalled('loginInitialize');
}
/** @override */
authExtensionReady() {
this.methodCalled('authExtensionReady');
}
/** @override */
switchToFullTab(url) {
this.methodCalled('switchToFullTab', url);
}
/** @override */
completeLogin(credentials, eduLoginParams) {
this.methodCalled('completeLogin', [credentials, eduLoginParams]);
}
/** @override */
dialogClose() {
this.methodCalled('dialogClose');
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment