diff --git a/packages/inbound-email-handler/src/index.ts b/packages/inbound-email-handler/src/index.ts index 3b9cd48b5..43e4fdb5f 100644 --- a/packages/inbound-email-handler/src/index.ts +++ b/packages/inbound-email-handler/src/index.ts @@ -17,6 +17,7 @@ import { SubstackHandler } from './substack-handler' import { AxiosHandler } from './axios-handler' import { BloombergHandler } from './bloomberg-handler' import { GolangHandler } from './golang-handler' +import { MorningBrewHandler } from './morning-brew-handler' const NON_NEWSLETTER_EMAIL_TOPIC = 'nonNewsletterEmailReceived' const pubsub = new PubSub() @@ -26,6 +27,7 @@ const NEWSLETTER_HANDLERS = [ new AxiosHandler(), new BloombergHandler(), new GolangHandler(), + new MorningBrewHandler(), ] export const getNewsletterHandler = ( diff --git a/packages/inbound-email-handler/src/morning-brew-handler.ts b/packages/inbound-email-handler/src/morning-brew-handler.ts new file mode 100644 index 000000000..6f5478c63 --- /dev/null +++ b/packages/inbound-email-handler/src/morning-brew-handler.ts @@ -0,0 +1,10 @@ +import { NewsletterHandler } from './newsletter' + +export class MorningBrewHandler extends NewsletterHandler { + constructor() { + super() + this.senderRegex = /Morning Brew / + this.urlRegex = /View Online<\/a>/ + this.defaultUrl = 'https://www.morningbrew.com' + } +} diff --git a/packages/inbound-email-handler/test/newsletter.test.ts b/packages/inbound-email-handler/test/newsletter.test.ts index dba9f0952..726032755 100644 --- a/packages/inbound-email-handler/test/newsletter.test.ts +++ b/packages/inbound-email-handler/test/newsletter.test.ts @@ -9,6 +9,7 @@ import { AxiosHandler } from '../src/axios-handler' import { BloombergHandler } from '../src/bloomberg-handler' import { GolangHandler } from '../src/golang-handler' import { getNewsletterHandler } from '../src' +import { MorningBrewHandler } from '../src/morning-brew-handler' describe('Confirmation email test', () => { describe('#isConfirmationEmail()', () => { @@ -77,6 +78,15 @@ describe('Newsletter email test', () => { GolangHandler ) }) + + it('should return MorningBrewHandler when email is from Morning Brew', () => { + const from = 'Morning Brew ' + const unSubRawUrl = '' + + expect(getNewsletterHandler('', from, unSubRawUrl)).to.be.instanceof( + MorningBrewHandler + ) + }) }) describe('#getNewsletterUrl()', () => { @@ -114,6 +124,17 @@ describe('Newsletter email test', () => { expect(new GolangHandler().parseNewsletterUrl('', html)).to.equal(url) }) + + it('returns url when email is from Morning Brew', () => { + const url = 'https://www.morningbrew.com/daily/issues/first' + const html = ` + View Online + ` + + expect(new MorningBrewHandler().parseNewsletterUrl('', html)).to.equal( + url + ) + }) }) describe('get author from email address', () => {