UNPKG

url-metadata

Version:

Request a url and scrape the metadata from its HTML using Node.js or the browser.

85 lines (77 loc) 2.78 kB
const urlMetadata = require('./../index') test('fails gracefully with malformed url param', async () => { const url = 'XYZ' try { const metadata = await urlMetadata(url) // should not reach here, but just in case: expect(metadata).toBeUndefined() } catch (err) { expect(err).toBeDefined() expect(err.message).toContain('Only absolute URLs are supported') } }) test('fails gracefully when url param is missing', async () => { try { const metadata = await urlMetadata(null) // should not reach here, but just in case: expect(metadata).toBeUndefined() } catch (err) { expect(err).toBeDefined() expect(err.message).toContain('url parameter is missing') } }) test('fails gracefully on !response.ok', async () => { // should 404 const url = 'https://www.npmjs.com/packageXXX/url-metadataXXX' try { const metadata = await urlMetadata(url) // should not reach here, but just in case: expect(metadata).toBeUndefined() } catch (err) { expect(err).toBeDefined() expect(err.message).toContain('response code 404') } }) test('fails gracefully when fetching non text/html', async () => { const url = 'https://upload.wikimedia.org/wikipedia/commons/thumb/9/98/International_Pok%C3%A9mon_logo.svg/500px-International_Pok%C3%A9mon_logo.svg.png' try { const metadata = await urlMetadata(url) // should not reach here, but just in case: expect(metadata).toBeUndefined() } catch (err) { expect(err).toBeDefined() expect(err.message).toContain('unsupported content type') } }) test('fails gracefully decoding with bad charset', async () => { const url = 'https://www.npmjs.com/package/url-metadata' try { const metadata = await urlMetadata(url, { decode: 'FOO-BAR' }) // should not reach here, but just in case: expect(metadata).toBeUndefined() } catch (err) { expect(err).toBeDefined() expect(err.message).toContain('decoding with charset') } }) test('fails gracefully when option `parseResponseObject` is empty object', async () => { try { // pass null `url` param & empty response object const metadata = await urlMetadata(null, { parseResponseObject: {} }) // should not reach here, but just in case: expect(metadata).toBeUndefined() } catch (err) { expect(err).toBeDefined() expect(err.message).toContain('response code undefined') } }) test('fails gracefully when option: `parseResponseObject` is null AND url is null', async () => { try { const metadata = await urlMetadata(null, { parseResponseObject: null }) // should not reach here, but just in case: expect(metadata).toBeUndefined() } catch (err) { expect(err).toBeDefined() expect(err.message).toContain('url parameter is missing') } })