diff --git a/lib/services/ics-retriever.js b/lib/services/ics-retriever.js index 6946b38..5092bbe 100644 --- a/lib/services/ics-retriever.js +++ b/lib/services/ics-retriever.js @@ -3,7 +3,7 @@ const parseUsingDOM = require('./dom-parser') const generateICS = require('./ics-generator') const { createParserError, getNormalizedUrl } = require('../utils') -const extractEventDataFromHTML = (html, { logger }) => { +const extractEventDataFromHTML = (html, url, { logger }) => { const LDJSONEventData = parseUsingLDJSONData(html, { logger }) const rawEventData = LDJSONEventData || parseUsingDOM(html, { logger }) @@ -23,7 +23,7 @@ const extractEventDataFromHTML = (html, { logger }) => { const retrieveICS = async (URLparameter, { logger, crawl }) => { const url = getNormalizedUrl(URLparameter) const html = await crawl(url, { logger }) - const eventData = extractEventDataFromHTML(html, { logger }) + const eventData = extractEventDataFromHTML(html, url, { logger }) const icsContent = await generateICS(eventData) return icsContent diff --git a/lib/static/index.js b/lib/static/index.js index 0f720b1..05f2835 100644 --- a/lib/static/index.js +++ b/lib/static/index.js @@ -236,11 +236,11 @@ import generateICS from '../../lib/services/ics-generator' hydrateList() - const handleHTMLResponse = (html) => { + const handleHTMLResponse = (html, url) => { try { setStatusParsing() - const eventData = extractEventDataFromHTML(html, { logger }) + const eventData = extractEventDataFromHTML(html, url, { logger }) generateICS(eventData) .then((text) => { const dataUri = encodeURIComponent(text) @@ -287,7 +287,7 @@ import generateICS from '../../lib/services/ics-generator' postURL(formData) .then((res) => { res.text() - .then(handleHTMLResponse) + .then((response) => handleHTMLResponse(response, input.value)) .catch((err) => { handleError(err) }) diff --git a/test/log-utils.spec.js b/test/log-utils.spec.js new file mode 100644 index 0000000..012910b --- /dev/null +++ b/test/log-utils.spec.js @@ -0,0 +1,25 @@ +const { expect } = require('chai') +const winston = require('winston') + +const logUtils = require('../lib/log-utils') + +describe('logUtils', () => { + it('should create console transport for logging in dev mode', () => { + expect(logUtils.createTransports(true)[0]) + .to.be.instanceOf(winston.transports.Console) + }) + + + it('should NOT create console transport for logging in undefined mode', () => { + const transports = logUtils.createTransports() + + expect(transports).to.have.length(1) + expect(transports[0]).to.be.instanceOf(winston.transports.DailyRotateFile) + }) + + + it('should create log rotate transport for logging in dev mode', () => { + expect(logUtils.createTransports(true)[1]) + .to.be.instanceOf(winston.transports.DailyRotateFile) + }) +}) diff --git a/test/services/ics-retriever.spec.js b/test/services/ics-retriever.spec.js index 720aacd..f8d6414 100644 --- a/test/services/ics-retriever.spec.js +++ b/test/services/ics-retriever.spec.js @@ -12,9 +12,7 @@ const { clearMockCrawlResult, } = require('../../mocks/crawler.mock') -const { retrieveICS } = require('../../lib/services/ics-retriever') - -jest.mock('../../lib/services/crawler', () => mockCrawl) +const { retrieveICS, extractEventDataFromHTML } = require('../../lib/services/ics-retriever') describe(retrieveICS, () => { let logger @@ -35,7 +33,10 @@ describe(retrieveICS, () => { setMockCrawlResult(html) - const icsContent = await retrieveICS('https://facebook.com/events/123', { logger }) + const icsContent = await retrieveICS('https://facebook.com/events/123', { + logger, + crawl: mockCrawl, + }) expect(icsContent).to.be.ok }) @@ -52,13 +53,35 @@ describe(retrieveICS, () => { setMockCrawlResult(html) - const icsContent = await retrieveICS('https://facebook.com/events/123', { logger }) + const icsContent = await retrieveICS('https://facebook.com/events/123', { + logger, + crawl: mockCrawl, + }) expect(icsContent).to.include('SUMMARY:Test Event') expect(icsContent).to.include('LOCATION:Location X') }) + it('should extract event data using LDJSON', () => { + const html = ` + +
+ + + + ` + + const { location } = extractEventDataFromHTML( + html, + 'https://facebook.com/events/123', { + logger, + }) + + expect(location).to.equal('Location X') + }) + + it('should use create ICS contents based on DOM', async () => { const html = ` @@ -76,13 +99,41 @@ describe(retrieveICS, () => { setMockCrawlResult(html) - const icsContent = await retrieveICS('https://facebook.com/events/123', { logger }) + const icsContent = await retrieveICS('https://facebook.com/events/123', { + logger, + crawl: mockCrawl, + }) expect(icsContent).to.include('LOCATION:123 Main St. AcmeTown, Main area') }) - it('should throw parser error if no event data is found', async (callback) => { + it('should extract event data based on DOM', () => { + const html = ` + + +123 Main St.\nAcmeTownMain area |