UNPKG

vumigo_v02

Version:

Javascript toolkit and examples for Vumi's Javascript sandbox

280 lines (250 loc) 10.4 kB
var Q = require('q'); var assert = require('assert'); var vumigo = require('../lib'); var test_utils = vumigo.test_utils; var User = vumigo.user.User; var UserNewEvent = vumigo.user.UserNewEvent; var UserLoadEvent = vumigo.user.UserLoadEvent; var UserResetEvent = vumigo.user.UserResetEvent; describe("user", function() { describe("User", function() { var im; var user; beforeEach(function() { return test_utils.make_im().then(function(new_im) { im = new_im; user = im.user; }); }); it("should be JSON serializable", function() { assert.equal(JSON.stringify(user), JSON.stringify({ addr: '+27987654321', lang: 'af', answers: {start: 'ja'}, metadata: {name: 'jan'}, in_session: false, state: { name: 'start', metadata: {foo: 'bar'}, creator_opts: {} } })); }); describe(".created", function() { it("should determine whether the user was created", function() { var user1 = new User(im); var user2 = new User(im); return Q.all([ user1.create('1234'), user2.load('+27987654321', { store_name: 'test_app' }), ]).then(function() { assert(user1.created); assert(!user2.created); }); }); }); describe(".setup", function() { beforeEach(function() { user = new User(im); }); it("should emit a 'setup' event", function() { var p = user.once.resolved('setup'); return user .setup('+27987654321') .thenResolve(p) .then(function(e) { assert.strictEqual(user, e.instance); }); }); it("should setup the user", function() { return user.setup('+27987654321', { lang: 'af', answers: {start: 'yes'}, state: { name: 'start', metadata: {foo: 'bar'} } }).then(function() { assert.equal(user.addr, '+27987654321'); assert.equal(user.lang, 'af'); assert.equal(user.get_answer('start'), 'yes'); assert.equal(user.state.name, 'start'); assert.deepEqual(user.state.metadata, {foo: 'bar'}); assert.equal(user.i18n(test_utils.$('yes')), 'ja'); }); }); }); describe(".reset", function() { it("should set the creation event to 'user:reset'", function() { return user .reset('1234') .then(function() { assert(user.creation_event instanceof UserResetEvent); }); }); }); describe(".create", function() { it("should set the creation event to 'user:new'", function() { return user .create('1234') .then(function() { assert(user.creation_event instanceof UserNewEvent); }); }); }); describe(".load", function() { describe("if the user exists", function() { it("should load the user", function() { return user .load('+27987654321', {store_name: 'test_app'}) .then(function() { assert.equal(user.addr, '+27987654321'); assert.equal(user.lang, 'af'); assert.equal(user.get_answer('start'), 'ja'); assert.equal(user.state.name, 'start'); assert.deepEqual(user.state.metadata, {foo: 'bar'}); assert.equal(user.i18n(test_utils.$('yes')), 'ja'); }); }); it("should set the creation event to 'user:load'", function() { return user .load('+27987654321', {store_name: 'test_app'}) .then(function(e) { assert( user.creation_event instanceof UserLoadEvent); }); }); }); describe("if the user does not exist", function() { it("should throw an error", function() { return user .load('i-do-not-exist', {store_name: 'test_app'}) .catch(function(e) { assert.equal( e.message, "Failed to load user 'i-do-not-exist'"); }); }); }); }); describe(".load_or_create", function() { describe("if the user exists", function() { it("should load the user", function() { return user .load('+27987654321', {store_name: 'test_app'}) .then(function() { assert.equal(user.addr, '+27987654321'); assert.equal(user.lang, 'af'); assert.equal(user.get_answer('start'), 'ja'); assert.equal(user.state.name, 'start'); assert.deepEqual(user.state.metadata, {foo: 'bar'}); assert.equal(user.i18n(test_utils.$('no')), 'nee'); }); }); it("should set the creation event to 'user:load'", function() { return user .load('+27987654321', {store_name: 'test_app'}) .then(function(e) { assert( user.creation_event instanceof UserLoadEvent); }); }); }); describe("if the user does not exist", function() { it("should create a new user", function() { return user .load_or_create('i-do-not-exist', { store_name: 'test_app' }) .then(function() { assert.equal(user.addr, 'i-do-not-exist'); }); }); it("should set the creation event to 'user:new'", function() { return user .load_or_create('i-do-not-exist', { store_name: 'test_app' }) .then(function(e) { assert( user.creation_event instanceof UserNewEvent); }); }); }); }); describe(".default_ttl", function() { it("should be seven days if no config is set", function() { assert.strictEqual(user.default_ttl(), 604800); }); describe("should be overriden", function() { it("when config.user_ttl is an integer", function() { im.config.user_ttl = 60; assert.strictEqual(user.default_ttl(), 60); }); it("when config.user_ttl is null", function() { im.config.user_ttl = null; assert.strictEqual(user.default_ttl(), null); }); }); }); describe(".save", function() { it("should save the user", function() { user.set_answer('why', 'no'); return user .save() .then(function() { user = new User(im); return user.load('+27987654321', { store_name: 'test_app' }); }) .then(function() { assert.equal(user.get_answer('why'), 'no'); }); }); it("should emit a 'user:save' event", function() { var p = user.once.resolved('user:save'); return user .save() .thenResolve(p) .then(function(e) { assert.equal(e.user, user); }); }); it("should set the default ttl", function() { return user .save() .then(function() { assert.strictEqual( im.api.kv.ttl[user.key()], user.default_ttl()); }); }); it("should set an integer custom ttl", function() { return user .save({seconds: 5}) .then(function() { assert.strictEqual(im.api.kv.ttl[user.key()], 5); }); }); it("should not set a ttl for null seconds", function() { return user .save({seconds: null}) .then(function() { assert.strictEqual( user.key() in im.api.kv.ttl, false); }); }); }); describe(".set_lang", function() { it("should change the user's language", function() { return user.set_lang('jp').then(function() { assert.equal(user.lang, 'jp'); assert.equal(user.i18n(test_utils.$('yes')), 'hai'); }); }); }); }); });