/* eslint-env mocha */ 'use strict'; const assert = require('chai').assert; const Wappalyzer = require('../src/wappalyzer'); describe('should analyze website elements properly', function () { it('should analyze html', async () => { const html = ` Page title | Html detection

Technologies Test Page | Html detection

`; const wappalyzer = new Wappalyzer(); wappalyzer.apps = { "Google Tag Manager": { "html": [ "googletagmanager\\.com/ns\\.html[^>]+>", "" ] } }; var applications = null; wappalyzer.driver = { log () {}, displayApps (detectedMap) { applications = detectedMap; } }; await wappalyzer.analyze({ canonical: 'example.com' }, { html }); assert.equal(applications['Google Tag Manager'].name, 'Google Tag Manager'); }); it('should analyze scripts', async () => { const scripts = [ 'http://www.google-analytics.com/analytics.js', 'http://example.com/assets/js/jquery.min.js' ]; const wappalyzer = new Wappalyzer(); wappalyzer.apps = { "Google Analytics": { "cats": [ 10 ], "script": "google-analytics\\.com\\/(?:ga|urchin|(analytics))\\.js\\;version:\\1?UA:" }, "jQuery": { "script": [ "jquery(?:\\-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1", "/([\\d.]+)/jquery(?:\\.min)?\\.js\\;version:\\1", "jquery.*\\.js(?:\\?ver(?:sion)?=([\\d.]+))?\\;version:\\1" ] } }; var applications = null; wappalyzer.driver = { log () {}, displayApps (detectedMap) { applications = detectedMap; } }; await wappalyzer.analyze({ canonical: 'example.com' }, { scripts }); assert.equal(applications['Google Analytics'].name, 'Google Analytics'); assert.equal(applications['jQuery'].name, 'jQuery'); }); it('should analyze headers', async () => { const headers = { 'date': [ 'Thu, 01 Feb 2018 11:34:18 GMT' ], 'connection': [ 'keep-alive' ], 'x-powered-by': [ 'Express'], 'etag': [ 'W/125-1jQLmiya7mfec43xR3Eb3pjdu64s' ], 'content-length': [ '293' ], 'content-type': [ 'text/html; charset=utf-8' ] }; const wappalyzer = new Wappalyzer(); wappalyzer.apps = { "Express": { "headers": { "X-Powered-By": "^Express$" } } }; var applications = null; wappalyzer.driver = { log () {}, displayApps (detectedMap) { applications = detectedMap; } }; await wappalyzer.analyze({ canonical: 'example.com' }, { headers }); assert.equal(applications['Express'].name, 'Express'); }); it('should analyze js globals', async () => { const js = { 'Moment.js': { 'moment': { '0': true } }, 'Google Font API': { 'WebFonts': { '0': true } } }; const wappalyzer = new Wappalyzer(); wappalyzer.apps = { "Moment.js": { "js": { "moment": "", "moment.version": "(.*)\\;version:\\1" } }, "Google Font API": { "js": { "WebFonts": "" } } }; var applications = null; wappalyzer.driver = { log () {}, displayApps (detectedMap) { applications = detectedMap; } }; wappalyzer.parseJsPatterns(); await wappalyzer.analyze({ canonical: 'example.com' }, { js }); assert.equal(applications['Google Font API'].name, 'Google Font API'); assert.equal(applications['Moment.js'].name, 'Moment.js'); }); });