flo
Version:
Redis powered node.js autocompleter inspired by soulmate
159 lines (152 loc) • 5.28 kB
JavaScript
// Generated by CoffeeScript 1.3.1
(function() {
var assert, async, flo, _;
flo = require('../index').connect();
async = require('async');
_ = require('underscore');
assert = require('assert');
module.exports = {
'test prefixes_for_phrase': function() {
var result;
result = flo.prefixes_for_phrase("abc");
assert.eql(["a", "ab", "abc"], result);
result = flo.prefixes_for_phrase("abc abc");
assert.eql(["a", "ab", "abc"], result);
result = flo.prefixes_for_phrase("a(*&^%bc");
assert.eql(["a", "ab", "abc"], result);
result = flo.prefixes_for_phrase("how are you");
return assert.eql(["h", "ho", "how", "a", "ar", "are", "y", "yo", "you"], result);
},
'test key': function() {
var result;
result = flo.key("fun", "abc");
return assert.equal("flo:fun:abc", result);
},
'test add_term': function() {
var term, term_data, term_id, term_score, term_type;
term_type = 'book';
term_id = 1;
term = "Algorithms for Noob";
term_score = 10;
term_data = {
ISBN: "123AOU123",
Publisher: "Siong Publication"
};
return flo.add_term(term_type, term_id, term, term_score, term_data, function() {
return async.parallel([
(function(callback) {
return flo.redis.hget(flo.key(term_type, "data"), term_id, function(err, reply) {
var result;
result = JSON.parse(reply);
assert.equal(term, result.term);
assert.equal(term_score, result.score);
assert.eql(term_data, result.data);
return callback();
});
}), (function(callback) {
var _this = this;
return async.map(flo.prefixes_for_phrase(term), (function(w, cb) {
return flo.redis.zrange(flo.key(term_type, "index", w), 0, -1, cb);
}), function(err, results) {
assert.equal(17, results.length);
results = _.uniq(_.flatten(results));
assert.equal(1, results[0]);
return callback();
});
})
]);
});
},
'test search_term': function() {
var venues;
venues = require('../samples/venues').venues;
return async.series([
(function(callback) {
return async.forEach(venues, (function(venue, cb) {
return flo.add_term("venues", venue.id, venue.term, venue.score, venue.data, function() {
return cb();
});
}), callback);
}), (function(callback) {
return flo.search_term(["venues", "food"], "stadium", function(err, results) {
assert.equal(3, results.venues.length);
return callback();
});
}), (function(callback) {
return flo.search_term(["venues"], "stadium", 1, function(err, results) {
assert.equal(1, results.venues.length);
return callback();
});
})
]);
},
'test remove_term': function() {
var all_data, term, term_data, term_id, term_id2, term_score, term_type;
term_type = "foods";
term_id = 2;
term_id2 = 3;
term = "Burger";
term_score = 10;
term_data = {
temp: "data"
};
all_data = {
id: term_id,
term: term,
score: term_score,
data: term_data
};
return async.series([
(function(next) {
return flo.add_term(term_type, term_id, term, term_score, term_data, next);
}), (function(next) {
return flo.get_ids(term_type, term, function(err, ids) {
assert.isNull(err);
assert.eql(ids, [term_id]);
return next();
});
}), (function(next) {
return flo.get_data(term_type, term_id, function(err, data) {
assert.isNull(err);
assert.eql(data, all_data);
return next();
});
}), (function(next) {
return flo.add_term(term_type, term_id2, term, term_score, term_data, next);
}), (function(next) {
return flo.get_ids(term_type, term, function(err, ids) {
assert.isNull(err);
assert.eql(ids, [term_id, term_id2]);
return next();
});
}), (function(next) {
return flo.remove_term(term_type, term_id, next);
}), (function(next) {
return flo.remove_term(term_type, term_id2, next);
}), (function(next) {
return flo.remove_term(term_type, term_id, function(err) {
assert.isNotNull(err);
return next();
});
}), (function(next) {
return flo.get_ids(term_type, term, function(err, ids) {
assert.eql(ids, []);
return next();
});
}), (function(next) {
return flo.search_term([term_type], term, function(err, result) {
var eql;
eql = {
term: term
};
eql[term_type] = [];
assert.eql(result, eql);
return next();
});
})
], function(err, results) {
return flo.end();
});
}
};
}).call(this);