const tape = require('tape'); const _test = require('tape-promise').default; // <---- notice 'default' const test = _test(tape); // decorate tape const fs = require('fs'); const jsonfile = require('jsonfile'); const cheerio = require('cheerio'); const France = require('../ncas/fr'); const piIndex = fs.readFileSync('tests/data/fr/pi_index.html'); const emoneyIndex = fs.readFileSync('tests/data/fr/emoney_index.html'); const correctLinks = [{ 'link': '/spip.php?type=advanced&denomination=&siren=&cib=&bic=&nom=&siren_agent=&num=&cat=21-TBR07&retrait=0&lang=en&id_secteur=3&pg=6&page=af&id=355', 'title': 'Tempo France' }, { 'link': '/spip.php?type=advanced&denomination=&siren=&cib=&bic=&nom=&siren_agent=&num=&cat=21-TBR07&retrait=0&lang=en&id_secteur=3&pg=6&page=af&id=364', 'title': 'U ETABLISSEMENT DE PAIEMENT' }, { 'link': '/spip.php?type=advanced&denomination=&siren=&cib=&bic=&nom=&siren_agent=&num=&cat=21-TBR07&retrait=0&lang=en&id_secteur=3&pg=6&page=af&id=359', 'title': 'Webhelp Payment Services France' }]; const creditList = fs.readFileSync('tests/data/fr/credit_list.html'); const paymentInstitute = fs.readFileSync('tests/data/fr/payment_institute.html'); const eMoney = fs.readFileSync('tests/data/fr/emoney.html'); const creditInstitute = fs.readFileSync('tests/data/fr/credit_institute.html'); const piDetails = jsonfile.readFileSync('tests/data/fr/piDetails.json'); const piFrenchActivity = jsonfile.readFileSync('tests/data/fr/piFrenchActivity.json'); const piEuropeActivity = jsonfile.readFileSync('tests/data/fr/piEuropeActivity.json'); const emoneyDetails = jsonfile.readFileSync('tests/data/fr/emoney_details.json'); const emoneyFrenchActivity = jsonfile.readFileSync('tests/data/fr/emoneyFrenchActivity.json'); const emoneyEuropeActivity = jsonfile.readFileSync('tests/data/fr/emoneyEuropeActivity.json'); const emoneyListData = jsonfile.readFileSync('tests/data/fr/emoney_index.json'); const creditListData = jsonfile.readFileSync('tests/data/fr/credit_list.json'); const creditDetails = jsonfile.readFileSync('tests/data/fr/creditDetails.json'); const creditData = jsonfile.readFileSync('tests/data/fr/creditInstituteData.json'); // *** Breaking Pges *** const breakingCr001 = fs.readFileSync('tests/data/fr/breaking_CI_001.html'); const breakingCr001Data = jsonfile.readFileSync('tests/data/fr/breaking_CI_001.json'); const failure = { 'fail':true }; const empty = {}; test('FRANCE:: Scrape Indexes', async t => { const frScraper = new France(); t.test('Extract PI Search links', async t => { const $ = cheerio.load(piIndex); const $table = $('table.table tr'); const links = await frScraper.extractLinks($table); const linkCount = links.length; t.equal(linkCount, 3, 'Scrapes the correct number of links (3)'); t.deepEquals(links, correctLinks, 'Links match the data'); t.end(); }); t.test('Extract EMoney Search links', async t => { const $ = cheerio.load(emoneyIndex); const $table = $('table.table tr'); const links = await frScraper.extractLinks($table); const linkCount = links.length; t.equal(linkCount, 10, 'Scrapes the correct number of links (10)'); t.deepEquals(links, emoneyListData, 'Links match the data'); t.end(); }); t.test('Extract Credit List Search links', async t => { const $ = cheerio.load(creditList); const $table = $('table.table tr'); const links = await frScraper.extractLinks($table, true); const linkCount = links.length; t.equal(linkCount, 1, 'Scrapes the correct number of links (1)'); t.deepEquals(links, creditListData, 'Credit Links match the data'); t.end(); }); t.end(); }); test('FRANCE Scrape a Payment Instititute', async t => { const frScraper = new France(); t.test('FRANCE::Extract Details from Page', async t => { const $ = cheerio.load(paymentInstitute); const output = await frScraper.extractDetails($); t.deepEquals(output, piDetails, 'Extracted Details from Page'); t.end(); }); t.test('FRANCE::Extract French Payment Activity', async t => { const $ = cheerio.load(paymentInstitute); const frenchTbl = $('#zone_en_france > table tr'); const output = await frScraper.extractDataFromTable(frenchTbl); t.deepEquals(output, piFrenchActivity, 'Extracted French Payment Activity'); t.end(); }); t.test('FRANCE::Extract European Payment Activity', async t => { const $ = cheerio.load(paymentInstitute); const euroTbls = $('#zone_en_europe'); output = await frScraper.extractEuroData(euroTbls); t.deepEquals(output, piEuropeActivity, 'Extracted European Payment Activity'); t.end(); }); t.end(); }); test('FRANCE Scrape EMoney', async t => { const frScraper = new France(); t.test('FRANCE::Extract Details from Page', async t => { const $ = cheerio.load(eMoney); const output = await frScraper.extractDetails($); t.deepEquals(output, emoneyDetails, 'Extracted Details from Page'); t.end(); }); t.test('FRANCE::Extract French Payment Activity', async t => { const $ = cheerio.load(eMoney); const frenchTbl = $('#zone_en_france > table tr'); const output = await frScraper.extractDataFromTable(frenchTbl); t.deepEquals(output, emoneyFrenchActivity, 'Extracted French Payment Activity'); t.end(); }); t.test('FRANCE::Extract European Payment Activity', async t => { const $ = cheerio.load(eMoney); const euroTbls = $('#zone_en_europe'); output = await frScraper.extractEuroData(euroTbls); t.deepEquals(output, emoneyEuropeActivity, 'Extracted European Payment Activity'); t.end(); }); t.end(); }); test('FRANCE Scrape Credit Insititute', async t => { const frScraper = new France(); t.test('FRANCE::Extract Details from Page', async t => { const $ = cheerio.load(creditInstitute); const output = await frScraper.extractDetails($); t.deepEquals(output, creditDetails, 'Extracted Details from Page'); t.end(); }); t.test('FRANCE::Extract French Payment Activity', async t => { const $ = cheerio.load(creditInstitute); const frenchTbl = $('#zone_en_france > table.petite-police.services-invest tr'); const output = await frScraper.extractDataFromInvestmentServicesTable(frenchTbl); t.deepEquals(output, creditData, 'Extracted Credit Instituet Activity'); t.end(); }); t.end(); }); test('FRANCE Breaking CI 001', async t => { const frScraper = new France(); t.test('FRANCE::Extract Details from Page', async t => { const $ = cheerio.load(breakingCr001); const output = await frScraper.extractDetails($); t.deepEquals(output, breakingCr001Data, 'Extracted Details from Page'); t.end(); }); t.end(); }); test('FRANCE:: DIR-3741', async t => { const dir3741001 = fs.readFileSync('tests/data/fr/dir3741_001.html'); const dir3741001Data = jsonfile.readFileSync('tests/data/fr/dir3741_001.json'); const dir3741002 = fs.readFileSync('tests/data/fr/dir3741_002.html'); const dir3741002Data = jsonfile.readFileSync('tests/data/fr/dir3741_002.json'); const dir3741003 = fs.readFileSync('tests/data/fr/dir3741_003.html'); const dir3741003Data = jsonfile.readFileSync('tests/data/fr/dir3741_003.json'); const frScraper = new France(); t.test('FRANCE::Extract Details from Page 1/103', async t => { const $ = cheerio.load(dir3741001); const $table = $('table.table tr'); const links = await frScraper.extractLinks($table, true); const linkCount = links.length; t.equal(linkCount, 1, 'Scrapes the correct number of links (1)'); t.deepEquals(links, dir3741001Data, 'Links match the data'); t.end(); }); t.test('FRANCE::Extract Details from Page 4/103', async t => { const $ = cheerio.load(dir3741002); const $table = $('table.table tr'); const links = await frScraper.extractLinks($table, true); const linkCount = links.length; t.equal(linkCount, 3, 'Scrapes the correct number of links (3)'); t.deepEquals(links, dir3741002Data, 'Links match the data'); t.end(); }); t.test('FRANCE::Extract Details from Page 11/103', async t => { const $ = cheerio.load(dir3741003); const $table = $('table.table tr'); const links = await frScraper.extractLinks($table, true); const linkCount = links.length; t.equal(linkCount, 2, 'Scrapes the correct number of links (2)'); t.deepEquals(links, dir3741003Data, 'Links match the data'); t.end(); }); t.end(); });