@clerk/testing
Version:
Utilities to help you create E2E test suites for apps using Clerk
10 lines (6 loc) • 4.99 kB
JavaScript
;var y=Object.create;var p=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var L=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty;var I=(e,t)=>{for(var r in t)p(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))!w.call(e,n)&&n!==r&&p(e,n,{get:()=>t[n],enumerable:!(o=T(t,n))||o.enumerable});return e};var K=(e,t,r)=>(r=e!=null?y(L(e)):{},C(t||!e||!e.__esModule?p(r,"default",{value:e,enumerable:!0}):r,e)),b=e=>C(p({},"__esModule",{value:!0}),e);var R={};I(R,{addClerkCommands:()=>f,clerkSetup:()=>g,setupClerkTestingToken:()=>c});module.exports=b(R);var k="__clerk_testing_token";var m=require("@clerk/backend"),l=require("@clerk/shared/keys"),u=K(require("dotenv")),E=async e=>{let t=s=>{e?.debug&&console.log(`Clerk: ${s}`)};t("Setting up Clerk..."),u.default.config({path:[".env.local",".env"]});let r=e?.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,o=process.env.CLERK_SECRET_KEY,n=process.env.CLERK_TESTING_TOKEN;if(!r)throw new Error("You need to set the CLERK_PUBLISHABLE_KEY environment variable.");if(!o&&!n)throw new Error("You need to set the CLERK_SECRET_KEY or the CLERK_TESTING_TOKEN environment variable.");if(o&&!n){if((0,l.isProductionFromSecretKey)(o))throw new Error("You are using a secret key from a production instance, but Testing Tokens only work in development instances.");t("Fetching testing token from Clerk Backend API...");try{let s=process.env.CLERK_API_URL;n=(await(0,m.createClerkClient)({secretKey:o,apiUrl:s}).testingTokens.createTestingToken()).token}catch(s){throw console.error("Failed to fetch testing token from Clerk API."),s}}return{CLERK_FAPI:e?.frontendApiUrl||(0,l.parsePublishableKey)(r)?.frontendApi,CLERK_TESTING_TOKEN:n}};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"&&!e.identifier.includes("+155555501"))throw new Error(`Phone number should be a test phone number.
Example: +15555550100.
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}),s=e.strategy==="phone_code"?i=>i.strategy==="phone_code":i=>i.strategy==="email_code",a=n?.find(s);if(a){let i=e.strategy==="phone_code"?{strategy:e.strategy,phoneNumberId:a.phoneNumberId}:{strategy:e.strategy,emailAddressId:a.emailAddressId};await o.prepareFirstFactor(i);let d=await o.attemptFirstFactor({strategy:e.strategy,code:"424242"});if(d.status==="complete")await r.Clerk.setActive({session:d.createdSessionId});else throw new Error(`Status is ${d.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 c=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",s=>{s.body?.response?.captcha_bypass===!1&&(s.body.response.captcha_bypass=!0),s.body?.client?.captcha_bypass===!1&&(s.body.client.captcha_bypass=!0)})})};var f=({Cypress:e,cy:t})=>{e.Commands.add("clerkSignIn",r=>{c(),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