Change-Id: Ic9308c71bfc45bc34d8e4d910fc655453a664a04changes/21/22421/4
parent
84d019734b
commit
d99f6fa493
@ -1,68 +1,134 @@
|
||||
import Vue from 'vue';
|
||||
|
||||
export function createReminder(id) {
|
||||
import _ from 'lodash'
|
||||
import Vue from 'vue'
|
||||
import {
|
||||
getList,
|
||||
patchReplace
|
||||
} from './common'
|
||||
|
||||
export function createReminder(subscriberId) {
|
||||
return new Promise((resolve, reject) => {
|
||||
var data = {
|
||||
subscriber_id: id,
|
||||
Vue.http.post('api/reminders/', {
|
||||
subscriber_id: subscriberId,
|
||||
time: '00:00',
|
||||
recur: 'never',
|
||||
active: false
|
||||
};
|
||||
Vue.http.post('api/reminders/', data).then((result) => {
|
||||
var reminderID = result.headers.get('Location').split('/')[3];
|
||||
resolve(reminderID);
|
||||
}).then((result) => {
|
||||
let parts = result.headers.get('Location').split('/');
|
||||
resolve(_.last(parts));
|
||||
}).catch((err) => {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export function getReminder(id) {
|
||||
export function getFirstReminder(subscriberId) {
|
||||
return new Promise((resolve, reject) => {
|
||||
Vue.http.get('api/reminders/', {
|
||||
getList({
|
||||
path: 'api/reminders/',
|
||||
root: '_embedded.ngcp:reminders',
|
||||
params: {
|
||||
supplier_id: id
|
||||
page: 1,
|
||||
rows: 1,
|
||||
subscriber_id: subscriberId
|
||||
}
|
||||
}).then((result) => {
|
||||
resolve(JSON.parse(result.body));
|
||||
}).catch((err) => {
|
||||
}).then((reminders)=>{
|
||||
resolve(_.get(reminders, 'items.0', null));
|
||||
}).catch((err)=>{
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export function enableReminder(id) {
|
||||
return patchReminder(id, '/active', true);
|
||||
export function getReminder(subscriberId) {
|
||||
return new Promise((resolve, reject)=>{
|
||||
Promise.resolve().then(()=>{
|
||||
return getFirstReminder(subscriberId);
|
||||
}).then((reminder)=>{
|
||||
if(reminder === null) {
|
||||
return createAndGetReminder(subscriberId);
|
||||
}
|
||||
else {
|
||||
return Promise.resolve(reminder);
|
||||
}
|
||||
}).then((reminder)=>{
|
||||
resolve(reminder);
|
||||
}).catch((err)=>{
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export function disableReminder(id) {
|
||||
return patchReminder(id, '/active', false);
|
||||
export function createAndGetReminder(subscriberId) {
|
||||
return new Promise((resolve, reject)=>{
|
||||
Promise.resolve().then(()=>{
|
||||
return createReminder(subscriberId);
|
||||
}).then(()=>{
|
||||
return getFirstReminder(subscriberId);
|
||||
}).then((reminder)=>{
|
||||
resolve(reminder);
|
||||
}).catch((err)=>{
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export function setTime(id, time) {
|
||||
return patchReminder(id, '/time', time);
|
||||
export function setReminderActive(reminderId, active) {
|
||||
return patchReplace({
|
||||
path: 'api/reminders/' + reminderId,
|
||||
fieldPath: 'active',
|
||||
value: active
|
||||
});
|
||||
}
|
||||
|
||||
export function setRecurrence(id, recurrence) {
|
||||
return patchReminder(id, '/recur', recurrence);
|
||||
export function setReminderTime(reminderId, time) {
|
||||
return patchReplace({
|
||||
path: 'api/reminders/' + reminderId,
|
||||
fieldPath: 'time',
|
||||
value: time
|
||||
});
|
||||
}
|
||||
|
||||
function patchReminder(id, field, value) {
|
||||
return new Promise((resolve, reject) => {
|
||||
var data = [{
|
||||
"op": "replace",
|
||||
"path": field,
|
||||
"value": value
|
||||
}];
|
||||
var patchHeaders = {
|
||||
headers: {
|
||||
'Content-Type': 'application/json-patch+json'
|
||||
}
|
||||
};
|
||||
Vue.http.patch('api/reminders/' + id, data, patchHeaders).then(() => {
|
||||
resolve();
|
||||
}).catch((err) => {
|
||||
reject(err);
|
||||
});
|
||||
export function setReminderRecurrence(reminderId, reccurence) {
|
||||
return patchReplace({
|
||||
path: 'api/reminders/' + reminderId,
|
||||
fieldPath: 'recur',
|
||||
value: reccurence
|
||||
});
|
||||
}
|
||||
|
||||
// export function enableReminder(id) {
|
||||
// return patchReminder(id, '/active', true);
|
||||
// }
|
||||
//
|
||||
// export function disableReminder(id) {
|
||||
// return patchReminder(id, '/active', false);
|
||||
// }
|
||||
//
|
||||
// export function setTime(id, time) {
|
||||
// return patchReminder(id, '/time', time);
|
||||
// }
|
||||
//
|
||||
// export function setRecurrence(id, recurrence) {
|
||||
// return patchReminder(id, '/recur', recurrence);
|
||||
// }
|
||||
//
|
||||
// function patchReminder(id, field, value) {
|
||||
// return new Promise((resolve, reject) => {
|
||||
// var data = [{
|
||||
// "op": "replace",
|
||||
// "path": field,
|
||||
// "value": value
|
||||
// }];
|
||||
// var patchHeaders = {
|
||||
// headers: {
|
||||
// 'Content-Type': 'application/json-patch+json'
|
||||
// }
|
||||
// };
|
||||
// Vue.http.patch('api/reminders/' + id, data, patchHeaders).then(() => {
|
||||
// resolve();
|
||||
// }).catch((err) => {
|
||||
// reject(err);
|
||||
// });
|
||||
// });
|
||||
// }
|
||||
|
@ -1,101 +1,129 @@
|
||||
'use strict';
|
||||
|
||||
import moment from 'moment'
|
||||
import _ from 'lodash'
|
||||
import { RequestState } from './common'
|
||||
import {
|
||||
getReminder,
|
||||
createReminder,
|
||||
enableReminder,
|
||||
disableReminder,
|
||||
setTime,
|
||||
setRecurrence
|
||||
setReminderActive,
|
||||
setReminderTime,
|
||||
setReminderRecurrence
|
||||
} from '../api/reminder';
|
||||
|
||||
|
||||
export default {
|
||||
namespaced: true,
|
||||
state: {
|
||||
reminder: null,
|
||||
reminderLoadingState: RequestState.initiated,
|
||||
reminderUpdating: null,
|
||||
reminderUpdated: false,
|
||||
reminderError: null
|
||||
},
|
||||
getters: {
|
||||
isReminderActive(state) {
|
||||
return state.reminder !== null && state.reminder.active === true;
|
||||
},
|
||||
reminderTime(state) {
|
||||
return _.get(state.reminder, 'time', '00:00:00');
|
||||
},
|
||||
reminderRecurrence(state) {
|
||||
return _.get(state.reminder, 'recur', null);
|
||||
},
|
||||
reminderLoadingState(state) {
|
||||
return state.reminderLoadingState;
|
||||
},
|
||||
reminderUpdating(state) {
|
||||
return state.reminderUpdating;
|
||||
},
|
||||
reminderError(state) {
|
||||
return state.reminderError
|
||||
},
|
||||
reminderId(state) {
|
||||
return _.get(state.reminder, 'id', null);
|
||||
},
|
||||
isReminderLoading(state) {
|
||||
return state.reminderLoadingState === RequestState.requesting;
|
||||
},
|
||||
reminderUpdated(state) {
|
||||
return state.reminderUpdated;
|
||||
}
|
||||
},
|
||||
mutations: {
|
||||
reminderLoaded(state, options) {
|
||||
state.reminderID = options.id;
|
||||
state.active = options.active;
|
||||
state.time = options.time;
|
||||
state.recurrence = options.recur;
|
||||
reminderLoading(state) {
|
||||
state.reminderLoadingState = RequestState.requesting;
|
||||
state.reminderError = null;
|
||||
},
|
||||
enableReminder(state) {
|
||||
state.active = true;
|
||||
reminderLoaded(state, reminder) {
|
||||
state.reminderLoadingState = RequestState.succeeded;
|
||||
state.reminder = reminder;
|
||||
},
|
||||
disableReminder(state) {
|
||||
state.active = false;
|
||||
reminderLoadingFailed(state, error) {
|
||||
state.reminderLoadingState = RequestState.failed;
|
||||
state.reminderError = error;
|
||||
},
|
||||
setTime(state, newTime) {
|
||||
state.time = newTime;
|
||||
reminderUpdating(state, field) {
|
||||
state.reminderLoadingState = RequestState.requesting;
|
||||
state.reminderUpdating = field;
|
||||
state.reminderUpdated = false;
|
||||
},
|
||||
setRecurrence(state, recurrence) {
|
||||
state.recurrence = recurrence;
|
||||
reminderUpdated(state) {
|
||||
state.reminderError = null;
|
||||
state.reminderUpdated = true;
|
||||
},
|
||||
reminderCreated(state, reminderID) {
|
||||
state.reminderID = reminderID;
|
||||
reminderUpdatingFailed(state, error) {
|
||||
state.reminderLoadingState = RequestState.failed;
|
||||
state.reminderError = error;
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
loadReminder(context) {
|
||||
return new Promise((resolve, reject) => {
|
||||
getReminder(localStorage.getItem('subscriberId')).then((result) => {
|
||||
if (result.total_count > 0) {
|
||||
context.commit('reminderLoaded', result._embedded['ngcp:reminders'][0]); // open to suggestions on how to extract data here
|
||||
}
|
||||
else {
|
||||
// If no default reminder is set, then we need to create it.
|
||||
createReminder(localStorage.getItem('subscriberId')).then((result) => {
|
||||
context.commit('reminderCreated', result);
|
||||
resolve();
|
||||
}).catch((err) => {
|
||||
reject(err);
|
||||
});
|
||||
}
|
||||
return new Promise((resolve, reject)=>{
|
||||
context.commit('reminderLoading');
|
||||
getReminder(localStorage.getItem('subscriberId')).then((reminder)=>{
|
||||
context.commit('reminderLoaded', reminder);
|
||||
resolve();
|
||||
}).catch((err) => {
|
||||
}).catch((err)=>{
|
||||
reject(err);
|
||||
context.commit('reminderLoadingFailed', err.message);
|
||||
});
|
||||
});
|
||||
},
|
||||
toggleReminder(context, enabled) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (enabled === true) {
|
||||
enableReminder(context.state.reminderID).then(() => {
|
||||
context.commit('enableReminder');
|
||||
resolve();
|
||||
}).catch((err) => {
|
||||
reject(err);
|
||||
});
|
||||
}
|
||||
else {
|
||||
disableReminder(context.state.reminderID).then(() => {
|
||||
context.commit('disableReminder');
|
||||
resolve();
|
||||
}).catch((err) => {
|
||||
reject(err);
|
||||
});
|
||||
}
|
||||
});
|
||||
toggleReminder(context) {
|
||||
context.commit('reminderUpdating', 'active');
|
||||
if(context.getters.reminderId !== null) {
|
||||
setReminderActive(context.getters.reminderId, !context.getters.isReminderActive).then(()=>{
|
||||
return context.dispatch('loadReminder');
|
||||
}).then(()=>{
|
||||
context.commit('reminderUpdated');
|
||||
}).catch((err)=>{
|
||||
context.commit('reminderUpdatingFailed', err.message);
|
||||
});
|
||||
}
|
||||
},
|
||||
changeTime(context, time) {
|
||||
return new Promise((resolve, reject) => {
|
||||
setTime(context.state.reminderID, time).then(() => {
|
||||
context.commit('setTime', time);
|
||||
resolve();
|
||||
}).catch((err) => {
|
||||
reject(err);
|
||||
updateTime(context, time) {
|
||||
context.commit('reminderUpdating', 'time');
|
||||
if(context.getters.reminderId !== null) {
|
||||
setReminderTime(context.getters.reminderId, moment(time).format('HH:mm:ss')).then(()=>{
|
||||
return context.dispatch('loadReminder');
|
||||
}).then(()=>{
|
||||
context.commit('reminderUpdated');
|
||||
}).catch((err)=>{
|
||||
context.commit('reminderUpdatingFailed', err.message);
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
changeRecurrence(context, recurrence) {
|
||||
return new Promise((resolve, reject) => {
|
||||
setRecurrence(context.state.reminderID, recurrence).then(() => {
|
||||
context.commit('setRecurrence', recurrence);
|
||||
resolve();
|
||||
}).catch((err) => {
|
||||
reject(err);
|
||||
updateRecurrence(context, recurrence) {
|
||||
context.commit('reminderUpdating', 'recurrence');
|
||||
if(context.getters.reminderId !== null) {
|
||||
setReminderRecurrence(context.getters.reminderId, recurrence).then(()=>{
|
||||
return context.dispatch('loadReminder');
|
||||
}).then(()=>{
|
||||
context.commit('reminderUpdated');
|
||||
}).catch((err)=>{
|
||||
context.commit('reminderUpdatingFailed', err.message);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -1,157 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
import Vue from 'vue';
|
||||
import VueResource from 'vue-resource';
|
||||
import {
|
||||
createReminder,
|
||||
getReminder,
|
||||
enableReminder,
|
||||
disableReminder,
|
||||
setTime,
|
||||
setRecurrence
|
||||
} from '../../src/api/reminder';
|
||||
import {
|
||||
assert
|
||||
} from 'chai';
|
||||
|
||||
Vue.use(VueResource);
|
||||
|
||||
|
||||
describe('Reminder', function() {
|
||||
|
||||
var subscriberId = 123;
|
||||
var reminderID = 1;
|
||||
|
||||
beforeEach(function() {
|
||||
Vue.http.interceptors = [];
|
||||
});
|
||||
|
||||
it('should return 201 when creating a new reminder', function(done) {
|
||||
Vue.http.interceptors.unshift((request, next) => {
|
||||
assert.equal(request.url, 'api/reminders/');
|
||||
assert.equal(request.body.subscriber_id, subscriberId);
|
||||
assert.equal(request.body.time, '00:00');
|
||||
assert.equal(request.body.recur, 'never');
|
||||
assert.equal(request.body.active, false);
|
||||
next(
|
||||
request.respondWith('', {
|
||||
status: 201,
|
||||
headers: {
|
||||
location: 'api/reminders/' + reminderID
|
||||
}
|
||||
})
|
||||
)
|
||||
});
|
||||
createReminder(subscriberId).then((result) => {
|
||||
done();
|
||||
}).catch((err) => {
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
|
||||
it('should get the existing reminder', function(done) {
|
||||
Vue.http.interceptors.unshift((request, next) => {
|
||||
assert.equal(request.url, 'api/reminders/');
|
||||
assert.equal(request.params.supplier_id, subscriberId);
|
||||
next(request.respondWith(JSON.stringify({
|
||||
"_embedded": {
|
||||
"ngcp:reminders": [{
|
||||
"active": true,
|
||||
"id": reminderID,
|
||||
"recur": "always",
|
||||
"subscriber_id": 239,
|
||||
"time": "18:47:00"
|
||||
}]
|
||||
},
|
||||
"total_count": 1
|
||||
}), {
|
||||
status: 200
|
||||
}));
|
||||
});
|
||||
getReminder(subscriberId).then((result) => {
|
||||
var reminderData = result._embedded['ngcp:reminders'][0];
|
||||
assert.property(reminderData, 'id');
|
||||
assert.property(reminderData, 'active');
|
||||
assert.property(reminderData, 'recur');
|
||||
assert.property(reminderData, 'subscriber_id');
|
||||
assert.property(reminderData, 'time');
|
||||
assert.isNumber(reminderData.id);
|
||||
assert.isTrue(reminderData.active);
|
||||
assert.include(['always', 'once', 'weekdays'], reminderData.recur);
|
||||
assert.isNumber(reminderData.subscriber_id);
|
||||
assert.isString(reminderData.time)
|
||||
done();
|
||||
}).catch((err) => {
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
|
||||
it('should activate a reminder', function(done) {
|
||||
Vue.http.interceptors.unshift((request, next) => {
|
||||
assert.equal(request.url, 'api/reminders/' + reminderID);
|
||||
assert.equal(request.body[0].op, 'replace');
|
||||
assert.equal(request.body[0].path, '/active');
|
||||
assert.equal(request.body[0].value, true);
|
||||
next(request.respondWith('', {
|
||||
status: 204
|
||||
}));
|
||||
});
|
||||
enableReminder(reminderID).then(() => {
|
||||
done();
|
||||
}).catch((err) => {
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
|
||||
it('should deactivate a reminder', function(done) {
|
||||
Vue.http.interceptors.unshift((request, next) => {
|
||||
assert.equal(request.url, 'api/reminders/' + reminderID);
|
||||
assert.equal(request.body[0].op, 'replace');
|
||||
assert.equal(request.body[0].path, '/active');
|
||||
assert.equal(request.body[0].value, false);
|
||||
next(request.respondWith('', {
|
||||
status: 204
|
||||
}));
|
||||
});
|
||||
disableReminder(reminderID).then(() => {
|
||||
done();
|
||||
}).catch((err) => {
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
|
||||
it('should set reminder time', function(done) {
|
||||
Vue.http.interceptors.unshift((request, next) => {
|
||||
assert.equal(request.url, 'api/reminders/' + reminderID);
|
||||
assert.equal(request.body[0].op, 'replace');
|
||||
assert.equal(request.body[0].path, '/time');
|
||||
assert.equal(request.body[0].value, '22:22:00');
|
||||
next(request.respondWith('', {
|
||||
status: 204
|
||||
}));
|
||||
});
|
||||
setTime(reminderID, '22:22:00').then(() => {
|
||||
done();
|
||||
}).catch((err) => {
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
|
||||
it('should set reminder recurrence', function(done) {
|
||||
Vue.http.interceptors.unshift((request, next) => {
|
||||
assert.equal(request.url, 'api/reminders/' + reminderID);
|
||||
assert.equal(request.body[0].op, 'replace');
|
||||
assert.equal(request.body[0].path, '/recur');
|
||||
assert.equal(request.body[0].value, 'always');
|
||||
next(request.respondWith('', {
|
||||
status: 204
|
||||
}));
|
||||
});
|
||||
setRecurrence(reminderID, 'always').then(() => {
|
||||
done();
|
||||
}).catch((err) => {
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
@ -1,54 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
import Reminder from '../../src/store/reminder';
|
||||
import {
|
||||
assert
|
||||
} from 'chai';
|
||||
|
||||
describe('Reminder', () => {
|
||||
|
||||
it('should load reminder data', () => {
|
||||
var state = {};
|
||||
var data = {
|
||||
id: '1',
|
||||
active: true,
|
||||
time: '23:23:00',
|
||||
recur: 'always'
|
||||
};
|
||||
Reminder.mutations.reminderLoaded(state, data);
|
||||
assert.equal(state.reminderID, data.id);
|
||||
assert.equal(state.active, data.active);
|
||||
assert.equal(state.time, data.time);
|
||||
assert.equal(state.recurrence, data.recur);
|
||||
});
|
||||
|
||||
it('should enable/disable the reminder', () => {
|
||||
var state = {};
|
||||
Reminder.mutations.enableReminder(state);
|
||||
assert.equal(state.active, true);
|
||||
Reminder.mutations.disableReminder(state);
|
||||
assert.equal(state.active, false);
|
||||
});
|
||||
|
||||
it('should set reminder time', () => {
|
||||
var state = {};
|
||||
var time = '23:23:00'
|
||||
Reminder.mutations.setTime(state, time);
|
||||
assert.equal(state.time, time);
|
||||
});
|
||||
|
||||
it('should set reminder recurrence', () => {
|
||||
var state = {};
|
||||
var recurrence = 'always'
|
||||
Reminder.mutations.setRecurrence(state, recurrence);
|
||||
assert.equal(state.recurrence, recurrence);
|
||||
});
|
||||
|
||||
it('should set reminder id', () => {
|
||||
var state = {};
|
||||
var reminderID = '1'
|
||||
Reminder.mutations.reminderCreated(state, reminderID);
|
||||
assert.equal(state.reminderID, reminderID);
|
||||
});
|
||||
|
||||
});
|
Loading…
Reference in new issue