ngcp-csc-ui/t/api/reminder.js

158 lines
5.1 KiB

'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);
});
});
});