import sinon, { SinonStub } from 'sinon'; import { expect } from '../../../test-utils'; import { generateApiDocsPrompt } from '../apidocs-prompt'; import * as getApiDocsPromptExports from '../../helpers/get-api-docs-prompt'; import * as writeFileExports from '../../helpers/write-file'; import * as checkValidProductModuleDirectoryExports from '../../helpers/check-valid-product-module-directory'; import { RootConfigWrite } from '../../domain/root-config'; describe('rp api-docs-prompt', () => { const sandbox = sinon.createSandbox(); let writeFileStub: SinonStub; const productModuleConfig = { productModuleKey: 'funeral', host: 'https://api.rootplatform.com', organizationId: '00000000-0000-0000-0000-000000000001', } as unknown as RootConfigWrite; beforeEach(() => { sandbox.stub(checkValidProductModuleDirectoryExports, 'checkValidProductModuleDirectory').returns(); writeFileStub = sandbox.stub(writeFileExports, 'writeFile').resolves(); sandbox.stub(console, 'log'); }); afterEach(() => { sandbox.verifyAndRestore(); }); it('substitutes every occurrence of [host] with the sandbox URL, not just the first', async () => { const serverPrompt = [ 'curl -X POST [host]/v1/insurance/quotes', 'curl -X POST [host]/v1/insurance/applications', 'curl -X GET [host]/v1/insurance/policies', 'Docs live at [host]/docs.', ].join('\n'); sandbox.stub(getApiDocsPromptExports, 'getApiDocsPrompt').resolves({ prompt: serverPrompt }); await generateApiDocsPrompt({ apiKey: 'key', productModuleConfig }); const writtenContent = writeFileStub.firstCall.args[1] as string; expect(writtenContent).to.not.contain('[host]'); expect(writtenContent.match(/https:\/\/sandbox\.rootplatform\.com/g)).to.have.lengthOf(4); }); it('substitutes every occurrence of [productModuleKey]', async () => { const serverPrompt = 'The [productModuleKey] module lives at [host]/v1/insurance/[productModuleKey]/quotes'; sandbox.stub(getApiDocsPromptExports, 'getApiDocsPrompt').resolves({ prompt: serverPrompt }); await generateApiDocsPrompt({ apiKey: 'key', productModuleConfig }); const writtenContent = writeFileStub.firstCall.args[1] as string; expect(writtenContent).to.not.contain('[productModuleKey]'); expect(writtenContent.match(/funeral/g)).to.have.lengthOf(2); }); it('uses the sandbox host even when called against a production host', async () => { sandbox .stub(getApiDocsPromptExports, 'getApiDocsPrompt') .resolves({ prompt: 'Hit [host]/v1/insurance/quotes to see quotes.' }); await generateApiDocsPrompt({ apiKey: 'key', productModuleConfig }); const writtenContent = writeFileStub.firstCall.args[1] as string; expect(writtenContent).to.contain('https://sandbox.rootplatform.com'); expect(writtenContent).to.not.contain('https://api.rootplatform.com'); }); });