UNPKG

@extractus/feed-extractor

Version:

To read and normalize RSS/ATOM/JSON feed data

141 lines (134 loc) 3.56 kB
// linker.test import { describe, it } from 'node:test' import assert from 'node:assert' import { isValid, absolutify, purify } from './linker.js' describe('test exported methods from `linker`', () => { const cases = [ { url: 'https://www.23hq.com', expected: true, }, { url: 'https://secure.actblue.com', expected: true, }, { url: 'https://docs.microsoft.com/en-us/azure/iot-edge/quickstart?view=iotedge-2018-06', expected: true, }, { url: 'http://192.168.1.199:8081/example/page', expected: true, }, { url: 'ftp://192.168.1.199:8081/example/page', expected: false, }, { url: '', expected: false, }, { url: null, expected: false, }, { url: { a: 'x' }, expected: false, }, ] cases.forEach(({ url, expected }) => { it(`isValid("${url}") must return "${expected}"`, () => { const result = isValid(url) assert.equal(result, expected) }) }) const entries = [ { full: '', expected: '', }, { relative: {}, expected: '', }, { full: 'https://some.where/article/abc-xyz', relative: 'category/page.html', expected: 'https://some.where/article/category/page.html', }, { full: 'https://some.where/article/abc-xyz', relative: '../category/page.html', expected: 'https://some.where/category/page.html', }, { full: 'https://some.where/blog/authors/article/abc-xyz', relative: '/category/page.html', expected: 'https://some.where/category/page.html', }, { full: 'https://some.where/article/abc-xyz', expected: 'https://some.where/article/abc-xyz', }, ] entries.forEach((entry) => { const { full, relative = '', expected, } = entry it(`absolutify("${full}", "${relative}") must become "${expected}"`, () => { const result = absolutify(full, relative) assert.equal(result, expected) }) }) it('test url purify() with invalid url', () => { const urls = [ null, '', 123, {}, ] urls.forEach((url) => { const result = purify(url) assert.equal(result, null) }) }) it('test url purify() removing regular marketing params', () => { const entries = [ { url: 'https://some.where/article/abc-xyz', expected: 'https://some.where/article/abc-xyz', }, { url: 'https://some.where/article/abc-xyz#name,bob', expected: 'https://some.where/article/abc-xyz', }, { url: 'https://some.where/article/abc-xyz?utm_source=news4&utm_medium=email&utm_campaign=spring-summer', expected: 'https://some.where/article/abc-xyz', }, { url: 'https://some.where/article/abc-xyz?q=3&utm_source=news4&utm_medium=email&utm_campaign=spring-summer', expected: 'https://some.where/article/abc-xyz?q=3', }, { url: 'https://some.where/article/abc-xyz?pk_source=news4&pk_medium=email&pk_campaign=spring-summer', expected: 'https://some.where/article/abc-xyz', }, { url: 'https://some.where/article/abc-xyz?q=3&pk_source=news4&pk_medium=email&pk_campaign=spring-summer', expected: 'https://some.where/article/abc-xyz?q=3', }, ] entries.forEach((entry) => { const { url, expected, } = entry const result = purify(url) assert.equal(result, expected) }) }) })