auth0-lock
Version:
Auth0 Lock
270 lines (268 loc) • 11.6 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 _react = _interopRequireDefault(require("react"));
var _enzyme = require("enzyme");
var _testUtils = require("react-dom/test-utils");
var _immutable = _interopRequireDefault(require("immutable"));
var l = _interopRequireWildcard(require("../../../core/index"));
var _third_party_captcha = require("../../../field/captcha/third_party_captcha");
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 }; }
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
var createLockMock = function createLockMock() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$provider = _ref.provider,
provider = _ref$provider === void 0 ? 'auth0' : _ref$provider,
_ref$required = _ref.required,
required = _ref$required === void 0 ? true : _ref$required,
_ref$siteKey = _ref.siteKey,
siteKey = _ref$siteKey === void 0 ? '' : _ref$siteKey,
_ref$clientSubdomain = _ref.clientSubdomain,
clientSubdomain = _ref$clientSubdomain === void 0 ? '' : _ref$clientSubdomain;
return _immutable.default.fromJS({
id: '__lock-id__',
core: {
captcha: {
provider: provider,
siteKey: siteKey,
clientSubdomain: clientSubdomain,
required: required
}
}
});
};
describe('ThirdPartyCaptcha', function () {
var prevWindow;
var counter = 0;
beforeAll(function () {
prevWindow = global.window;
global.window.grecaptcha = {
render: jest.fn(),
enterprise: {
render: jest.fn()
}
};
global.window.hcaptcha = {
render: jest.fn()
};
global.window.friendlyChallenge = {
WidgetInstance: jest.fn().mockImplementation(function () {
var _jest;
return (_jest = jest).fn.apply(_jest, arguments);
})
};
global.window.turnstile = {
render: jest.fn(),
reset: function reset() {
var _global$window$turnst;
(_global$window$turnst = global.window.turnstile).render.apply(_global$window$turnst, _toConsumableArray(global.window.turnstile.render.mock.calls[counter]));
counter++;
}
};
});
afterAll(function () {
global.window = prevWindow;
});
describe('recaptchav2', function () {
var wrapper;
beforeAll(function () {
var lockMock = createLockMock({
provider: 'recaptcha_v2',
siteKey: 'mySiteKey'
});
var captcha = l.captcha(lockMock);
wrapper = (0, _enzyme.mount)(/*#__PURE__*/_react.default.createElement(_third_party_captcha.ThirdPartyCaptcha, {
provider: captcha.get('provider'),
sitekey: captcha.get('siteKey'),
clientSubdomain: captcha.get('clientSubdomain'),
hl: 'en',
isValid: true,
value: undefined
})).instance();
(0, _testUtils.act)(function () {
var injectCaptchaScriptSpy = jest.spyOn(wrapper, 'injectCaptchaScript');
wrapper.componentDidMount();
injectCaptchaScriptSpy.mock.calls[0][0]();
});
});
it('should call render with the correct renderParams', function () {
var renderParams = global.window.grecaptcha.render.mock.calls[0][1];
expect(renderParams).toEqual({
sitekey: 'mySiteKey',
callback: expect.any(Function),
'expired-callback': expect.any(Function),
'error-callback': expect.any(Function)
});
});
});
describe('friendly captcha', function () {
var wrapper;
beforeAll(function () {
var lockMock = createLockMock({
provider: 'friendly_captcha',
siteKey: 'mySiteKey'
});
var captcha = l.captcha(lockMock);
wrapper = (0, _enzyme.mount)(/*#__PURE__*/_react.default.createElement(_third_party_captcha.ThirdPartyCaptcha, {
provider: captcha.get('provider'),
sitekey: captcha.get('siteKey'),
clientSubdomain: captcha.get('clientSubdomain'),
hl: 'en',
isValid: true,
value: undefined
})).instance();
(0, _testUtils.act)(function () {
var injectCaptchaScriptSpy = jest.spyOn(wrapper, 'injectCaptchaScript');
wrapper.componentDidMount();
jest.spyOn(global.window.friendlyChallenge, 'WidgetInstance');
injectCaptchaScriptSpy.mock.calls[0][0]();
});
});
it('should call WidgetInstance constructor with the correct renderParams', function () {
var renderParams = global.window.friendlyChallenge.WidgetInstance.mock.calls[0][1];
expect(renderParams).toEqual({
sitekey: 'mySiteKey',
doneCallback: expect.any(Function),
errorCallback: expect.any(Function),
language: 'en'
});
});
});
describe('hcaptcha', function () {
var wrapper;
beforeAll(function () {
var lockMock = createLockMock({
provider: 'hcaptcha',
siteKey: 'mySiteKey'
});
var captcha = l.captcha(lockMock);
wrapper = (0, _enzyme.mount)(/*#__PURE__*/_react.default.createElement(_third_party_captcha.ThirdPartyCaptcha, {
provider: captcha.get('provider'),
sitekey: captcha.get('siteKey'),
clientSubdomain: captcha.get('clientSubdomain'),
hl: 'en',
isValid: true,
value: undefined
})).instance();
(0, _testUtils.act)(function () {
var injectCaptchaScriptSpy = jest.spyOn(wrapper, 'injectCaptchaScript');
wrapper.componentDidMount();
injectCaptchaScriptSpy.mock.calls[0][0]();
});
});
it('should call render with the correct renderParams', function () {
var renderCalls = global.window.hcaptcha.render.mock.calls;
var renderParams = renderCalls[0][1];
expect(renderParams).toEqual({
sitekey: 'mySiteKey',
callback: expect.any(Function),
'expired-callback': expect.any(Function),
'error-callback': expect.any(Function)
});
expect(renderCalls.length).toEqual(1);
});
it('should call render on update', function () {
(0, _testUtils.act)(function () {
wrapper.setState();
var renderCalls = global.window.hcaptcha.render.mock.calls;
expect(renderCalls.length).toEqual(1);
});
});
});
describe('auth0_v2', function () {
var wrapper;
beforeAll(function () {
var lockMock = createLockMock({
provider: 'auth0_v2',
siteKey: 'mySiteKey'
});
var captcha = l.captcha(lockMock);
wrapper = (0, _enzyme.mount)(/*#__PURE__*/_react.default.createElement(_third_party_captcha.ThirdPartyCaptcha, {
provider: captcha.get('provider'),
sitekey: captcha.get('siteKey'),
clientSubdomain: captcha.get('clientSubdomain'),
hl: 'en',
isValid: true,
value: undefined,
onChange: jest.fn()
})).instance();
(0, _testUtils.act)(function () {
var injectCaptchaScriptSpy = jest.spyOn(wrapper, 'injectCaptchaScript');
wrapper.componentDidMount();
injectCaptchaScriptSpy.mock.calls[0][0]();
});
});
it('should call render with the correct renderParams', function () {
var renderParams = global.window.turnstile.render.mock.calls[0][1];
expect(renderParams).toEqual({
sitekey: 'mySiteKey',
callback: expect.any(Function),
'expired-callback': expect.any(Function),
'error-callback': expect.any(Function),
language: 'en',
theme: 'light',
retry: 'never',
'response-field': false
});
});
it('should retry 3 times on error and then set value to BYPASS_CAPTCHA dummy token for failOpen', function () {
var renderParams = global.window.turnstile.render.mock.calls[0][1];
var _loop = function _loop() {
var renderParams = global.window.turnstile.render.mock.calls[i][1];
(0, _testUtils.act)(function () {
renderParams['error-callback']();
});
var retryCount = wrapper.state.retryCount;
var value = wrapper.props.value;
expect(retryCount).toBe(i + 1);
expect(value).toBe(undefined);
};
for (var i = 0; i < 3; i++) {
_loop();
}
(0, _testUtils.act)(function () {
return renderParams['error-callback']();
});
var onChange = wrapper.props.onChange;
expect(onChange.mock.calls).toHaveLength(1);
expect(onChange.mock.calls[0][0]).toBe('BYPASS_CAPTCHA');
});
});
describe('recaptcha enterprise', function () {
var wrapper;
beforeAll(function () {
var lockMock = createLockMock({
provider: 'recaptcha_enterprise',
siteKey: 'mySiteKey'
});
var captcha = l.captcha(lockMock);
wrapper = (0, _enzyme.mount)(/*#__PURE__*/_react.default.createElement(_third_party_captcha.ThirdPartyCaptcha, {
provider: captcha.get('provider'),
sitekey: captcha.get('siteKey'),
clientSubdomain: captcha.get('clientSubdomain'),
hl: 'en',
isValid: true,
value: undefined
})).instance();
(0, _testUtils.act)(function () {
var injectCaptchaScriptSpy = jest.spyOn(wrapper, 'injectCaptchaScript');
wrapper.componentDidMount();
injectCaptchaScriptSpy.mock.calls[0][0]();
});
});
it('should call render with the correct renderParams', function () {
var renderParams = global.window.grecaptcha.enterprise.render.mock.calls[0][1];
expect(renderParams).toEqual({
sitekey: 'mySiteKey',
callback: expect.any(Function),
'expired-callback': expect.any(Function),
'error-callback': expect.any(Function)
});
});
});
});