From 884f837bd7226e6cd2d062e61efe427ff5fff141 Mon Sep 17 00:00:00 2001 From: Naz Date: Thu, 17 Feb 2022 15:31:48 +0700 Subject: [PATCH] Improved webhooks e2e test bootstrap speed refs https://github.com/TryGhost/Toolbox/issues/214 - Calling `getMembersAPIAgent` and `getAdminAPIAgent` separately was booting Ghost twice, which caused a significant performance degradation. - Additionally, having two calls was slightly ugly and having once utility function that delivers multiple agents at once feels like more readable syntax --- test/e2e-api/members/webhooks.test.js | 7 +++-- test/utils/e2e-framework.js | 38 ++++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/test/e2e-api/members/webhooks.test.js b/test/e2e-api/members/webhooks.test.js index c393598868..332d12e49f 100644 --- a/test/e2e-api/members/webhooks.test.js +++ b/test/e2e-api/members/webhooks.test.js @@ -14,8 +14,11 @@ describe('Members API', function () { // And it's initialised at boot - so mocking it before // Probably wanna replace this with a settinfs fixture mock or smth?? mockManager.setupStripe(); - membersAgent = await agentProvider.getMembersAPIAgent(); - adminAgent = await agentProvider.getAdminAPIAgent(); + + const agents = await agentProvider.getAgentsForMembers(); + membersAgent = agents.membersAgent; + adminAgent = agents.adminAgent; + await fixtureManager.init('members'); await adminAgent.loginAsOwner(); }); diff --git a/test/utils/e2e-framework.js b/test/utils/e2e-framework.js index b0d8576b2e..ebcc7e5560 100644 --- a/test/utils/e2e-framework.js +++ b/test/utils/e2e-framework.js @@ -196,11 +196,47 @@ const getMembersAPIAgent = async () => { } }; +/** + * + * @returns {Promise<{adminAgent: TestAgent, membersAgent: TestAgent}>} agent + */ +const getAgentsForMembers = async () => { + let membersAgent; + let adminAgent; + + const bootOptions = { + frontend: true + }; + + try { + const app = await startGhost(bootOptions); + const originURL = configUtils.config.get('url'); + + membersAgent = new TestAgent(app, { + apiURL: '/members/', + originURL + }); + adminAgent = new TestAgent(app, { + apiURL: '/ghost/api/canary/admin/', + originURL + }); + } catch (error) { + error.message = `Unable to create test agent. ${error.message}`; + throw error; + } + + return { + adminAgent, + membersAgent + }; +}; + module.exports = { // request agent agentProvider: { getAdminAPIAgent, - getMembersAPIAgent + getMembersAPIAgent, + getAgentsForMembers }, // Mocks and Stubs