pageviews
Version:
A lightweight JavaScript client library for the Wikimedia Pageviews API for Wikipedia and various of its sister projects for Node.js and the browser.
427 lines (390 loc) • 13.8 kB
JavaScript
var environment = typeof window === 'undefined' ? 'node' : 'browser';
var chai;
var pageviews;
if (environment === 'node') {
chai = require('chai');
pageviews = require('../pageviews.js');
} else {
chai = window.chai;
pageviews = window.pageviews;
}
var assert = chai.assert;
describe('pageviews.js', function() {
it('Is inititalized.', function() {
assert.isObject(pageviews);
});
it('Has the correct methods.', function() {
assert.deepEqual(Object.keys(pageviews), [
'getPageviewsDimensions',
'getPerArticlePageviews',
'getAggregatedPageviews',
'getAggregatedLegacyPagecounts',
'getTopPageviews',
'getTopPageviewsByCountry',
'getUniqueDevices']);
});
it('Supports the correct dimensions.', function() {
return pageviews.getPageviewsDimensions().then(function(result) {
assert.deepEqual(result, {
items: [
'aggregate',
'per-article',
'top',
'top-by-country',
]
});
});
});
it('Returns pageviews for a single article (date string).', function() {
return pageviews.getPerArticlePageviews({
article: 'Berlin',
project: 'en.wikipedia',
start: '20151201',
end: '20151202'
}).then(function(result) {
assert.isNumber(result.items[0].views);
});
});
it('Returns pageviews for a single article (wikidata).', function() {
return pageviews.getPerArticlePageviews({
article: 'Q42',
project: 'wikidata',
start: '20151201',
end: '20151202'
}).then(function(result) {
assert.isNumber(result.items[0].views);
});
});
it('Returns pageviews for a single article (date object).', function() {
return pageviews.getPerArticlePageviews({
article: 'Berlin',
project: 'en.wikipedia',
start: new Date(new Date() - 3 * 24 * 60 * 60 * 1000),
end: new Date(new Date() - 2 * 24 * 60 * 60 * 1000)
}).then(function(result) {
assert.isNumber(result.items[0].views);
});
});
it('Returns pageviews for a single article (date object, no padding).',
function() {
return pageviews.getPerArticlePageviews({
article: 'Berlin',
project: 'en.wikipedia',
start: new Date('2015-12-10'),
end: new Date('2015-12-20')
}).then(function(result) {
assert.isNumber(result.items[0].views);
assert.equal(result.items[0].timestamp, '2015121000');
});
});
it('Returns pageviews for multiple articles (date string).', function() {
return pageviews.getPerArticlePageviews({
articles: ['Berlin', 'Hamburg'],
project: 'en.wikipedia',
start: '20151201',
end: '20151202'
}).then(function(result) {
assert(result[0].items[0].views >= 0 && result[1].items[0].views >= 0);
});
});
it('Returns pageviews for multiple articles (date object).', function() {
return pageviews.getPerArticlePageviews({
articles: ['Berlin', 'Hamburg'],
project: 'en.wikipedia',
start: new Date(new Date() - 3 * 24 * 60 * 60 * 1000),
end: new Date(new Date() - 2 * 24 * 60 * 60 * 1000)
}).then(function(result) {
assert(result[0].items[0].views >= 0 && result[1].items[0].views >= 0);
});
});
it('Returns aggregated pageviews for a single project (date string).',
function() {
return pageviews.getAggregatedPageviews({
project: 'en.wikipedia',
start: '2015120101',
end: '2015120102'
}).then(function(result) {
assert(result.items[0].views >= 0 && result.items[1].views >= 0);
});
});
it('Returns aggregated pageviews for a single project (date object).',
function() {
return pageviews.getAggregatedPageviews({
project: 'en.wikipedia',
start: new Date(new Date() - 3 * 24 * 60 * 60 * 1000),
end: new Date(new Date() - 2 * 24 * 60 * 60 * 1000)
}).then(function(result) {
assert(result.items[0].views >= 0 && result.items[1].views >= 0);
});
});
it('Returns aggregated pageviews for a single project ' +
'(date object, no padding).', function() {
return pageviews.getAggregatedPageviews({
project: 'en.wikipedia',
start: new Date('2015-12-10'),
end: new Date('2015-12-20'),
granularity: 'daily'
}).then(function(result) {
assert(result.items[0].views >= 0 && result.items[1].views >= 0);
assert.equal(result.items[0].timestamp, '2015121000');
});
});
it('Returns aggregated pageviews for multiple projects (date string).',
function() {
return pageviews.getAggregatedPageviews({
projects: ['en.wikipedia', 'de.wikipedia'],
start: '2015120101',
end: '2015120101'
}).then(function(result) {
assert(result[0].items[0].views >= 0 && result[1].items[0].views >= 0);
});
});
it('Returns aggregated pageviews for multiple projects (date object).',
function() {
return pageviews.getAggregatedPageviews({
projects: ['en.wikipedia', 'de.wikipedia'],
start: new Date(new Date() - 3 * 24 * 60 * 60 * 1000),
end: new Date(new Date() - 2 * 24 * 60 * 60 * 1000)
}).then(function(result) {
assert(result[0].items[0].views >= 0 && result[1].items[0].views >= 0);
});
});
it('Returns aggregated pageviews for all projects (plural, date object).',
function() {
return pageviews.getAggregatedPageviews({
projects: 'all-projects',
start: new Date(new Date() - 3 * 24 * 60 * 60 * 1000),
end: new Date(new Date() - 2 * 24 * 60 * 60 * 1000)
}).then(function(result) {
assert(result.items[0].views >= 0);
});
});
it('Returns aggregated pageviews for all projects (plural) ' +
'and a particular project (date object).', function() {
return pageviews.getAggregatedPageviews({
projects: ['all-projects', 'en.wikipedia'],
start: new Date(new Date() - 3 * 24 * 60 * 60 * 1000),
end: new Date(new Date() - 2 * 24 * 60 * 60 * 1000)
}).then(function(result) {
assert(result[0].items[0].views >= 0 && result[1].items[0].views >= 0);
});
});
it('Returns aggregated pageviews for all projects (singular, date object).',
function() {
return pageviews.getAggregatedPageviews({
project: 'all-projects',
start: new Date(new Date() - 3 * 24 * 60 * 60 * 1000),
end: new Date(new Date() - 2 * 24 * 60 * 60 * 1000)
}).then(function(result) {
assert(result.items[0].views >= 0);
});
});
it('Returns aggregated legacy pagecounts for a single project (date string).',
function() {
return pageviews.getAggregatedLegacyPagecounts({
project: 'en.wikipedia',
start: '2008120101',
end: '2008120102'
}).then(function(result) {
assert(result.items[0].count >= 0 && result.items[1].count >= 0);
});
});
it('Returns aggregated legacy pagecounts for a single project (date object).',
function() {
return pageviews.getAggregatedLegacyPagecounts({
project: 'en.wikipedia',
start: new Date(2008, 12, 1, 1),
end: new Date(2008, 12, 1, 2)
}).then(function(result) {
assert(result.items[0].count >= 0 && result.items[1].count >= 0);
});
});
it('Returns aggregated legacy pagecounts for a single project ' +
'(date object, no padding).', function() {
return pageviews.getAggregatedLegacyPagecounts({
project: 'en.wikipedia',
start: new Date('2008-12-10'),
end: new Date('2008-12-20'),
granularity: 'daily'
}).then(function(result) {
assert(result.items[0].count >= 0 && result.items[1].count >= 0);
assert.equal(result.items[0].timestamp, '2008121000');
});
});
it('Returns aggregated legacy pagecounts for multiple projects (date ' +
'string).', function() {
return pageviews.getAggregatedLegacyPagecounts({
projects: ['en.wikipedia', 'de.wikipedia'],
start: '2008120101',
end: '2008120101'
}).then(function(result) {
assert(result[0].items[0].count >= 0 && result[1].items[0].count >= 0);
});
});
it('Returns aggregated legacy pagecounts for multiple projects (date ' +
'object).', function() {
return pageviews.getAggregatedLegacyPagecounts({
projects: ['en.wikipedia', 'de.wikipedia'],
start: new Date(2008, 12, 1, 1),
end: new Date(2008, 12, 1, 2)
}).then(function(result) {
assert(result[0].items[0].count >= 0 && result[1].items[0].count >= 0);
});
});
it('Returns aggregated legacy pagecounts for all projects (plural, date ' +
'object).', function() {
return pageviews.getAggregatedLegacyPagecounts({
projects: 'all-projects',
start: new Date(2008, 12, 1, 1),
end: new Date(2008, 12, 1, 2)
}).then(function(result) {
assert(result.items[0].count >= 0);
});
});
it('Returns aggregated legacy pagecounts for all projects (plural) ' +
'and a particular project (date object).', function() {
return pageviews.getAggregatedLegacyPagecounts({
projects: ['all-projects', 'en.wikipedia'],
start: new Date(2008, 12, 1, 1),
end: new Date(2008, 12, 1, 2)
}).then(function(result) {
assert(result[0].items[0].count >= 0 && result[1].items[0].count >= 0);
});
});
it('Returns aggregated legacy pagecounts for all projects (singular, date ' +
'object).', function() {
return pageviews.getAggregatedLegacyPagecounts({
project: 'all-projects',
start: new Date(2008, 12, 1, 1),
end: new Date(2008, 12, 1, 2)
}).then(function(result) {
assert(result.items[0].count >= 0);
});
});
it('Returns the top pageviews for a single project (with textual date).',
function() {
return pageviews.getTopPageviews({
project: 'en.wikipedia',
year: '2015',
month: '12',
day: '01',
limit: 2
}).then(function(result) {
assert(result.items[0].articles.length > 0);
});
});
it('Returns the top pageviews for multiple projects (with textual date).',
function() {
return pageviews.getTopPageviews({
projects: ['en.wikipedia', 'de.wikipedia'],
year: '2015',
month: '12',
day: '01',
limit: 2
}).then(function(result) {
assert(result[0].items[0].articles.length > 0 &&
result[1].items[0].articles.length > 0);
});
});
it('Returns the top pageviews for a single project (with integer date).',
function() {
return pageviews.getTopPageviews({
project: 'en.wikipedia',
year: 2015,
month: 12,
day: 1,
limit: 2
}).then(function(result) {
assert(result.items[0].articles.length > 0);
});
});
it('Returns the top pageviews for a single project (with date object).',
function() {
return pageviews.getTopPageviews({
project: 'en.wikipedia',
date: new Date(new Date() - 3 * 24 * 60 * 60 * 1000),
limit: 2
}).then(function(result) {
assert(result.items[0].articles.length > 0);
});
});
it('Returns the top pageviews by country for a single project ' +
'(with textual date).', function() {
return pageviews.getTopPageviewsByCountry({
project: 'en.wikipedia',
year: '2015',
month: '12'
}).then(function(result) {
assert(result.items[0].countries.length > 0);
});
});
it('Returns the top pageviews by country for multiple projects ' +
'(with textual date).', function() {
return pageviews.getTopPageviewsByCountry({
projects: ['en.wikipedia', 'de.wikipedia'],
year: '2015',
month: '12'
}).then(function(result) {
assert(result[0].items[0].countries.length > 0 &&
result[1].items[0].countries.length > 0);
});
});
it('Returns the top pageviews by country for a single project ' +
'(with integer date).', function() {
return pageviews.getTopPageviewsByCountry({
project: 'en.wikipedia',
year: 2015,
month: 12
}).then(function(result) {
assert(result.items[0].countries.length > 0);
});
});
it('Returns the unique devices for a project (date object).', function() {
return pageviews.getUniqueDevices({
project: 'en.wikipedia',
start: new Date('2016-01-01'),
end: new Date('2016-01-02')
}).then(function(result) {
assert.equal(result.items.length, 2);
assert.isNotNull(result.items[0].devices);
assert.isNotNull(result.items[1].devices);
assert.equal(result.items[0].timestamp, '20160101');
assert.equal(result.items[1].timestamp, '20160102');
});
});
it('Returns the unique devices for a project (textual date).', function() {
return pageviews.getUniqueDevices({
project: 'en.wikipedia',
start: '20160101',
end: '20160102'
}).then(function(result) {
assert.equal(result.items.length, 2);
assert.isNotNull(result.items[0].devices);
assert.isNotNull(result.items[1].devices);
assert.equal(result.items[0].timestamp, '20160101');
assert.equal(result.items[1].timestamp, '20160102');
});
});
it('Returns the unique devices for a project (given accessSite).',
function() {
return pageviews.getUniqueDevices({
project: 'en.wikipedia',
start: '20160101',
end: '20160102',
accessSite: 'desktop-site'
}).then(function(result) {
assert.isNotNull(result.items[0].devices);
});
});
it('Returns the unique devices for a project (given granularity).',
function() {
return pageviews.getUniqueDevices({
project: 'en.wikipedia',
start: '20160101',
end: '20160131',
granularity: 'monthly'
}).then(function(result) {
assert.isNotNull(result.items[0].devices);
});
});
});