taggable-via-redis
Version:
Add tagging functionality backed by Redis. This is a rewrite of sintaxi's node-redis-tag.
140 lines (124 loc) • 4.46 kB
JavaScript
// Generated by CoffeeScript 1.6.3
/*
# test for taggabler_via_redis
*/
(function() {
var MODULE_NAME, REDIS_CLIENT, TAGS_COFFEESCRIPT, TAGS_JQUERY, TAGS_NODE, TAGS_NODE2, TAGS_RAILS, USER_27, USER_42, should, taggable;
should = require("should");
taggable = require("../taggabler_via_redis");
REDIS_CLIENT = null;
USER_27 = "user/27";
USER_42 = "user/42";
TAGS_NODE = "javascript,server,programming".split(",").sort();
TAGS_JQUERY = "javascript,client,programming".split(",").sort();
TAGS_RAILS = "ruby,programming".split(",").sort();
TAGS_COFFEESCRIPT = "javascript,client,server,programming".split(",").sort();
TAGS_NODE2 = "javascript,server,programming,async,joyent".split(",").sort();
MODULE_NAME = "book";
describe("scope add tests", function() {
before(function(done) {
var redis;
redis = require("redis");
REDIS_CLIENT = redis.createClient();
REDIS_CLIENT.flushall();
taggable.init(REDIS_CLIENT);
return setTimeout(done, 1800);
});
return describe("taggabler_via_redis", function() {
it("should set tags on book 1", function(done) {
taggable.set(MODULE_NAME, 1, TAGS_NODE, USER_27, function(err) {
should.not.exist(err);
done();
});
});
it("should get tags for book 1", function(done) {
taggable.get(MODULE_NAME, 1, USER_27, function(err, rsp) {
should.not.exist(err);
rsp.sort().should.containDeep(TAGS_NODE);
done();
});
});
it("should set tags on book 2", function(done) {
taggable.set(MODULE_NAME, 2, TAGS_JQUERY, USER_27, function(err) {
should.not.exist(err);
done();
});
});
it("should get tags for book 2", function(done) {
taggable.get(MODULE_NAME, 2, USER_27, function(err, rsp) {
should.not.exist(err);
rsp.sort().should.containDeep(TAGS_JQUERY);
done();
});
});
it("should set tags on book 3", function(done) {
taggable.set(MODULE_NAME, 3, TAGS_RAILS, USER_42, function(err) {
should.not.exist(err);
done();
});
});
it("should get tags for book 3", function(done) {
taggable.get(MODULE_NAME, 3, USER_42, function(err, rsp) {
should.not.exist(err);
rsp.sort().should.containDeep(TAGS_RAILS);
done();
});
});
it("should set tags on book 4", function(done) {
taggable.set(MODULE_NAME, 4, TAGS_COFFEESCRIPT, USER_42, function(err) {
should.not.exist(err);
done();
});
});
it("should get tags for book 4", function(done) {
taggable.get(MODULE_NAME, 4, USER_42, function(err, rsp) {
should.not.exist(err);
rsp.sort().should.containDeep(TAGS_COFFEESCRIPT);
done();
});
});
it("should get empty array if book has not been tagged", function(done) {
taggable.get(MODULE_NAME, 99, USER_42, function(err, rsp) {
should.not.exist(err);
rsp.should.be.empty;
done();
});
});
it("should find books from tag", function(done) {
taggable.find(MODULE_NAME, "client", USER_42, function(err, rsp) {
should.not.exist(err);
rsp.should.containDeep(["4"]);
done();
});
});
it("should get empty array for non existing tag", function(done) {
taggable.find(MODULE_NAME, "maytag", USER_42, function(err, rsp) {
should.not.exist(err);
rsp.should.be.empty;
done();
});
});
it("should get all items if no tags specified", function(done) {
taggable.find(MODULE_NAME, [], USER_42, function(err, rsp) {
should.not.exist(err);
rsp.should.be.empty;
done();
});
});
it("should get most popular tags from user 42", function(done) {
taggable.popular(MODULE_NAME, 10, USER_42, function(err, rsp) {
should.not.exist(err);
rsp[0].should.containDeep(["programming", 2]);
done();
});
});
return it("should get most popular tags globally", function(done) {
taggable.popular(MODULE_NAME, 10, function(err, rsp) {
should.not.exist(err);
rsp[0].should.containDeep(["programming", 4]);
done();
});
});
});
});
}).call(this);