Save fs.blog newsletter correctly

This commit is contained in:
Hongbo Wu
2022-10-17 17:59:27 +08:00
parent 9cc180d43b
commit 37439c6622
3 changed files with 1334 additions and 3 deletions

View File

@ -8,10 +8,13 @@ export class ConvertkitHandler extends ContentHandler {
}
findNewsletterHeaderHref(dom: Document): string | undefined {
const readOnline = dom.querySelectorAll('table tr td a')
const readOnline = dom.querySelectorAll('a')
let res: string | undefined = undefined
readOnline.forEach((e) => {
if (e.textContent === 'View this email in your browser') {
if (
e.textContent === 'View this email in your browser' ||
e.textContent === 'Read on FS'
) {
res = e.getAttribute('href') || undefined
}
})
@ -27,7 +30,7 @@ export class ConvertkitHandler extends ContentHandler {
const dom = parseHTML(input.html).document
return Promise.resolve(
dom.querySelectorAll(
'img[src*="convertkit.com"], img[src*="convertkit-mail.com"]'
'img[src*="convertkit.com"], img[src*="convertkit-mail"]'
).length > 0
)
}

File diff suppressed because it is too large Load Diff

View File

@ -12,6 +12,7 @@ import nock from 'nock'
import { generateUniqueUrl } from '../src/content-handler'
import fs from 'fs'
import { BeehiivHandler } from '../src/newsletters/beehiiv-handler'
import { ConvertkitHandler } from '../src/newsletters/convertkit-handler'
chai.use(chaiAsPromised)
chai.use(chaiString)
@ -147,6 +148,17 @@ describe('Newsletter email test', () => {
})
).to.eventually.be.true
})
it('returns true for convertkit newsletter', async () => {
const html = load('./test/data/convertkit-newsletter.html')
await expect(
new ConvertkitHandler().isNewsletter({
html,
postHeader: '',
from: '',
unSubHeader: '',
})
).to.eventually.be.true
})
})
describe('findNewsletterUrl', async () => {
@ -203,6 +215,30 @@ describe('Newsletter email test', () => {
}).timeout(10000)
})
context('when email is from convertkit', () => {
before(() => {
nock('https://u25184427.ct.sendgrid.net')
.head(
'/ls/click?upn=MnmHBiCwIPe9TmIJeskmA7wDTJvdVU1ACmSJ753YuhScf71JWthxqM8RnVh-2FZG0rYzrbR04P99S2ld2OkTtQmrx2FDwArpYdk5N0jVpN9dLBZ-2BdPNqkRHxNvuygY8-2F-2FtRNFoPjxjtTuyWM6L3tcYDYnAnL2xCueddWcFlUNrQWsvLotmgvC-2BrQc7bxsZhW0pUBmS_vVXscVLXlj5UtQe3aqo5RMTdTq2PepdZjP86UOmA8nzSBnnaDN-2FNHWDodWnbUOPZ063v3w3z8QtcaPpE1qNu8xYkNJJFb-2F1uZEG-2BzsLfyDkjvvVX5zYs5OyyRYlhMOlXDJcr4-2FtMrFwii0uFAvwbhxDdnTxEpi-2F7maufyH39AEO-2BtCeSUg5V4FM43UpI1zUSXeWK-2Fh5JumSmR5XhrrRAig-3D-3D'
)
.reply(302, undefined, {
Location: 'https://fs.blog/brain-food/october-16-2022/',
})
.get('/brain-food/october-16-2022/')
.reply(200, '')
})
after(() => {
nock.restore()
})
it('gets the URL from the header', async () => {
const html = load('./test/data/convertkit-newsletter.html')
const url = await new ConvertkitHandler().findNewsletterUrl(html)
expect(url).to.startWith('https://fs.blog/brain-food/october-16-2022/')
}).timeout(10000)
})
it('returns undefined if it is not a newsletter', async () => {
const html = load('./test/data/substack-forwarded-welcome-email.html')
const url = await new SubstackHandler().findNewsletterUrl(html)