UNPKG

@clerk/testing

Version:

Utilities to help you create E2E test suites for apps using Clerk

10 lines (6 loc) 5.05 kB
"use strict";var y=Object.create;var l=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var K=Object.getPrototypeOf,L=Object.prototype.hasOwnProperty;var w=(e,t)=>{for(var r in t)l(e,r,{get:t[r],enumerable:!0})},C=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of S(t))!L.call(e,n)&&n!==r&&l(e,n,{get:()=>t[n],enumerable:!(o=T(t,n))||o.enumerable});return e};var I=(e,t,r)=>(r=e!=null?y(K(e)):{},C(t||!e||!e.__esModule?l(r,"default",{value:e,enumerable:!0}):r,e)),b=e=>C(l({},"__esModule",{value:!0}),e);var R={};w(R,{addClerkCommands:()=>f,clerkSetup:()=>g,setupClerkTestingToken:()=>d});module.exports=b(R);var k="__clerk_testing_token";var m=require("@clerk/backend"),c=require("@clerk/shared/keys"),u=I(require("dotenv")),E=async e=>{let{debug:t=!1,dotenv:r=!0,...o}=e||{},n=a=>{t&&console.log(`Clerk: ${a}`)};n("Setting up Clerk..."),r&&u.default.config({path:[".env.local",".env"]});let i=o.publishableKey||process.env.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY||process.env.VITE_CLERK_PUBLISHABLE_KEY||process.env.CLERK_PUBLISHABLE_KEY||process.env.REACT_APP_CLERK_PUBLISHABLE_KEY||process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY,p=o.secretKey||process.env.CLERK_SECRET_KEY,s=process.env.CLERK_TESTING_TOKEN;if(!i)throw new Error("You need to set the CLERK_PUBLISHABLE_KEY environment variable.");if(!p&&!s)throw new Error("You need to set the CLERK_SECRET_KEY or the CLERK_TESTING_TOKEN environment variable.");if(p&&!s){if((0,c.isProductionFromSecretKey)(p))throw new Error("You are using a secret key from a production instance, but Testing Tokens only work in development instances.");n("Fetching testing token from Clerk Backend API...");try{let a=o?.apiUrl||process.env.CLERK_API_URL;s=(await(0,m.createClerkClient)({secretKey:p,apiUrl:a}).testingTokens.createTestingToken()).token}catch(a){throw console.error("Failed to fetch testing token from Clerk API."),a}}return{CLERK_FAPI:e?.frontendApiUrl||(0,c.parsePublishableKey)(i)?.frontendApi,CLERK_TESTING_TOKEN:s}};var h="The Clerk Frontend API URL is required to bypass bot protection. Make sure the clerkSetup function is called during your global setup before setupClerkTestingToken is called.";var _=async({signInParams:e,windowObject:t})=>{try{let r=t||window;if(!r.Clerk.client)return;let o=r.Clerk.client.signIn;if(e.strategy==="password"){let n=await o.create(e);await r.Clerk.setActive({session:n.createdSessionId})}else{if(e.strategy==="phone_code"&&!/^\+1\d{3}55501\d{2}$/.test(e.identifier))throw new Error(`Phone number should be a test phone number. Example: +1XXX55501XX. Learn more here: https://clerk.com/docs/testing/test-emails-and-phones#phone-numbers`);if(e.strategy==="email_code"&&!e.identifier.includes("+clerk_test"))throw new Error(`Email should be a test email. Any email with the +clerk_test subaddress is a test email address. Learn more here: https://clerk.com/docs/testing/test-emails-and-phones#email-addresses`);let{supportedFirstFactors:n}=await o.create({identifier:e.identifier}),i=e.strategy==="phone_code"?s=>s.strategy==="phone_code":s=>s.strategy==="email_code",p=n?.find(i);if(p){let s=e.strategy==="phone_code"?{strategy:e.strategy,phoneNumberId:p.phoneNumberId}:{strategy:e.strategy,emailAddressId:p.emailAddressId};await o.prepareFirstFactor(s);let a=await o.attemptFirstFactor({strategy:e.strategy,code:"424242"});if(a.status==="complete")await r.Clerk.setActive({session:a.createdSessionId});else throw new Error(`Status is ${a.status}`)}else throw new Error(`${e.strategy} is not enabled.`)}}catch(r){throw new Error(`Clerk: Failed to sign in: ${r?.message}`)}};var g=async({config:e,options:t})=>{if(!e)throw new Error("The Cypress config object is required.");let{CLERK_FAPI:r,CLERK_TESTING_TOKEN:o}=await E(t);return e.env.CLERK_FAPI=r,e.env.CLERK_TESTING_TOKEN=o,e};var d=e=>{let t=e?.options?.frontendApiUrl||Cypress.env("CLERK_FAPI");if(!t)throw new Error(h);let r=`https://${t}/v1/**`;cy.intercept(r,o=>{let n=Cypress.env("CLERK_TESTING_TOKEN");n&&(o.query[k]=n),o.continue(),o.on("response",i=>{i.body?.response?.captcha_bypass===!1&&(i.body.response.captcha_bypass=!0),i.body?.client?.captcha_bypass===!1&&(i.body.client.captcha_bypass=!0)})})};var f=({Cypress:e,cy:t})=>{e.Commands.add("clerkSignIn",r=>{d(),t.log("Clerk: Signing in..."),t.window().should(o=>{expect(o).to.not.have.property("Clerk",void 0),expect(o.Clerk.loaded).to.eq(!0)}).then(async o=>{await _({windowObject:o,signInParams:r}),t.log("Clerk: Finished signing in.")})}),e.Commands.add("clerkSignOut",r=>{t.log("Clerk: Signing out..."),t.window().should(o=>{expect(o).to.not.have.property("Clerk",void 0),expect(o.Clerk.loaded).to.eq(!0)}).then(async o=>{await o.Clerk.signOut(r),t.log("Clerk: Finished signing out.")})}),e.Commands.add("clerkLoaded",()=>{t.window().should(r=>{expect(r).to.not.have.property("Clerk",void 0),expect(r.Clerk.loaded).to.eq(!0)})})};0&&(module.exports={addClerkCommands,clerkSetup,setupClerkTestingToken}); //# sourceMappingURL=index.js.map