auth0-lock
Version:
Auth0 Lock
81 lines (77 loc) • 3.78 kB
JavaScript
;
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
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 _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
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');
var sanitized = html.props.dangerouslySetInnerHTML.__html;
expect(sanitized).not.toMatch(/javascript:alert/);
expect(sanitized).toMatch(/src="1"/);
expect(sanitized).toMatch(/href="1"/);
expect(sanitized).toMatch(/<img[^>]*>/);
});
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>');
});
});
});