UNPKG

forgetsy-js

Version:

Forgetsy.js is a scalable trending library designed to track temporal trends in non-stationary categorical distributions. NodeJS fork of https://github.com/cavvia/forgetsy.

176 lines (159 loc) 4.45 kB
/* jshint unused:false */ 'use strict'; var delta = require('../index'); var path = require('path'); var redis = require('fakeredis'); var chai = require('chai'); var expect = chai.expect; var client = redis.createClient(); delta.setRedisClient(client); var dist = 'facebook-shares'; var bin = 'my-content-id'; var bins = ['item one', 'item two', 'item three', 'item four']; function getDays(days) { return (new Date().getTime() + ((60 * 60 * 24 * 1000) * days)); } function increment(bin, by, cb) { delta.get(dist) .then(function onGetComplete(delta) { delta.incr({ bin: bin, by: 1 }) .then(function(res) { cb(); }) .catch(function(e) { console.log('Error', e); }); }) .catch(function onGetError(e) { console.log('Error', e); }); } describe('testing delta', function() { it('should be a valid delta instance', function(done) { delta.create({ name: dist, time: getDays(14) }) .then(function onCreateComplete(_delta) { expect(_delta instanceof delta.Delta).to.equal(true); done(); }) .catch(function onCreateError(e) { console.log(e); }); }); it('should return a valid dist', function(done) { delta.get(dist) .then(function onGetComplete(delta) { done(); }) .catch(function onGetError(e) { console.log(e); }); }); it('should increment several bins in the distribution', function(done) { var count = 0; var run = function(idx) { if (idx < bins.length) { increment(bins[idx], 1, function() { run(++count); }); } else { done(); } }; run(0); }); it('should fetch all items in distribution', function(done) { delta.get(dist) .then(function onGetComplete(delta) { delta.fetch().then(function(results) { expect(typeof results).to.equal(typeof {}); expect(results.length).to.equal(4); done(); }) .catch(function(e) { console.log('Fetch error', e); }); }) .catch(function onGetError(e) { console.log(e); }); }); it('should fetch 2 items in distribution', function(done) { delta.get(dist) .then(function onGetComplete(delta) { delta.fetch({limit: 2}).then(function(results) { expect(typeof results).to.equal(typeof {}); expect(results.length).to.equal(2); done(); }) .catch(function(e) { console.log('Fetch error', e); }); }) .catch(function onGetError(e) { console.log(e); }); }); it('should fetch a specific item in distribution', function(done) { delta.get(dist) .then(function onGetComplete(delta) { var bin = bins[Math.floor(Math.random()*bins.length)]; delta.fetch({bin: bin}).then(function(results) { expect(results[0].item).to.equal(bin); expect(results.length).to.equal(1); done(); }) .catch(function(e) { console.log('Fetch error', e); }); }) .catch(function onGetError(e) { console.log(e); }); }); it('should return the most trending item', function(done) { var bin = bins[2]; increment(bin, 1, function() { delta.get(dist) .then(function onGetComplete(delta) { delta.fetch({limit: 1}).then(function(results) { expect(typeof results).to.equal(typeof {}); expect(results.length).to.equal(1); expect(results[0].item).to.equal(bin); done(); }) .catch(function(e) { console.log('Fetch error', e); }); }) .catch(function onGetError(e) { console.log(e); }); }); }); it('should return the new most trending item', function(done) { var bin = bins[1]; increment(bin, 4, function() { delta.get(dist) .then(function onGetComplete(delta) { delta.fetch({limit: 1}).then(function(results) { expect(typeof results).to.equal(typeof {}); expect(results.length).to.equal(1); expect(results[0].item).to.equal(bin); done(); }) .catch(function(e) { console.log('Fetch error', e); }); }) .catch(function onGetError(e) { console.log(e); }); }); }); });