UNPKG

auth0-lock

Version:
270 lines (268 loc) 11.6 kB
"use strict"; 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) }); }); }); });