const app = require('vn-loopback/server/server'); const LoopBackContext = require('loopback-context'); describe('workerTimeControl add/delete timeEntry()', () => { const HHRRId = 37; const teamBossId = 13; const employeeId = 1; const salesPersonId = 106; const salesBossId = 19; let activeCtx = { accessToken: {userId: 50}, }; let ctx = {req: activeCtx}; let timeEntry; let createdTimeEntry; afterEach(async() => { if (createdTimeEntry) { try { await app.models.WorkerTimeControl.destroyById(createdTimeEntry.id); } catch (error) { console.error(error); } } }); beforeAll(() => { spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({ active: activeCtx }); }); it('should fail to add a time entry if the target user is not a subordinate', async() => { activeCtx.accessToken.userId = employeeId; let error; let data = { workerFk: 2, timed: new Date() }; try { await app.models.WorkerTimeControl.addTimeEntry(ctx, data); } catch (e) { error = e; } expect(error).toBeDefined(); expect(error.statusCode).toBe(400); expect(error.message).toBe(`You don't have enough privileges`); }); it('should fail to add if the current and the target user are the same and is not team boss', async() => { activeCtx.accessToken.userId = employeeId; let error; let data = { workerFk: 1, timed: new Date() }; try { await app.models.WorkerTimeControl.addTimeEntry(ctx, data); } catch (e) { error = e; } expect(error).toBeDefined(); expect(error.statusCode).toBe(400); expect(error.message).toBe(`You don't have enough privileges`); }); it('should add if the current user is team boss and the target user is a himself', async() => { activeCtx.accessToken.userId = teamBossId; let todayAtSix = new Date(); todayAtSix.setHours(18, 30, 0, 0); let data = { workerFk: teamBossId, timed: todayAtSix }; timeEntry = await app.models.WorkerTimeControl.addTimeEntry(ctx, data); createdTimeEntry = await app.models.WorkerTimeControl.findById(timeEntry.id); expect(createdTimeEntry).toBeDefined(); }); it('should try but fail to delete his own time entry', async() => { activeCtx.accessToken.userId = salesBossId; let error; let todayAtSeven = new Date(); todayAtSeven.setHours(19, 30, 0, 0); let data = { workerFk: salesPersonId, timed: todayAtSeven }; timeEntry = await app.models.WorkerTimeControl.addTimeEntry(ctx, data); createdTimeEntry = await app.models.WorkerTimeControl.findById(timeEntry.id); try { activeCtx.accessToken.userId = salesPersonId; await app.models.WorkerTimeControl.deleteTimeEntry(ctx, createdTimeEntry.id); } catch (e) { error = e; } expect(error).toBeDefined(); expect(error.statusCode).toBe(400); expect(error.message).toBe(`You don't have enough privileges`); }); it('should delete the created time entry for the team boss as himself', async() => { activeCtx.accessToken.userId = teamBossId; let todayAtFive = new Date(); todayAtFive.setHours(17, 30, 0, 0); let data = { workerFk: teamBossId, timed: todayAtFive }; timeEntry = await app.models.WorkerTimeControl.addTimeEntry(ctx, data); createdTimeEntry = await app.models.WorkerTimeControl.findById(timeEntry.id); expect(createdTimeEntry).toBeDefined(); await app.models.WorkerTimeControl.deleteTimeEntry(ctx, createdTimeEntry.id); createdTimeEntry = await app.models.WorkerTimeControl.findById(timeEntry.id); expect(createdTimeEntry).toBeNull(); }); it('should delete the created time entry for the team boss as HHRR', async() => { activeCtx.accessToken.userId = HHRRId; let todayAtFive = new Date(); todayAtFive.setHours(17, 30, 0, 0); let data = { workerFk: teamBossId, timed: todayAtFive }; timeEntry = await app.models.WorkerTimeControl.addTimeEntry(ctx, data); createdTimeEntry = await app.models.WorkerTimeControl.findById(timeEntry.id); expect(createdTimeEntry).toBeDefined(); await app.models.WorkerTimeControl.deleteTimeEntry(ctx, createdTimeEntry.id); createdTimeEntry = await app.models.WorkerTimeControl.findById(timeEntry.id); expect(createdTimeEntry).toBeNull(); }); });