Commit 7f20b2d3 authored by Anastasiia Nikolaienko's avatar Anastasiia Nikolaienko Committed by Commit Bot

Parent sign-in screen JS tests

Bug: 1043108
Change-Id: Icdcd8d35a5fa1b0452d29ab666e3983ad46a006a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2100939Reviewed-by: default avatarRebekah Potter <rbpotter@chromium.org>
Reviewed-by: default avatarKush Sinha <sinhak@chromium.org>
Commit-Queue: Anastasiia Nikolaienko <anastasiian@chromium.org>
Cr-Commit-Position: refs/heads/master@{#753145}
parent 913947ef
...@@ -95,3 +95,36 @@ TEST_F('EduLoginParentsTest', 'GoNext', function() { ...@@ -95,3 +95,36 @@ TEST_F('EduLoginParentsTest', 'GoNext', function() {
TEST_F('EduLoginParentsTest', 'SelectedParent', function() { TEST_F('EduLoginParentsTest', 'SelectedParent', function() {
this.runMochaTest(edu_login_parents_tests.TestNames.SelectedParent); this.runMochaTest(edu_login_parents_tests.TestNames.SelectedParent);
}); });
var EduLoginParentSigninTest = class extends EduLoginTest {
/** @override */
get browsePreload() {
return 'chrome://chrome-signin/test_loader.html?module=chromeos/edu_login/edu_login_parent_signin_test.js';
}
/** @override */
get suiteName() {
return edu_login_parent_signin_tests.suiteName;
}
};
TEST_F('EduLoginParentSigninTest', 'Initialize', function() {
this.runMochaTest(edu_login_parent_signin_tests.TestNames.Initialize);
});
TEST_F('EduLoginParentSigninTest', 'WrongPassword', function() {
this.runMochaTest(edu_login_parent_signin_tests.TestNames.WrongPassword);
});
TEST_F('EduLoginParentSigninTest', 'ParentSigninSuccess', function() {
this.runMochaTest(
edu_login_parent_signin_tests.TestNames.ParentSigninSuccess);
});
TEST_F('EduLoginParentSigninTest', 'ShowHidePassword', function() {
this.runMochaTest(edu_login_parent_signin_tests.TestNames.ShowHidePassword);
});
TEST_F('EduLoginParentSigninTest', 'ClearState', function() {
this.runMochaTest(edu_login_parent_signin_tests.TestNames.ClearState);
});
// 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_parent_signin.js';
import 'chrome://chrome-signin/edu_login_button.js';
import {EduAccountLoginBrowserProxyImpl} from 'chrome://chrome-signin/browser_proxy.js';
import {ParentAccount} from 'chrome://chrome-signin/edu_login_util.js';
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';
window.edu_login_parent_signin_tests = {};
edu_login_parent_signin_tests.suiteName = 'EduLoginParentSigninTest';
/** @enum {string} */
edu_login_parent_signin_tests.TestNames = {
Initialize: 'Check page state on init',
WrongPassword: 'State after wrong password error',
ParentSigninSuccess: 'State after signin success',
ShowHidePassword: 'Icon shows/hides the password',
ClearState: 'State is cleared after back button click',
};
/** @type {ParentAccount} */
const fakeParent =
getFakeParent('parent1@gmail.com', 'Parent 1', '', 'parent1gaia');
suite(edu_login_parent_signin_tests.suiteName, function() {
let parentSigninComponent;
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}"]`)
.$$('cr-button')
.click();
}
setup(function() {
testBrowserProxy = new TestEduAccountLoginBrowserProxy();
EduAccountLoginBrowserProxyImpl.instance_ = testBrowserProxy;
PolymerTest.clearBody();
parentSigninComponent = document.createElement('edu-login-parent-signin');
parentSigninComponent.parent = fakeParent;
document.body.appendChild(parentSigninComponent);
flush();
passwordField = parentSigninComponent.$$('#passwordField');
});
teardown(function() {
parentSigninComponent.remove();
});
test(assert(edu_login_parent_signin_tests.TestNames.Initialize), function() {
assertEquals(
loadTimeData.getStringF('parentSigninTitle', fakeParent.displayName),
parentSigninComponent.$$('h1').textContent.trim());
assertFalse(passwordField.classList.contains('error'));
assertEquals('password', passwordField.type);
assertEquals(
'edu-login-icons:show-password-icon',
parentSigninComponent.$$('.password-icon').getAttribute('iron-icon'));
assertTrue(parentSigninComponent.$$('edu-login-button[button-type="next"]')
.disabled);
assertTrue(parentSigninComponent.$$('.error-message').hidden);
});
test(
assert(edu_login_parent_signin_tests.TestNames.WrongPassword),
function() {
testBrowserProxy.setParentSigninResponse(
() => Promise.reject({isWrongPassword: true}));
parentSigninComponent.password_ = 'fake-password';
assertFalse(
parentSigninComponent.$$('edu-login-button[button-type="next"]')
.disabled);
clickButton('next');
testBrowserProxy.whenCalled('parentSignin').then(function() {
assertTrue(passwordField.classList.contains('error'));
assertFalse(parentSigninComponent.$$('.error-message').hidden);
});
});
test(
assert(edu_login_parent_signin_tests.TestNames.ParentSigninSuccess),
function() {
let goNextCalls = 0;
parentSigninComponent.addEventListener('go-next', function() {
goNextCalls++;
});
testBrowserProxy.setParentSigninResponse(
() => Promise.resolve('fake-rapt'));
parentSigninComponent.password_ = 'fake-password';
assertFalse(
parentSigninComponent.$$('edu-login-button[button-type="next"]')
.disabled);
assertEquals(0, goNextCalls);
clickButton('next');
testBrowserProxy.whenCalled('parentSignin').then(function() {
assertEquals(1, goNextCalls);
assertFalse(passwordField.classList.contains('error'));
assertTrue(parentSigninComponent.$$('.error-message').hidden);
});
});
test(
assert(edu_login_parent_signin_tests.TestNames.ShowHidePassword),
function() {
const passwordIcon = parentSigninComponent.$$('.password-icon');
assertEquals('password', passwordField.type);
assertEquals(
'edu-login-icons:show-password-icon',
passwordIcon.getAttribute('iron-icon'));
passwordIcon.click();
assertEquals('text', passwordField.type);
assertEquals(
'edu-login-icons:hide-password-icon',
passwordIcon.getAttribute('iron-icon'));
});
test(assert(edu_login_parent_signin_tests.TestNames.ClearState), function() {
testBrowserProxy.setParentSigninResponse(
() => Promise.reject({isWrongPassword: true}));
parentSigninComponent.password_ = 'fake-password';
clickButton('next');
testBrowserProxy.whenCalled('parentSignin').then(function() {
clickButton('back');
assertEquals('', passwordField.value);
assertFalse(passwordField.classList.contains('error'));
assertTrue(parentSigninComponent.$$('.error-message').hidden);
});
});
});
...@@ -10,6 +10,7 @@ import {assert} from 'chrome://resources/js/assert.m.js'; ...@@ -10,6 +10,7 @@ import {assert} from 'chrome://resources/js/assert.m.js';
import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {TestBrowserProxy} from '../../test_browser_proxy.m.js'; import {TestBrowserProxy} from '../../test_browser_proxy.m.js';
import {getFakeParent} from './edu_login_test_util.js';
window.edu_login_parents_tests = {}; window.edu_login_parents_tests = {};
edu_login_parents_tests.suiteName = 'EduLoginParentsTest'; edu_login_parents_tests.suiteName = 'EduLoginParentsTest';
...@@ -22,22 +23,6 @@ edu_login_parents_tests.TestNames = { ...@@ -22,22 +23,6 @@ edu_login_parents_tests.TestNames = {
SelectedParent: 'Selected parent', SelectedParent: 'Selected parent',
}; };
/**
* @param {string} email
* @param {string} displayName
* @param {string} profileImage
* @param {string} obfuscatedGaiaId
* @return {ParentAccount}
*/
function getFakeParent(email, displayName, profileImage, obfuscatedGaiaId) {
return {
email: email,
displayName: displayName,
profileImage: profileImage,
obfuscatedGaiaId: obfuscatedGaiaId,
};
}
/** @return {Array<ParentAccount>} */ /** @return {Array<ParentAccount>} */
function getFakeParentsList() { function getFakeParentsList() {
return [ return [
......
// 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.
/**
* @param {string} email
* @param {string} displayName
* @param {string} profileImage
* @param {string} obfuscatedGaiaId
* @return {ParentAccount}
*/
export function getFakeParent(
email, displayName, profileImage, obfuscatedGaiaId) {
return {
email: email,
displayName: displayName,
profileImage: profileImage,
obfuscatedGaiaId: obfuscatedGaiaId,
};
}
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