///
export import mocha = require('../../test/mocha');
var expect = mocha.chai.expect;
var spy = mocha.sinon.spy;
var mock = mocha.mock;
var rcsdk = mocha.rcsdk;
describe('RCSDK.helpers.Presence', function() {
'use strict';
var Presence = rcsdk.getPresenceHelper();
describe('createUrl', function() {
it('returns URL depending on options', function() {
expect(Presence.createUrl()).to.equal('/account/~/extension/~/presence');
expect(Presence.createUrl({}, 'foo')).to.equal('/account/~/extension/foo/presence');
expect(Presence.createUrl({detailed: true}, 'foo')).to.equal('/account/~/extension/foo/presence?detailedTelephonyState=true');
});
});
describe('attachToExtensions', function() {
it('attaches presence to all matching extensions', function() {
var presences = [
{extension: {id: 'foo'}, presenceStatus: 'Offline'},
{extension: {id: 'bar'}, presenceStatus: 'Busy'},
{extension: {id: 'baz'}, presenceStatus: 'Available'}
],
extensions = [
{id: 'foo'},
{id: 'bar'},
{id: 'baz'},
{id: 'qux'}
];
Presence.attachToExtensions(extensions, presences);
expect(extensions[0].presence).to.equal(presences[0]);
expect(extensions[1].presence).to.equal(presences[1]);
expect(extensions[2].presence).to.equal(presences[2]);
expect(extensions[3].presence).to.be.an('undefined');
});
it('attaches presence to all matching extensions (with merge)', function() {
var presences = [
{extensionId: 'baz', presenceStatus: 'Available', foo: 'bar'}
],
extensions = [
{id: 'baz', presence: {foo: 'baz'}}
];
expect(extensions[0].presence.foo).to.equal('baz');
Presence.attachToExtensions(extensions, presences, true);
expect(extensions[0].presence.foo).to.equal('bar');
expect(extensions[0].presence.presenceStatus).to.equal('Available');
});
});
describe('getSubscription', function() {
it('returns pre-configured Subscription object', function() {
var notificaction = Presence.getSubscription({detailed: true}, 'foo');
expect(notificaction.eventFilters.length).to.equal(1);
expect(notificaction.eventFilters[0]).to.equal('/account/~/extension/foo/presence?detailedTelephonyState=true');
});
});
describe('updateSubscription', function() {
it('adds proper events to Subscription object', function() {
var notificaction = rcsdk.getSubscription();
expect(notificaction.eventFilters.length).to.equal(0);
Presence.updateSubscription(notificaction, [{extension: {id: 'foo'}}, {extension: {id: 'bar'}}], {detailed: true});
expect(notificaction.eventFilters.length).to.equal(2);
expect(notificaction.eventFilters[0]).to.equal('/account/~/extension/foo/presence?detailedTelephonyState=true');
expect(notificaction.eventFilters[1]).to.equal('/account/~/extension/bar/presence?detailedTelephonyState=true');
});
});
});