Ghost/ghost/email-analytics-service/test/event-processing-result.test.js
Kevin Ansfield 88c648636c Initial update of email analytics packages to work as external modules
refs https://github.com/TryGhost/Ghost/pull/12541

- make `EventProcessor` a super-class designed to be inherited from in consumer applications for application-level implementation
  - helps to keep application-level concerns for event handling (eg, what to do with spam complaints) and things like application database knowledge in the consumer
- removed all database knowledge from `EmailAnalyticsService`
  - requires a `queries` option to be passed in that lets the consuming application provide knowledge and define how fetched stats should be aggregated
2021-02-24 21:23:56 +00:00

134 lines
4.2 KiB
JavaScript

// Switch these lines once there are useful utils
// const testUtils = require('./utils');
require('./utils');
const {EventProcessingResult} = require('..');
describe('EventProcessingResult', function () {
it('has expected initial state', function () {
const result = new EventProcessingResult();
result.delivered.should.equal(0);
result.opened.should.equal(0);
result.temporaryFailed.should.equal(0);
result.permanentFailed.should.equal(0);
result.unsubscribed.should.equal(0);
result.complained.should.equal(0);
result.unhandled.should.equal(0);
result.unprocessable.should.equal(0);
result.processingFailures.should.equal(0);
result.emailIds.should.deepEqual([]);
result.memberIds.should.deepEqual([]);
});
it('has expected populated initial state', function () {
const result = new EventProcessingResult({
delivered: 1,
opened: 2,
temporaryFailed: 3,
permanentFailed: 4,
unsubscribed: 5,
complained: 6,
unhandled: 7,
unprocessable: 8,
processingFailures: 9,
emailIds: [1,2,3],
memberIds: [4,5]
});
result.delivered.should.equal(1);
result.opened.should.equal(2);
result.temporaryFailed.should.equal(3);
result.permanentFailed.should.equal(4);
result.unsubscribed.should.equal(5);
result.complained.should.equal(6);
result.unhandled.should.equal(7);
result.unprocessable.should.equal(8);
result.processingFailures.should.equal(9);
result.emailIds.should.deepEqual([1,2,3]);
result.memberIds.should.deepEqual([4,5]);
});
it('has correct totalEvents value', function () {
const result = new EventProcessingResult({
delivered: 1,
opened: 2,
temporaryFailed: 3,
permanentFailed: 4,
unsubscribed: 5,
complained: 6,
unhandled: 7,
unprocessable: 8,
processingFailures: 9, // not counted
emailIds: [1,2,3],
memberIds: [4,5]
});
result.totalEvents.should.equal(36);
});
describe('merge()', function () {
it('adds counts and merges id arrays', function () {
const result = new EventProcessingResult({
delivered: 1,
opened: 2,
temporaryFailed: 3,
permanentFailed: 4,
unsubscribed: 5,
complained: 6,
unhandled: 7,
unprocessable: 8,
processingFailures: 9, // not counted
emailIds: [1,2,3],
memberIds: [4,5]
});
result.merge({
delivered: 2,
opened: 4,
temporaryFailed: 6,
permanentFailed: 8,
unsubscribed: 10,
complained: 12,
unhandled: 14,
unprocessable: 16,
processingFailures: 18, // not counted
emailIds: [4,5,6],
memberIds: [6,7]
});
result.delivered.should.equal(3);
result.opened.should.equal(6);
result.temporaryFailed.should.equal(9);
result.permanentFailed.should.equal(12);
result.unsubscribed.should.equal(15);
result.complained.should.equal(18);
result.unhandled.should.equal(21);
result.unprocessable.should.equal(24);
result.processingFailures.should.equal(27);
result.emailIds.should.deepEqual([1,2,3,4,5,6]);
result.memberIds.should.deepEqual([4,5,6,7]);
});
it('deduplicates id arrays', function () {
const result = new EventProcessingResult({
emailIds: [1,2,3],
memberIds: [9,8,7]
});
result.merge({
emailIds: [1,4,2,3,1],
memberIds: [8,7,8,6]
});
result.emailIds.should.deepEqual([1,2,3,4]);
result.memberIds.should.deepEqual([9,8,7,6]);
});
});
});