const request = require('supertest'); const path = require('path'); const fs = require('fs'); const os = require('os'); const { app } = require('../src/app'); const services = require('../src/services'); jest.mock('../src/services'); // jest uses fake/dummy functions instead of the real ones describe('POST /api/documents', () => { let dummyFileExcel; let dummyFilePdf; beforeAll(() => { dummyFileExcel = path.join(os.tmpdir(), 'test_file.xlsx'); dummyFilePdf = path.join(os.tmpdir(), 'test_file.pdf'); fs.writeFileSync(dummyFileExcel, 'dummy file excel content'); fs.writeFileSync(dummyFilePdf, 'dummy pdf file content'); }); afterAll(() => { if (fs.existsSync(dummyFileExcel)) fs.unlinkSync(dummyFileExcel); if (fs.existsSync(dummyFilePdf)) fs.unlinkSync(dummyFilePdf); }); it('should process files and return status 200 when helpers succeed', async() => { // this tells the fake functions what to return services.splitExcelFile.mockResolvedValue(5); // Returns 5 rows services.splitPDF.mockResolvedValue(['/tmp/page1.pdf']); // Returns 1 temp file services.initializeSalesforceConnection.mockResolvedValue(); // Simulates success services.attachPdfToAccount.mockResolvedValue(); // Simulates success // this makes test request to Express const response = await request(app) .post('/api/documents') .field('title', 'Quarterly Report') .attach('documents', dummyFileExcel) .attach('documents', dummyFilePdf); // assertions => verify express responded properly and called our service expect(response.statusCode).toBe(200); expect(response.body).toEqual({ ok: true, message: 'Files uploaded successfully!' }); // Verify helpers were actually called expect(services.splitExcelFile).toHaveBeenCalledTimes(1); expect(services.splitPDF).toHaveBeenCalledTimes(1); expect(services.initializeSalesforceConnection).toHaveBeenCalledTimes(1); expect(services.cleanUp).toHaveBeenCalledTimes(2); }) });