52 lines
2.0 KiB
JavaScript
52 lines
2.0 KiB
JavaScript
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);
|
|
})
|
|
}); |