From dca71dfd1863bef3340cb65c2a3bde101ca64651 Mon Sep 17 00:00:00 2001 From: Hans-Peter Herzog Date: Fri, 13 Oct 2017 18:59:56 +0200 Subject: [PATCH] TT#23367 CallBlocking: As a Customer I want to block outgoing numbers - CallBlocking: As a Customer I want to add a new number (outgoing) - CallBlocking: As a Customer I want to edit a number (outgoing) - CallBlocking: As a Customer I want to enable/disable the functionality (outgoing) - CallBlocking: As a Customer I want to remove a number from the list (outgoing) - CallBlocking: As a Customer I want to edit a number (incoming) Change-Id: Ia456af57ef202dbf774739c5b9a5eb9955eaf9b8 --- src/api/call-blocking.js | 76 ++++- src/api/subscriber.js | 63 +++- src/components/Login.vue | 27 +- src/components/form/CscToggle.vue | 36 ++ src/components/layouts/Default.vue | 34 +- .../pages/CallBlocking/CscCallBlocking.vue | 219 +++++++++++++ .../pages/CallBlocking/Incoming.vue | 135 +------- .../pages/CallBlocking/Outgoing.vue | 6 +- src/locales/en.json | 53 ++- src/store/call-blocking.js | 98 +++++- t/api/call-blocking.js | 310 ++++++++++++++++++ t/store/call-blocking.js | 75 +++-- 12 files changed, 927 insertions(+), 205 deletions(-) create mode 100644 src/components/form/CscToggle.vue create mode 100644 src/components/pages/CallBlocking/CscCallBlocking.vue create mode 100644 t/api/call-blocking.js diff --git a/src/api/call-blocking.js b/src/api/call-blocking.js index baeaeca8..9439caa6 100644 --- a/src/api/call-blocking.js +++ b/src/api/call-blocking.js @@ -1,8 +1,13 @@ import Vue from 'vue'; -import { enableBlockIn, disableBlockIn, enablePrivacy, - disablePrivacy, getPreferences, addToBlockInList, - removeFromBlockInList } from './subscriber'; +import { enableBlockIn, disableBlockIn, + getPreferences, addToBlockInList, + editBlockInList, removeFromBlockInList, + enableBlockOut, disableBlockOut, + addToBlockOutList, editBlockOutList, + removeFromBlockOutList, + enablePrivacy, disablePrivacy +} from './subscriber'; export function enableIncomingCallBlocking(id) { return enableBlockIn(id); @@ -39,6 +44,16 @@ export function addNumberToIncomingList(id, number) { }); } +export function editNumberFromIncomingList(id, index, number) { + return new Promise((resolve, reject)=>{ + editBlockInList(id, index, number).then(()=>{ + resolve(); + }).catch((err)=>{ + reject(err); + }); + }); +} + export function removeNumberFromIncomingList(id, index) { return new Promise((resolve, reject)=>{ removeFromBlockInList(id, index).then(()=>{ @@ -49,6 +64,61 @@ export function removeNumberFromIncomingList(id, index) { }); } +export function enableOutgoingCallBlocking(id) { + return enableBlockOut(id); +} + +export function disableOutgoingCallBlocking(id) { + return disableBlockOut(id); +} + +export function getOutgoingCallBlocking(id) { + return new Promise((resolve, reject)=>{ + getPreferences(id).then((result)=>{ + resolve({ + enabled: result.block_out_mode, + list: result.block_out_list + }); + }).catch((err)=>{ + reject(err); + }); + }); +} + +export function addNumberToOutgoingList(id, number) { + return new Promise((resolve, reject)=>{ + if(_.isEmpty(number)) { + reject(new Error('Number may not be empty')); + } else { + addToBlockOutList(id, number).then(()=>{ + resolve(); + }).catch((err)=>{ + reject(err); + }); + } + }); +} + +export function editNumberFromOutgoingList(id, index, number) { + return new Promise((resolve, reject)=>{ + editBlockOutList(id, index, number).then(()=>{ + resolve(); + }).catch((err)=>{ + reject(err); + }); + }); +} + +export function removeNumberFromOutgoingList(id, index) { + return new Promise((resolve, reject)=>{ + removeFromBlockOutList(id, index).then(()=>{ + resolve(); + }).catch((err)=>{ + reject(err); + }); + }); +} + export function enablePrivacyCallBlocking(id) { return enablePrivacy(id); } diff --git a/src/api/subscriber.js b/src/api/subscriber.js index 5301575d..cb6c1626 100644 --- a/src/api/subscriber.js +++ b/src/api/subscriber.js @@ -26,7 +26,19 @@ export function setPreference(id, field, value) { }).then(()=>{ resolve(); }).catch((err)=>{ - reject(err); + if(err.status === 422) { + Vue.http.patch('/api/subscriberpreferences/' + id, [{ + op: 'add', + path: '/'+ field, + value: value + }], { headers: headers }).then(()=>{ + resolve(); + }).catch((err)=>{ + reject(err); + }); + } else { + reject(err); + } }); }); } @@ -67,6 +79,27 @@ export function appendItemToArrayPreference(id, field, value) { }); } +export function editItemInArrayPreference(id, field, itemIndex, value) { + return new Promise((resolve, reject)=>{ + Promise.resolve().then(()=>{ + return getPreferences(id); + }).then((result)=>{ + var prefs = _.cloneDeep(result); + delete prefs._links; + if(_.isArray(prefs[field]) && itemIndex < prefs[field].length) { + prefs[field][itemIndex] = value; + return Vue.http.put('/api/subscriberpreferences/' + id, prefs); + } else { + return Promise.reject(new Error('Array index does not exists')); + } + }).then(()=>{ + resolve(); + }).catch((err)=>{ + reject(err); + }); + }); +} + export function removeItemFromArrayPreference(id, field, itemIndex) { return new Promise((resolve, reject)=>{ Promise.resolve().then(()=>{ @@ -103,10 +136,38 @@ export function addToBlockInList(id, number) { return prependItemToArrayPreference(id, 'block_in_list', number); } +export function editBlockInList(id, index, number) { + return editItemInArrayPreference(id, 'block_in_list', index, number); +} + export function removeFromBlockInList(id, index) { return removeItemFromArrayPreference(id, 'block_in_list', index); } +export function setBlockOutMode(id, value) { + return setPreference(id, 'block_out_mode', value); +} + +export function enableBlockOut(id) { + return setBlockOutMode(id, true); +} + +export function disableBlockOut(id) { + return setBlockOutMode(id, false); +} + +export function addToBlockOutList(id, number) { + return prependItemToArrayPreference(id, 'block_out_list', number); +} + +export function editBlockOutList(id, index, number) { + return editItemInArrayPreference(id, 'block_out_list', index, number); +} + +export function removeFromBlockOutList(id, index) { + return removeItemFromArrayPreference(id, 'block_out_list', index); +} + export function setPrivacy(id, value) { return setPreference(id, 'clir', value); } diff --git a/src/components/Login.vue b/src/components/Login.vue index a72bf9f7..4760c042 100644 --- a/src/components/Login.vue +++ b/src/components/Login.vue @@ -5,29 +5,22 @@
- {{ $t('login_title') }} + {{ $t('pages.login.title') }} - - + + - - + + - {{ $t('login_button') }} + {{ $t('pages.login.button') }}
@@ -71,7 +64,7 @@ this.$router.push({path : '/'}); }).catch((err)=>{ stopLoading(); - showGlobalError(this.$i18n.t('login_error')); + showGlobalError(this.$i18n.t('pages.login.error')); }); } } diff --git a/src/components/form/CscToggle.vue b/src/components/form/CscToggle.vue new file mode 100644 index 00000000..2aeb5525 --- /dev/null +++ b/src/components/form/CscToggle.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/src/components/layouts/Default.vue b/src/components/layouts/Default.vue index b1775c9a..3888566e 100644 --- a/src/components/layouts/Default.vue +++ b/src/components/layouts/Default.vue @@ -24,39 +24,39 @@ - + + :label="$t('navigation.callForward.title')" + :sublabel="$t('navigation.callForward.subTitle')"> - + - + - + + :label="$t('navigation.callBlocking.title')" + :sublabel="$t('navigation.callBlocking.subTitle')"> - + - + - + @@ -66,19 +66,19 @@ sublabel="Set your personal alarm"/> + :label="$t('navigation.pbxConfiguration.title')" + :sublabel="$t('navigation.pbxConfiguration.subTitle')"> - + - + - + diff --git a/src/components/pages/CallBlocking/CscCallBlocking.vue b/src/components/pages/CallBlocking/CscCallBlocking.vue new file mode 100644 index 00000000..9b3f34cb --- /dev/null +++ b/src/components/pages/CallBlocking/CscCallBlocking.vue @@ -0,0 +1,219 @@ + + + + + diff --git a/src/components/pages/CallBlocking/Incoming.vue b/src/components/pages/CallBlocking/Incoming.vue index 280be19a..88f1a9f1 100644 --- a/src/components/pages/CallBlocking/Incoming.vue +++ b/src/components/pages/CallBlocking/Incoming.vue @@ -1,145 +1,18 @@ diff --git a/src/components/pages/CallBlocking/Outgoing.vue b/src/components/pages/CallBlocking/Outgoing.vue index 25dc2085..ad8274ab 100644 --- a/src/components/pages/CallBlocking/Outgoing.vue +++ b/src/components/pages/CallBlocking/Outgoing.vue @@ -1,15 +1,15 @@ diff --git a/src/locales/en.json b/src/locales/en.json index 991088ca..8762bc76 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1,17 +1,16 @@ { "title": "Customer Self-Care Portal", - "login_title": "Customer Self-Care Portal", - "login_button": "Sign In", - "login_error": "Wrong username or password", - "username": "Username", - "username_helper": "Web-Username, SIP-URI", - "password": "Password", - "password_helper": "Web-Password", "rtcEngineDisconnected": "You can not start a call. Service ist currently unavailable.", "startCall": "Start Call", "sendSms": "Send SMS", "sendFax": "Send Fax", - "mainNavigation": { + "loggedInAs": "Logged in as", + "buttons": { + "cancel": "Cancel", + "save": "Save", + "remove": "Remove" + }, + "navigation": { "conversations":{ "title": "Conversations", "subTitle": "Calls, SMS, VoiceMails" @@ -41,5 +40,41 @@ "devices": "Devices" } }, - "loggedInAs": "Logged in as" + "pages": { + "login": { + "title": "Customer Self-Care Portal", + "button": "Sign In", + "error": "Wrong username or password", + "username": "Username", + "username_helper": "Web-Username, SIP-URI", + "password": "Password", + "password_helper": "Web-Password" + }, + "callBlockingIncoming": { + "title": "Block incoming calls", + "toggleEnableLabel": "Enable call blocking list", + "toggleDisableLabel": "Disable call blocking list", + "toggleEnabledToast": "Call blocking of incoming calls enabled", + "toggleDisabledToast": "Call blocking of incoming calls disabled", + "removeDialogTitle": "Remove number", + "removeDialogText": "You are about to remove the number {number}", + "removedToast": "Removed number {number}", + "addedToast": "Added number {number}", + "addInputError": "Input a valid number or subscriber name", + "addNumberButton": "Add number" + }, + "callBlockingOutgoing": { + "title": "Block outgoing calls", + "toggleEnableLabel": "Enable call blocking list", + "toggleDisableLabel": "Disable call blocking list", + "toggleEnabledToast": "Call blocking of outgoing calls enabled", + "toggleDisabledToast": "Call blocking of outgoing calls disabled", + "removeDialogTitle": "Remove number", + "removeDialogText": "You are about to remove the number {number}", + "removedToast": "Removed number {number}", + "addedToast": "Added number {number}", + "addInputError": "Input a valid number or subscriber name", + "addNumberButton": "Add number" + } + } } diff --git a/src/store/call-blocking.js b/src/store/call-blocking.js index 76079234..8f815e87 100644 --- a/src/store/call-blocking.js +++ b/src/store/call-blocking.js @@ -1,21 +1,30 @@ 'use strict'; -import _ from 'lodash'; import { enableIncomingCallBlocking, disableIncomingCallBlocking, getIncomingCallBlocking, addNumberToIncomingList, + editNumberFromIncomingList, removeNumberFromIncomingList, + enableOutgoingCallBlocking, + disableOutgoingCallBlocking, + getOutgoingCallBlocking, + addNumberToOutgoingList, + editNumberFromOutgoingList, + removeNumberFromOutgoingList, enablePrivacyCallBlocking, disablePrivacyCallBlocking, getPrivacyCallBlocking } from '../api/call-blocking'; + export default { namespaced: true, state: { incomingEnabled: false, incomingList: [], + outgoingEnabled: false, + outgoingList: [], privacyEnabled: false }, getters: {}, @@ -38,6 +47,16 @@ export default { }, loadPrivacy(state, options) { state.privacyEnabled = options.enabled; + }, + enableOutgoing (state) { + state.outgoingEnabled = true; + }, + disableOutgoing (state) { + state.outgoingEnabled = false; + }, + loadOutgoing(state, options) { + state.outgoingEnabled = options.enabled; + state.outgoingList = options.list; } }, actions: { @@ -70,7 +89,7 @@ export default { }); }); }, - addNumberToIncoming(context, number) { + addNumberIncoming(context, number) { return new Promise((resolve, reject)=>{ addNumberToIncomingList(localStorage.getItem('subscriberId'), number).then(()=>{ return context.dispatch('loadIncoming'); @@ -81,7 +100,18 @@ export default { }); }); }, - removeNumberFromIncoming(context, index) { + editNumberIncoming(context, options) { + return new Promise((resolve, reject)=>{ + editNumberFromIncomingList(localStorage.getItem('subscriberId'), options.index, options.number).then(()=>{ + return context.dispatch('loadIncoming'); + }).then(()=>{ + resolve(); + }).catch((err)=>{ + reject(err); + }); + }); + }, + removeNumberIncoming(context, index) { return new Promise((resolve, reject)=>{ removeNumberFromIncomingList(localStorage.getItem('subscriberId'), index).then(()=>{ return context.dispatch('loadIncoming'); @@ -92,6 +122,68 @@ export default { }); }); }, + toggleOutgoing(context, enabled) { + return new Promise((resolve, reject)=>{ + if(enabled) { + enableOutgoingCallBlocking(localStorage.getItem('subscriberId')).then(()=>{ + context.commit('enableOutgoing'); + resolve(); + }).catch((err)=>{ + reject(err); + }); + } else { + disableOutgoingCallBlocking(localStorage.getItem('subscriberId')).then(()=>{ + context.commit('disableOutgoing'); + resolve(); + }).catch((err)=>{ + reject(err); + }); + } + }); + }, + loadOutgoing(context) { + return new Promise((resolve, reject)=>{ + getOutgoingCallBlocking(localStorage.getItem('subscriberId')).then((result)=>{ + context.commit('loadOutgoing', result); + resolve(); + }).catch((err)=>{ + reject(err); + }); + }); + }, + addNumberOutgoing(context, number) { + return new Promise((resolve, reject)=>{ + addNumberToOutgoingList(localStorage.getItem('subscriberId'), number).then(()=>{ + return context.dispatch('loadOutgoing'); + }).then(()=>{ + resolve(); + }).catch((err)=>{ + reject(err); + }); + }); + }, + editNumberOutgoing(context, options) { + return new Promise((resolve, reject)=>{ + editNumberFromOutgoingList(localStorage.getItem('subscriberId'), options.index, options.number).then(()=>{ + return context.dispatch('loadOutgoing'); + }).then(()=>{ + resolve(); + }).catch((err)=>{ + reject(err); + }); + }); + }, + removeNumberOutgoing(context, index) { + return new Promise((resolve, reject)=>{ + removeNumberFromOutgoingList(localStorage.getItem('subscriberId'), index).then(()=>{ + return context.dispatch('loadOutgoing'); + }).then(()=>{ + resolve(); + }).catch((err)=>{ + reject(err); + }); + }); + }, togglePrivacy(context, enabled) { return new Promise((resolve, reject)=>{ if(enabled) { diff --git a/t/api/call-blocking.js b/t/api/call-blocking.js new file mode 100644 index 00000000..f518b725 --- /dev/null +++ b/t/api/call-blocking.js @@ -0,0 +1,310 @@ +'use strict'; + +import Vue from 'vue'; +import VueResource from 'vue-resource'; +import { + enableIncomingCallBlocking, + disableIncomingCallBlocking, + getIncomingCallBlocking, + addNumberToIncomingList, + editNumberFromIncomingList, + removeNumberFromIncomingList, + enableOutgoingCallBlocking, + disableOutgoingCallBlocking, + getOutgoingCallBlocking, + addNumberToOutgoingList, + editNumberFromOutgoingList, + removeNumberFromOutgoingList +} from '../../src/api/call-blocking'; +import { assert } from 'chai'; + +Vue.use(VueResource); + +describe('CallBlocking', function(){ + + var subscriberId = 123; + + beforeEach(function(){ + Vue.http.interceptors = []; + }); + + describe('Incoming', function(){ + it('should enable call blocking for incoming calls', function(done) { + Vue.http.interceptors.unshift((request, next)=>{ + assert.equal(request.url, '/api/subscriberpreferences/' + subscriberId); + assert.equal(request.body[0].op, 'replace'); + assert.equal(request.body[0].path, '/block_in_mode'); + assert.equal(request.body[0].value, true); + next(request.respondWith('', { + status: 204 + })); + }); + enableIncomingCallBlocking(subscriberId).then(()=>{ + done(); + }).catch((err)=>{ + done(err); + }); + }); + + it('should disable call blocking for incoming calls', function(done) { + Vue.http.interceptors.unshift((request, next)=>{ + assert.equal(request.url, '/api/subscriberpreferences/' + subscriberId); + assert.equal(request.body[0].op, 'replace'); + assert.equal(request.body[0].path, '/block_in_mode'); + assert.equal(request.body[0].value, false); + next(request.respondWith('', { + status: 204 + })); + }); + disableIncomingCallBlocking(subscriberId).then(()=>{ + done(); + }).catch((err)=>{ + done(err); + }); + }); + + it('should get all data regarding incoming call blocking', function(done){ + var list = [ + "0123456789", + "0987654321" + ]; + Vue.http.interceptors.unshift((request, next)=>{ + assert.equal(request.url, '/api/subscriberpreferences/' + subscriberId); + next(request.respondWith(JSON.stringify({ + "block_in_list" : list, + "block_in_mode" : true + }), { + status: 200 + })); + }); + getIncomingCallBlocking(subscriberId).then((result)=>{ + assert.deepEqual(result.list, list); + assert.equal(result.enabled, true); + done(); + }).catch((err)=>{ + done(err); + }); + }); + + it('should add a new number to incoming call blocking list', function(done){ + var number = '0987654321'; + var list = [ + "0123456789" + ]; + Vue.http.interceptors.unshift((request, next)=>{ + assert.equal(request.url, '/api/subscriberpreferences/' + subscriberId); + if(request.method === 'GET') { + next(request.respondWith(JSON.stringify({ + "block_in_list" : list + }), { + status: 200 + })); + } else if(request.method === 'PUT') { + assert.deepEqual(request.body.block_in_list, [].concat([number], list)); + next(request.respondWith('', { + status: 200 + })); + } + }); + addNumberToIncomingList(subscriberId, number).then((result)=>{ + done(); + }).catch((err)=>{ + done(err); + }); + }); + + it('should edit a number from incoming call blocking list', function(done){ + var number = '0987654321'; + var list = [ + "0123456789" + ]; + Vue.http.interceptors.unshift((request, next)=>{ + assert.equal(request.url, '/api/subscriberpreferences/' + subscriberId); + if(request.method === 'GET') { + next(request.respondWith(JSON.stringify({ + "block_in_list" : list + }), { + status: 200 + })); + } else if(request.method === 'PUT') { + assert.deepEqual(request.body.block_in_list, [number]); + next(request.respondWith('', { + status: 200 + })); + } + }); + editNumberFromIncomingList(subscriberId, 0, number).then((result)=>{ + done(); + }).catch((err)=>{ + done(err); + }); + }); + + it('should remove a number from incoming call blocking list', function(done){ + var number = '0987654321'; + var list = [ + "0123456789" + ]; + Vue.http.interceptors.unshift((request, next)=>{ + assert.equal(request.url, '/api/subscriberpreferences/' + subscriberId); + if(request.method === 'GET') { + next(request.respondWith(JSON.stringify({ + "block_in_list" : [].concat([number]).concat(list) + }), { + status: 200 + })); + } else if(request.method === 'PUT') { + assert.deepEqual(request.body.block_in_list, list); + next(request.respondWith('', { + status: 200 + })); + } + }); + removeNumberFromIncomingList(subscriberId, 0, number).then((result)=>{ + done(); + }).catch((err)=>{ + done(err); + }); + }); + }); + + describe('Outgoing', function(){ + it('should enable call blocking for outgoing calls', function(done) { + Vue.http.interceptors.unshift((request, next)=>{ + assert.equal(request.url, '/api/subscriberpreferences/' + subscriberId); + assert.equal(request.body[0].op, 'replace'); + assert.equal(request.body[0].path, '/block_out_mode'); + assert.equal(request.body[0].value, true); + next(request.respondWith('', { + status: 204 + })); + }); + enableOutgoingCallBlocking(subscriberId).then(()=>{ + done(); + }).catch((err)=>{ + done(err); + }); + }); + + it('should disable call blocking for outgoing calls', function(done) { + Vue.http.interceptors.unshift((request, next)=>{ + assert.equal(request.url, '/api/subscriberpreferences/' + subscriberId); + assert.equal(request.body[0].op, 'replace'); + assert.equal(request.body[0].path, '/block_out_mode'); + assert.equal(request.body[0].value, false); + next(request.respondWith('', { + status: 204 + })); + }); + disableOutgoingCallBlocking(subscriberId).then(()=>{ + done(); + }).catch((err)=>{ + done(err); + }); + }); + + it('should get all data regarding outgoing call blocking', function(done){ + var list = [ + "0123456789", + "0987654321" + ]; + Vue.http.interceptors.unshift((request, next)=>{ + assert.equal(request.url, '/api/subscriberpreferences/' + subscriberId); + next(request.respondWith(JSON.stringify({ + "block_out_list" : list, + "block_out_mode" : true + }), { + status: 200 + })); + }); + getOutgoingCallBlocking(subscriberId).then((result)=>{ + assert.deepEqual(result.list, list); + assert.equal(result.enabled, true); + done(); + }).catch((err)=>{ + done(err); + }); + }); + + it('should add a new number to outgoing call blocking list', function(done){ + var number = '0987654321'; + var list = [ + "0123456789" + ]; + Vue.http.interceptors.unshift((request, next)=>{ + assert.equal(request.url, '/api/subscriberpreferences/' + subscriberId); + if(request.method === 'GET') { + next(request.respondWith(JSON.stringify({ + "block_out_list" : list + }), { + status: 200 + })); + } else if(request.method === 'PUT') { + assert.deepEqual(request.body.block_out_list, [].concat([number], list)); + next(request.respondWith('', { + status: 200 + })); + } + }); + addNumberToOutgoingList(subscriberId, number).then((result)=>{ + done(); + }).catch((err)=>{ + done(err); + }); + }); + + it('should edit a number from outgoing call blocking list', function(done){ + var number = '0987654321'; + var list = [ + "0123456789" + ]; + Vue.http.interceptors.unshift((request, next)=>{ + assert.equal(request.url, '/api/subscriberpreferences/' + subscriberId); + if(request.method === 'GET') { + next(request.respondWith(JSON.stringify({ + "block_out_list" : list + }), { + status: 200 + })); + } else if(request.method === 'PUT') { + assert.deepEqual(request.body.block_out_list, [number]); + next(request.respondWith('', { + status: 200 + })); + } + }); + editNumberFromOutgoingList(subscriberId, 0, number).then((result)=>{ + done(); + }).catch((err)=>{ + done(err); + }); + }); + + it('should remove a number from outgoing call blocking list', function(done){ + var number = '0987654321'; + var list = [ + "0123456789" + ]; + Vue.http.interceptors.unshift((request, next)=>{ + assert.equal(request.url, '/api/subscriberpreferences/' + subscriberId); + if(request.method === 'GET') { + next(request.respondWith(JSON.stringify({ + "block_out_list" : [].concat([number]).concat(list) + }), { + status: 200 + })); + } else if(request.method === 'PUT') { + assert.deepEqual(request.body.block_out_list, list); + next(request.respondWith('', { + status: 200 + })); + } + }); + removeNumberFromOutgoingList(subscriberId, 0).then(()=>{ + done(); + }).catch((err)=>{ + done(err); + }); + }); + }); +}); diff --git a/t/store/call-blocking.js b/t/store/call-blocking.js index a4da81c2..cf6da492 100644 --- a/t/store/call-blocking.js +++ b/t/store/call-blocking.js @@ -3,31 +3,64 @@ import CallBlockingModule from '../../src/store/call-blocking'; import { assert } from 'chai'; -describe('CallBlockingModule', ()=>{ +describe('CallBlocking', function(){ - it('should enable/disable incoming call blocking', ()=>{ - var state = {}; - CallBlockingModule.mutations.enableIncoming(state); - assert.equal(state.incomingEnabled, true); - CallBlockingModule.mutations.disableIncoming(state); - assert.equal(state.incomingEnabled, false); + describe('Incoming', function(){ + + it('should enable list', function(){ + var state = {}; + CallBlockingModule.mutations.enableIncoming(state); + assert.equal(state.incomingEnabled, true); + }); + + it('should disable list', function(){ + var state = {}; + CallBlockingModule.mutations.disableIncoming(state); + assert.equal(state.incomingEnabled, false); + }); + + it('should load list and flag', function(){ + var state = {}; + var list = [ + '0123456789', + '0987654321' + ]; + CallBlockingModule.mutations.loadIncoming(state, { + enabled: true, + list: list + }); + assert.equal(state.incomingEnabled, true); + assert.deepEqual(state.incomingList, list); + }); }); - it('should load incoming call blocking data', ()=>{ - var state = {}; - var list = [ - '+4312345678', - '+4387654321' - ]; - CallBlockingModule.mutations.loadIncoming(state, { - enabled: true, - list: [ - '+4312345678', - '+4387654321' - ] + describe('Outgoing', function(){ + + it('should enable list', function(){ + var state = {}; + CallBlockingModule.mutations.enableOutgoing(state); + assert.equal(state.outgoingEnabled, true); + }); + + it('should disable list', function(){ + var state = {}; + CallBlockingModule.mutations.disableOutgoing(state); + assert.equal(state.outgoingEnabled, false); + }); + + it('should load list and flag', function(){ + var state = {}; + var list = [ + '0123456789', + '0987654321' + ]; + CallBlockingModule.mutations.loadOutgoing(state, { + enabled: true, + list: list + }); + assert.equal(state.outgoingEnabled, true); + assert.deepEqual(state.outgoingList, list); }); - assert.equal(state.incomingEnabled, true); - assert.deepEqual(state.incomingList, list); }); it('should enable/disable privacy call blocking', ()=>{