voluptasmollitia
Version:
Monorepo for the Firebase JavaScript SDK
336 lines (307 loc) • 9.86 kB
JavaScript
/**
* @license
* Copyright 2017 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @fileoverview Tests for authevent.js
*/
goog.provide('fireauth.AuthEventTest');
goog.require('fireauth.AuthError');
goog.require('fireauth.AuthEvent');
goog.require('fireauth.authenum.Error');
goog.require('goog.testing.jsunit');
goog.setTestOnly('fireauth.AuthEventTest');
var authEvent;
var authEvent2;
var authEventObject;
var authEventObject2;
var popupType = [
fireauth.AuthEvent.Type.SIGN_IN_VIA_POPUP,
fireauth.AuthEvent.Type.LINK_VIA_POPUP,
fireauth.AuthEvent.Type.REAUTH_VIA_POPUP
];
var redirectType = [
fireauth.AuthEvent.Type.SIGN_IN_VIA_REDIRECT,
fireauth.AuthEvent.Type.LINK_VIA_REDIRECT,
fireauth.AuthEvent.Type.REAUTH_VIA_REDIRECT
];
function setUp() {
authEvent = new fireauth.AuthEvent(
fireauth.AuthEvent.Type.SIGN_IN_VIA_POPUP,
null,
'http://www.example.com/#oauthResponse',
'SESSION_ID',
null,
'POST_BODY');
authEvent2 = new fireauth.AuthEvent(
fireauth.AuthEvent.Type.SIGN_IN_VIA_REDIRECT,
'12345678',
null,
null,
new fireauth.AuthError(fireauth.authenum.Error.INTERNAL_ERROR));
authEvent3 = new fireauth.AuthEvent(
fireauth.AuthEvent.Type.SIGN_IN_VIA_REDIRECT,
null,
'http://www.example.com/#oauthResponse',
'SESSION_ID',
null,
null,
'TENANT_ID');
authEvent4 = new fireauth.AuthEvent(
fireauth.AuthEvent.Type.SIGN_IN_VIA_POPUP,
'12345678',
'http://www.example.com/#oauthResponse',
'SESSION_ID',
null,
null,
'TENANT_ID');
authEventObject = {
'type': 'signInViaPopup',
'eventId': null,
'urlResponse': 'http://www.example.com/#oauthResponse',
'sessionId': 'SESSION_ID',
'error': null,
'postBody': 'POST_BODY',
'tenantId': null
};
authEventObject2 = {
'type': 'signInViaRedirect',
'eventId': '12345678',
'urlResponse': null,
'sessionId': null,
'error': {
'code': fireauth.AuthError.ERROR_CODE_PREFIX +
fireauth.authenum.Error.INTERNAL_ERROR,
'message': 'An internal error has occurred.'
},
'postBody': null,
'tenantId': null
};
authEventObject3 = {
'type': 'signInViaRedirect',
'eventId': null,
'urlResponse': 'http://www.example.com/#oauthResponse',
'sessionId': 'SESSION_ID',
'error': null,
'postBody': null,
'tenantId': 'TENANT_ID'
};
authEventObject4 = {
'type': 'signInViaPopup',
'eventId': '12345678',
'urlResponse': 'http://www.example.com/#oauthResponse',
'sessionId': 'SESSION_ID',
'error': null,
'postBody': null,
'tenantId': 'TENANT_ID'
};
}
function tearDown() {
authEvent = null;
authEvent2 = null;
authEventObject = null;
authEventObject2 = null;
}
/**
* Asserts that two errors are equivalent. Plain assertObjectEquals cannot be
* used as Internet Explorer adds the stack trace as a property of the object.
* @param {!Error} expected
* @param {!Error} actual
*/
function assertErrorEquals(expected, actual) {
assertEquals(expected.code, actual.code);
assertEquals(expected.message, actual.message);
}
function testAuthEvent_isRedirect() {
// Popup types should return false.
for (var i = 0; i < popupType.length; i++) {
assertFalse(fireauth.AuthEvent.isRedirect(
new fireauth.AuthEvent(
popupType[i],
null,
'http://www.example.com/#oauthResponse',
'SESSION_ID')));
}
// Unknown event type should return false.
assertFalse(fireauth.AuthEvent.isRedirect(
new fireauth.AuthEvent(
fireauth.AuthEvent.Type.UNKNOWN,
null,
null,
null,
new fireauth.AuthError(fireauth.authenum.Error.INTERNAL_ERROR))));
// verifyApp event type should return false.
assertFalse(fireauth.AuthEvent.isRedirect(
new fireauth.AuthEvent(
fireauth.AuthEvent.Type.VERIFY_APP,
null,
'http://www.example.com/#oauthResponse',
'blank')));
// Redirect types should return true.
for (var i = 0; i < redirectType.length; i++) {
assertTrue(fireauth.AuthEvent.isRedirect(
new fireauth.AuthEvent(
redirectType[i],
null,
'http://www.example.com/#oauthResponse',
'SESSION_ID')));
}
}
function testAuthEvent_isPopup() {
// Popup types should return true.
for (var i = 0; i < popupType.length; i++) {
assertTrue(fireauth.AuthEvent.isPopup(
new fireauth.AuthEvent(
popupType[i],
null,
'http://www.example.com/#oauthResponse',
'SESSION_ID')));
}
// Unknown event type should return false.
assertFalse(fireauth.AuthEvent.isPopup(
new fireauth.AuthEvent(
fireauth.AuthEvent.Type.UNKNOWN,
null,
null,
null,
new fireauth.AuthError(fireauth.authenum.Error.INTERNAL_ERROR))));
// verifyApp event type should return false.
assertFalse(fireauth.AuthEvent.isPopup(
new fireauth.AuthEvent(
fireauth.AuthEvent.Type.VERIFY_APP,
null,
'http://www.example.com/#oauthResponse',
'blank')));
// Redirect types should return false.
for (var i = 0; i < redirectType.length; i++) {
assertFalse(fireauth.AuthEvent.isPopup(
new fireauth.AuthEvent(
redirectType[i],
null,
'http://www.example.com/#oauthResponse',
'SESSION_ID')));
}
}
function testAuthEvent_error() {
try {
new fireauth.AuthEvent(
fireauth.AuthEvent.Type.SIGN_IN_VIA_POPUP);
fail('Auth event requires either an error or a URL response.');
} catch(error) {
assertErrorEquals(
new fireauth.AuthError(fireauth.authenum.Error.INVALID_AUTH_EVENT),
error);
}
try {
new fireauth.AuthEvent(
fireauth.AuthEvent.Type.SIGN_IN_VIA_POPUP,
'12345678',
'http://www.example.com/#oauthResponse',
'SESSION_ID',
new fireauth.AuthError(fireauth.authenum.Error.INTERNAL_ERROR));
fail('Auth event cannot have a URL response and an error.');
} catch(error) {
assertErrorEquals(
new fireauth.AuthError(fireauth.authenum.Error.INVALID_AUTH_EVENT),
error);
}
try {
new fireauth.AuthEvent(
fireauth.AuthEvent.Type.SIGN_IN_VIA_POPUP,
null,
'http://www.example.com/#oauthResponse');
fail('Auth event cannot have a URL response without a session ID.');
} catch(error) {
assertErrorEquals(
new fireauth.AuthError(fireauth.authenum.Error.INVALID_AUTH_EVENT),
error);
}
}
function testAuthEvent() {
var unknownEvent = new fireauth.AuthEvent(
fireauth.AuthEvent.Type.UNKNOWN,
null,
null,
null,
new fireauth.AuthError(fireauth.authenum.Error.INTERNAL_ERROR));
assertEquals('unknown', unknownEvent.getUid());
assertEquals(
fireauth.AuthEvent.Type.SIGN_IN_VIA_POPUP,
authEvent.getType());
assertEquals(
'http://www.example.com/#oauthResponse', authEvent.getUrlResponse());
assertEquals(
'SESSION_ID', authEvent.getSessionId());
assertEquals('POST_BODY', authEvent.getPostBody());
assertNull(authEvent.getEventId());
assertNull(authEvent.getError());
assertFalse(authEvent.hasError());
assertEquals('signInViaPopup-SESSION_ID', authEvent.getUid());
assertEquals(
fireauth.AuthEvent.Type.SIGN_IN_VIA_REDIRECT,
authEvent2.getType());
assertEquals('12345678', authEvent2.getEventId());
assertErrorEquals(
new fireauth.AuthError(fireauth.authenum.Error.INTERNAL_ERROR),
authEvent2.getError());
assertTrue(authEvent2.hasError());
assertNull(authEvent2.getPostBody());
assertEquals('signInViaRedirect-12345678', authEvent2.getUid());
assertEquals(
fireauth.AuthEvent.Type.SIGN_IN_VIA_REDIRECT,
authEvent3.getType());
assertNull(authEvent3.getEventId());
assertNull(authEvent3.getError());
assertFalse(authEvent3.hasError());
assertNull(authEvent3.getPostBody());
assertEquals('TENANT_ID', authEvent3.getTenantId());
assertEquals(
fireauth.AuthEvent.Type.SIGN_IN_VIA_POPUP,
authEvent4.getType());
assertEquals('12345678', authEvent4.getEventId());
assertNull(authEvent4.getError());
assertFalse(authEvent4.hasError());
assertNull(authEvent4.getPostBody());
assertEquals('TENANT_ID', authEvent4.getTenantId());
}
function testAuthEvent_toPlainObject() {
assertObjectEquals(
authEventObject,
authEvent.toPlainObject());
assertObjectEquals(
authEventObject2,
authEvent2.toPlainObject());
assertObjectEquals(
authEventObject3,
authEvent3.toPlainObject());
assertObjectEquals(
authEventObject4,
authEvent4.toPlainObject());
}
function testAuthEvent_fromPlainObject() {
assertObjectEquals(
authEvent,
fireauth.AuthEvent.fromPlainObject(authEventObject));
assertObjectEquals(
authEvent2,
fireauth.AuthEvent.fromPlainObject(authEventObject2));
assertObjectEquals(
authEvent3,
fireauth.AuthEvent.fromPlainObject(authEventObject3));
assertObjectEquals(
authEvent4,
fireauth.AuthEvent.fromPlainObject(authEventObject4));
assertNull(fireauth.AuthEvent.fromPlainObject({}));
}