referral-parser
Version:
Parse a referral url into useful information
251 lines (226 loc) • 7.53 kB
JavaScript
const mocha = require('mocha');
const chai = require('chai');
const expect = chai.expect;
const Referrer = require('../index');
const opts = { bbc: true };
describe("Error Checking", function() {
it('should throw error if no referrer passed', function() {
//arrange
//assert
expect(function() {
//act
let res = new Referrer();
}).to.throw(/No referral URL found/);;
});
it('should fix urls without protocol', function() {
//arrange
let ref = 'hello.is';
let obj = new Referrer(ref);
//assert
expect(obj).to.have.all.keys('refferal');
expect(obj.refferal).to.have.all.keys('host');
expect(obj.refferal.host).to.eql('hello.is');
});
});
describe("Unreconised Site", function() {
it('should return only host if site is not reconised', function() {
//arrange
let ref = 'http://hello.is/dsfsd';
let obj = new Referrer(ref);
//assert
expect(obj).to.have.all.keys('refferal');
expect(obj.refferal).to.have.all.keys('host');
expect(obj.refferal.host).to.eql('hello.is');
});
});
describe("Search", function() {
it('should return all properties for google.com with hash', function() {
//arrange
let ref = 'http://www.google.com/#q=bbc+news';
let obj = new Referrer(ref);
//assert
var ex = {
type: 'search',
name: 'Google',
search: 'bbc news',
host: 'www.google.com'
}
expect(obj).to.have.all.keys('refferal');
expect(obj.refferal).to.eql(ex);
});
it('should return all properties for google.com with param', function() {
//arrange
let ref = 'http://www.google.com?q=bbc+news';
let obj = new Referrer(ref);
//assert
var ex = {
type: 'search',
name: 'Google',
search: 'bbc news',
host: 'www.google.com'
}
expect(obj).to.have.all.keys('refferal');
expect(obj.refferal).to.eql(ex);
});
it('should return all properties for bing.com with param', function() {
//arrange
let ref = 'http://www.bing.com/search?q=bbc+news&go=Submit&qs=n&form=QBLH&pq=bbc+new&sc=1-0&sp=-1&sk=&cvid=2817C11E5B6D4A829A196DAC45EB457D';
let obj = new Referrer(ref);
//assert
var ex = {
type: 'search',
name: 'Bing',
search: 'bbc news',
host: 'www.bing.com'
}
expect(obj).to.have.all.keys('refferal');
expect(obj.refferal).to.eql(ex);
});
});
describe("Social", function() {
it('should return all properties for Facebook', function() {
//arrange
let ref = 'http://www.facebook.com';
let obj = new Referrer(ref);
//assert
var ex = {
type: 'social',
name: 'Facebook',
host: 'www.facebook.com'
}
expect(obj).to.have.all.keys('refferal');
expect(obj.refferal).to.eql(ex);
});
it('should return all properties for Google Plus', function() {
//arrange
let ref = 'http://plus.google.com';
let obj = new Referrer(ref);
//assert
var ex = {
type: 'social',
name: 'Google%2B',
host: 'plus.google.com'
}
expect(obj).to.have.all.keys('refferal');
expect(obj.refferal).to.eql(ex);
});
});
describe("News", function() {
it('should return type news for Flipboard', function() {
//arrange
let ref = 'https://flipboard.com';
let obj = new Referrer(ref);
//assert
var ex = {
type: 'news',
name: 'Flipboard',
host: 'flipboard.com'
}
expect(obj).to.have.all.keys('refferal');
expect(obj.refferal).to.eql(ex);
});
});
describe("Top level domains", function() {
it('Check google runs from non ISO TLD', function() {
//arrange
let ref = 'http://www.google.co.uk/#q=bbc+news';
let obj = new Referrer(ref);
//assert
var ex = {
type: 'search',
name: 'Google',
search: 'bbc news',
host: 'www.google.co.uk'
}
expect(obj).to.have.all.keys('refferal');
expect(obj.refferal).to.eql(ex);
});
it('Check google runs from ISO TLD', function() {
//arrange
let ref = 'http://www.google.ca/#q=bbc+news';
let obj = new Referrer(ref);
//assert
var ex = {
type: 'search',
name: 'Google',
search: 'bbc news',
host: 'www.google.ca'
}
expect(obj).to.have.all.keys('refferal');
expect(obj.refferal).to.eql(ex);
});
});
describe("BBC", function() {
it("Should return that the BBC homepage was the referrer", function() {
//arrange
let ref = "www.bbc.com";
//act
let obj = new Referrer(ref, opts);
//assert
expect(obj.refferal.name).to.eql('homepage');
});
it("Should return the BBC CPSid of referrer", function() {
//arrange
let ref = "http://www.bbc.co.uk/news/business-37618618";
//act
let obj = new Referrer(ref, opts);
//assert
expect(obj.refferal.page).to.eql('37618618');
expect(obj.refferal.name).to.eql('news');
});
it("Should return the BBC news homepage", function() {
//arrange
let ref = "http://www.bbc.co.uk/news/";
//act
let obj = new Referrer(ref, opts);
//assert
expect(obj.refferal.page).to.eql('home');
expect(obj.refferal.name).to.eql('news');
});
it("Should return the BBC news business homepage", function() {
//arrange
let ref = "http://www.bbc.co.uk/news/business";
//act
let obj = new Referrer(ref, opts);
//assert
expect(obj.refferal.page).to.eql('business');
expect(obj.refferal.name).to.eql('news');
});
it("Should return the BBC sport homepage", function() {
//arrange
let ref = "http://www.bbc.co.uk/sport";
//act
let obj = new Referrer(ref, opts);
//assert
expect(obj.refferal.page).to.eql('home');
expect(obj.refferal.name).to.eql('sport');
});
it("Should return the BBC sport football homepage", function() {
//arrange
let ref = "http://www.bbc.co.uk/sport/football";
//act
let obj = new Referrer(ref, opts);
//assert
expect(obj.refferal.page).to.eql('football');
expect(obj.refferal.name).to.eql('sport');
});
it("Should return the BBC sport with cps id", function() {
//arrange
let ref = "http://www.bbc.co.uk/sport/live/37157487";
//act
let obj = new Referrer(ref, opts);
//assert
expect(obj.refferal.page).to.eql('37157487');
expect(obj.refferal.name).to.eql('sport');
});
it("Should return the BBC News Unknown Page", function() {
//arrange
let ref = "http://www.bbc.co.uk/news/resources/idt-6d083913-0bfb-4988-8cd8-d126fa6dcff1";
//act
let obj = new Referrer(ref, opts);
//assert
expect(obj.refferal.page).to.eql('resources/idt-6d083913-0bfb-4988-8cd8-d126fa6dcff1');
expect(obj.refferal.name).to.eql('news');
});
});
;