auth0-lock
Version:
Auth0 Lock
79 lines (75 loc) • 4.23 kB
JavaScript
;
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
var _immutable = _interopRequireDefault(require("immutable"));
var _flat = _interopRequireDefault(require("flat"));
var _en = _interopRequireDefault(require("../i18n/en"));
var _es = _interopRequireDefault(require("../i18n/es"));
var sync = _interopRequireWildcard(require("../sync"));
var l = _interopRequireWildcard(require("../core/index"));
var _sanitizer = require("../sanitizer");
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
describe('i18n', function () {
var syncSpy;
var langSpy;
beforeEach(function () {
syncSpy = jest.spyOn(sync, 'default');
langSpy = jest.spyOn(l.ui, 'language').mockImplementation(function () {
return 'en';
});
});
afterEach(function () {
syncSpy.mockRestore();
langSpy.mockRestore();
});
describe('load i18n configuration', function () {
it('should have a defaultDictionary', function () {
var i18n = require('../i18n');
// We need to initialize the state
var m = _immutable.default.fromJS({});
// Initialize i18n.
var initialized = i18n.initI18n(m);
var language = (0, _flat.default)(initialized.getIn(['i18n', 'strings']).toJS());
var en = (0, _flat.default)(_en.default);
expect(language).toEqual(en);
});
});
describe('when en language is selected', function () {
it('should allow check for external en dictionaries', function () {
var i18n = require('../i18n');
i18n.initI18n(_immutable.default.fromJS({}));
expect(syncSpy).toHaveBeenCalledTimes(1);
});
});
describe('when html is called', function () {
it('should sanitize the input and not allow for javascript to be passed through', function () {
var i18n = require('../i18n');
var strings = {
test: '<img src=1 href=1 onerror="javascript:alert(1)"></img>'
};
var m = _immutable.default.fromJS({
i18n: {
strings: strings
}
});
var html = i18n.html(m, 'test');
expect(html.props.dangerouslySetInnerHTML.__html).not.toMatch(/javascript:alert/);
expect(html.props.dangerouslySetInnerHTML.__html).toEqual('<img href="1" src="1">');
});
it('should allow target=_blank with noopener noreferrer attributes', function () {
(0, _sanitizer.initSanitizer)();
var i18n = require('../i18n');
var strings = {
test: '<a href="#" target="_blank">link</a>'
};
var m = _immutable.default.fromJS({
i18n: {
strings: strings
}
});
var html = i18n.html(m, 'test');
expect(html.props.dangerouslySetInnerHTML.__html).toEqual('<a href="#" target="_blank" rel="noopener noreferrer">link</a>');
});
});
});