@clerk/testing
Version:
Utilities to help you create E2E test suites for apps using Clerk
10 lines (6 loc) • 5.48 kB
JavaScript
;var S=Object.create;var l=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var w=Object.getPrototypeOf,I=Object.prototype.hasOwnProperty;var b=(e,o)=>{for(var r in o)l(e,r,{get:o[r],enumerable:!0})},d=(e,o,r,t)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of T(o))!I.call(e,n)&&n!==r&&l(e,n,{get:()=>o[n],enumerable:!(t=y(o,n))||t.enumerable});return e};var L=(e,o,r)=>(r=e!=null?S(w(e)):{},d(o||!e||!e.__esModule?l(r,"default",{value:e,enumerable:!0}):r,e)),K=e=>d(l({},"__esModule",{value:!0}),e);var R={};b(R,{addClerkCommands:()=>g,clerkSetup:()=>f,setupClerkTestingToken:()=>p});module.exports=K(R);var C="__clerk_testing_token";var k=require("@clerk/backend"),m=require("@clerk/shared/keys"),u=L(require("dotenv")),E=async e=>{let{debug:o=!1,dotenv:r=!0,...t}=e||{},n=a=>{o&&console.log(`Clerk: ${a}`)};n("Setting up Clerk..."),r&&u.default.config({path:[".env.local",".env"]});let i=t.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,s=t.secretKey||process.env.CLERK_SECRET_KEY,c=process.env.CLERK_TESTING_TOKEN;if(!i)throw new Error("You need to set the CLERK_PUBLISHABLE_KEY environment variable.");if(!s&&!c)throw new Error("You need to set the CLERK_SECRET_KEY or the CLERK_TESTING_TOKEN environment variable.");if(s&&!c){n("Fetching testing token from Clerk Backend API...");try{let a=t?.apiUrl||process.env.CLERK_API_URL;c=(await(0,k.createClerkClient)({secretKey:s,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,m.parsePublishableKey)(i)?.frontendApi,CLERK_TESTING_TOKEN:c}};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:o})=>{try{let r=o||window;if(!r.Clerk.client)return;let t=r.Clerk.client.signIn;switch(e.strategy){case"password":{let n=await t.create(e);await r.Clerk.setActive({session:n.createdSessionId});break}case"ticket":{let n=await t.create({strategy:"ticket",ticket:e.ticket});if(n.status==="complete")await r.Clerk.setActive({session:n.createdSessionId});else throw new Error(`Sign-in with ticket failed. Status: ${n.status}`);break}case"phone_code":{if(!/^\+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`);let{supportedFirstFactors:n}=await t.create({identifier:e.identifier}),i=n?.find(s=>s.strategy==="phone_code");if(i){await t.prepareFirstFactor({strategy:"phone_code",phoneNumberId:i.phoneNumberId});let s=await t.attemptFirstFactor({strategy:"phone_code",code:"424242"});if(s.status==="complete")await r.Clerk.setActive({session:s.createdSessionId});else throw new Error(`Status is ${s.status}`)}else throw new Error("phone_code is not enabled.");break}case"email_code":{if(!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 t.create({identifier:e.identifier}),i=n?.find(s=>s.strategy==="email_code");if(i){await t.prepareFirstFactor({strategy:"email_code",emailAddressId:i.emailAddressId});let s=await t.attemptFirstFactor({strategy:"email_code",code:"424242"});if(s.status==="complete")await r.Clerk.setActive({session:s.createdSessionId});else throw new Error(`Status is ${s.status}`)}else throw new Error("email_code is not enabled.");break}default:throw new Error(`Unsupported strategy: ${e.strategy}`)}}catch(r){throw new Error(`Clerk: Failed to sign in: ${r?.message}`)}};var f=async({config:e,options:o})=>{if(!e)throw new Error("The Cypress config object is required.");let{CLERK_FAPI:r,CLERK_TESTING_TOKEN:t}=await E(o);return e.env.CLERK_FAPI=r,e.env.CLERK_TESTING_TOKEN=t,e};var p=e=>{let o=e?.options?.frontendApiUrl||Cypress.env("CLERK_FAPI");if(!o)throw new Error(h);let r=`https://${o}/v1/**`;cy.intercept(r,t=>{let n=Cypress.env("CLERK_TESTING_TOKEN");n&&(t.query[C]=n),t.continue(),t.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 g=({Cypress:e,cy:o})=>{e.Commands.add("clerkSignIn",r=>{p(),o.log("Clerk: Signing in..."),o.window().should(t=>{expect(t).to.not.have.property("Clerk",void 0),expect(t.Clerk.loaded).to.eq(!0)}).then(async t=>{await _({windowObject:t,signInParams:r}),o.log("Clerk: Finished signing in.")})}),e.Commands.add("clerkSignOut",r=>{o.log("Clerk: Signing out..."),o.window().should(t=>{expect(t).to.not.have.property("Clerk",void 0),expect(t.Clerk.loaded).to.eq(!0)}).then(async t=>{await t.Clerk.signOut(r),o.log("Clerk: Finished signing out.")})}),e.Commands.add("clerkLoaded",()=>{o.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