fix(tests): Update test assertions and refine service interfaces

This commit is contained in:
2025-05-07 22:06:55 +00:00
parent 630e911589
commit 7e931d6c52
18 changed files with 391 additions and 105 deletions

View File

@ -7,7 +7,8 @@ import { SenderReputationMonitor } from '../ts/deliverability/classes.senderrepu
const cleanupTestData = () => {
const reputationDataPath = plugins.path.join(paths.dataDir, 'reputation');
if (plugins.fs.existsSync(reputationDataPath)) {
plugins.smartfile.memory.unlinkDir(reputationDataPath);
// Remove the directory recursively using fs instead of smartfile
plugins.fs.rmSync(reputationDataPath, { recursive: true, force: true });
}
};
@ -27,11 +28,11 @@ tap.test('should initialize SenderReputationMonitor with default settings', asyn
resetSingleton();
const reputationMonitor = SenderReputationMonitor.getInstance();
expect(reputationMonitor).to.be.an('object');
expect(reputationMonitor).toBeTruthy();
// Check if the object has the expected methods
expect(reputationMonitor.recordSendEvent).to.be.a('function');
expect(reputationMonitor.getReputationData).to.be.a('function');
expect(reputationMonitor.getReputationSummary).to.be.a('function');
expect(typeof reputationMonitor.recordSendEvent).toEqual('function');
expect(typeof reputationMonitor.getReputationData).toEqual('function');
expect(typeof reputationMonitor.getReputationSummary).toEqual('function');
});
// Test initialization with custom settings
@ -52,8 +53,8 @@ tap.test('should initialize SenderReputationMonitor with custom settings', async
// Test retrieving reputation data
const data = reputationMonitor.getReputationData('example.com');
expect(data).to.be.an('object');
expect(data.domain).to.equal('example.com');
expect(data).toBeTruthy();
expect(data.domain).toEqual('example.com');
});
// Test recording and tracking send events
@ -74,12 +75,12 @@ tap.test('should record send events and update metrics', async () => {
// Check metrics
const metrics = reputationMonitor.getReputationData('example.com');
expect(metrics).to.be.an('object');
expect(metrics.volume.sent).to.equal(100);
expect(metrics.volume.delivered).to.equal(95);
expect(metrics.volume.hardBounces).to.equal(3);
expect(metrics.volume.softBounces).to.equal(2);
expect(metrics.complaints.total).to.equal(1);
expect(metrics).toBeTruthy();
expect(metrics.volume.sent).toEqual(100);
expect(metrics.volume.delivered).toEqual(95);
expect(metrics.volume.hardBounces).toEqual(3);
expect(metrics.volume.softBounces).toEqual(2);
expect(metrics.complaints.total).toEqual(1);
});
// Test reputation score calculation
@ -105,14 +106,14 @@ tap.test('should calculate reputation scores correctly', async () => {
// Get reputation summary
const summary = reputationMonitor.getReputationSummary();
expect(summary).to.be.an('array');
expect(summary.length).to.be.at.least(3);
expect(Array.isArray(summary)).toBeTrue();
expect(summary.length >= 3).toBeTrue();
// Check that domains are included in the summary
const domains = summary.map(item => item.domain);
expect(domains).to.include('high.com');
expect(domains).to.include('medium.com');
expect(domains).to.include('low.com');
expect(domains.includes('high.com')).toBeTrue();
expect(domains.includes('medium.com')).toBeTrue();
expect(domains.includes('low.com')).toBeTrue();
});
// Test adding and removing domains
@ -131,15 +132,15 @@ tap.test('should add and remove domains for monitoring', async () => {
// Check that data was recorded for the new domain
const metrics = reputationMonitor.getReputationData('newdomain.com');
expect(metrics).to.be.an('object');
expect(metrics.volume.sent).to.equal(50);
expect(metrics).toBeTruthy();
expect(metrics.volume.sent).toEqual(50);
// Remove a domain
reputationMonitor.removeDomain('newdomain.com');
// Check that data is no longer available
const removedMetrics = reputationMonitor.getReputationData('newdomain.com');
expect(removedMetrics).to.be.null;
expect(removedMetrics === null).toBeTrue();
});
// Test handling open and click events
@ -160,11 +161,11 @@ tap.test('should track engagement metrics correctly', async () => {
// Check engagement metrics
const metrics = reputationMonitor.getReputationData('example.com');
expect(metrics).to.be.an('object');
expect(metrics.engagement.opens).to.equal(500);
expect(metrics.engagement.clicks).to.equal(250);
expect(metrics.engagement.openRate).to.be.a('number');
expect(metrics.engagement.clickRate).to.be.a('number');
expect(metrics).toBeTruthy();
expect(metrics.engagement.opens).toEqual(500);
expect(metrics.engagement.clicks).toEqual(250);
expect(typeof metrics.engagement.openRate).toEqual('number');
expect(typeof metrics.engagement.clickRate).toEqual('number');
});
// Test historical data tracking
@ -186,13 +187,13 @@ tap.test('should store historical reputation data', async () => {
const metrics = reputationMonitor.getReputationData('example.com');
// Check that historical data exists
expect(metrics.historical).to.be.an('object');
expect(metrics.historical.reputationScores).to.be.an('object');
expect(metrics.historical).toBeTruthy();
expect(metrics.historical.reputationScores).toBeTruthy();
// Check that daily send volume is tracked
expect(metrics.volume.dailySendVolume).to.be.an('object');
expect(metrics.volume.dailySendVolume).toBeTruthy();
const todayStr = today.toISOString().split('T')[0];
expect(metrics.volume.dailySendVolume[todayStr]).to.equal(1000);
expect(metrics.volume.dailySendVolume[todayStr]).toEqual(1000);
});
// Test event recording for different event types
@ -216,18 +217,18 @@ tap.test('should correctly handle different event types', async () => {
const metrics = reputationMonitor.getReputationData('example.com');
// Check volume metrics
expect(metrics.volume.sent).to.equal(100);
expect(metrics.volume.delivered).to.equal(95);
expect(metrics.volume.hardBounces).to.equal(3);
expect(metrics.volume.softBounces).to.equal(2);
expect(metrics.volume.sent).toEqual(100);
expect(metrics.volume.delivered).toEqual(95);
expect(metrics.volume.hardBounces).toEqual(3);
expect(metrics.volume.softBounces).toEqual(2);
// Check complaint metrics
expect(metrics.complaints.total).to.equal(1);
expect(metrics.complaints.topDomains[0].domain).to.equal('gmail.com');
expect(metrics.complaints.total).toEqual(1);
expect(metrics.complaints.topDomains[0].domain).toEqual('gmail.com');
// Check engagement metrics
expect(metrics.engagement.opens).to.equal(50);
expect(metrics.engagement.clicks).to.equal(25);
expect(metrics.engagement.opens).toEqual(50);
expect(metrics.engagement.clicks).toEqual(25);
});
// After all tests, clean up
@ -235,4 +236,8 @@ tap.test('cleanup', async () => {
cleanupTestData();
});
tap.test('stop', async () => {
await tap.stopForcefully();
});
export default tap.start();