/**
* Test Setup
* Global test configuration and setup for Mocha tests
*/
import chai from 'chai';
import sinon from 'sinon';
import sinonChai from 'sinon-chai';
// Configure Chai
chai.use(sinonChai);
// Global test configuration
global.expect = chai.expect;
global.sinon = sinon;
// Set up global test hooks
beforeEach(() => {
// Create a sandbox for each test
global.sandbox = sinon.createSandbox();
});
afterEach(() => {
// Clean up after each test
if (global.sandbox) {
global.sandbox.restore();
}
});
// Global test utilities
global.createMockContext = () => {
return {
req: {
json: sinon.stub(),
},
json: sinon.stub(),
set: sinon.stub(),
};
};
global.createMockService = () => {
return {
getAllItems: sinon.stub(),
getItemById: sinon.stub(),
createItem: sinon.stub(),
updateItem: sinon.stub(),
deleteItem: sinon.stub(),
processItem: sinon.stub(),
};
};
// Test timeout configuration
const originalTimeout = 5000;
if (process.env.NODE_ENV === 'test') {
// Increase timeout for CI environments
global.testTimeout = process.env.CI ? 10000 : originalTimeout;
} else {
global.testTimeout = originalTimeout;
}
// Console override for cleaner test output
const originalConsole = console;
global.testConsole = {
log: process.env.TEST_VERBOSE ? originalConsole.log : () => {},
error: process.env.TEST_VERBOSE ? originalConsole.error : () => {},
warn: process.env.TEST_VERBOSE ? originalConsole.warn : () => {},
info: process.env.TEST_VERBOSE ? originalConsole.info : () => {},
};
// Override console during tests unless verbose mode is enabled
if (!process.env.TEST_VERBOSE) {
console.log = global.testConsole.log;
console.error = global.testConsole.error;
console.warn = global.testConsole.warn;
console.info = global.testConsole.info;
}
// Test environment setup
process.env.NODE_ENV = 'test';
console.log('Test environment initialized');