/
autoAdjustmentUserSpec.js
133 lines (112 loc) · 3.82 KB
/
autoAdjustmentUserSpec.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
'use strict';
let helpers = require('./mockDatabase');
let api = {
user: require('../../../api/User.api'),
request: require('../../../api/Request.api'),
right: require('../../../api/Right.api')
};
describe('Auto adjustment with direct link to user', function() {
let app, user, sick, sickRenewal, rtt, rttRenewal;
let dbName = 'rightAutoAdjustmentUserSpec';
beforeEach(function(done) {
helpers.mockDatabase(dbName, function(mockapp) {
app = mockapp;
done();
});
});
it('create a test user', function(done) {
api.user.createRandomAccount(app).then(function(randomAccount) {
expect(randomAccount.user.email).toBeDefined();
expect(randomAccount.user.roles.account).toBeDefined();
user = randomAccount.user;
return api.user.linkToDefaultCollection(app, randomAccount);
})
.then(() => {
done();
})
.catch(done);
});
it('create sick leave right', function(done) {
api.right.createRight(app, {
name: 'Sick leave test',
quantity: null,
type: '5740adf51cf1a569643cc50b'
})
.then(right => {
sick = right;
return sick.addUserBeneficiary(user)
.then(() => {
return sick.getLastRenewal();
});
})
.then(renewal => {
sickRenewal = renewal;
done();
})
.catch(done);
});
it('create right with auto adjustment from sick leave', function(done) {
api.right.createRight(app, {
name: 'RTT test',
quantity: 10,
autoAdjustment: {
types: ['5740adf51cf1a569643cc50b'],
quantity: -0.5,
step: 5
} // Remove 0.5 days every 5 consumed day of sick leave
})
.then(right => {
rtt = right;
return api.right.linkToDefaultCollection(app, rtt)
.then(() => {
return rtt.getLastRenewal();
});
})
.then(renewal => {
rttRenewal = renewal;
done();
})
.catch(done);
});
it('create 4 day of sickness', function (done) {
let dtstart = new Date(2016,0,10,8 ,0,0,0);
let dtend = new Date(2016,0,14,19,0,0,0);
api.request.createAbsenceOnRenewal(app, sickRenewal, user, dtstart, dtend, 4)
.then(request => {
expect(request.absence.distribution[0].quantity).toEqual(4);
done();
})
.catch(done);
});
it('create 1 day of sickness && Check availability on RTT right', function (done) {
let dtstart = new Date(2016,0,15,8 ,0,0,0);
let dtend = new Date(2016,0,15,19,0,0,0);
let calls = 0;
let update = new Promise(resolve => {
app.db.models.Request.autoAdjustmentUpdated = function() {
// wait for execution of all post hooks
// console.trace('Resolve post hook');
calls++;
if (2 === calls) { // the save service call save twice
resolve(rttRenewal.getUserAvailableQuantity(user));
}
};
});
let save = api.request.createAbsenceOnRenewal(app, sickRenewal, user, dtstart, dtend, 1);
Promise.all([save, update])
.then(arr => {
let request = arr[0];
let quantity = arr[1];
expect(request.absence.distribution[0].quantity).toEqual(1);
expect(quantity).toBe(9.5);
done();
})
.catch(done);
});
it("should disconnect from the database", function(done) {
app.disconnect(function() {
// and delete the test db
helpers.dropDb(dbName, done);
});
});
});