96 lines
3.5 KiB
TypeScript
96 lines
3.5 KiB
TypeScript
import { TestBed } from '@angular/core/testing';
|
|
import { db } from 'db';
|
|
import { WaitingDutyService } from './waiting-duty.service';
|
|
|
|
describe('WaitingDutyService', () => {
|
|
let service: WaitingDutyService;
|
|
beforeEach(async () => {
|
|
await Promise.all([
|
|
db.settings.clear(),
|
|
db.umpires.clear(),
|
|
db.waitingUmpires.clear(),
|
|
db.waitingServiceJudges.clear(),
|
|
db.courtUmpires.clear(),
|
|
db.courtServiceJudges.clear()
|
|
]);
|
|
await db.settings.put({
|
|
id: 1,
|
|
withServiceJudge: true,
|
|
waitingListQuickButtons: true,
|
|
showAlert: false,
|
|
numberOfCourts: 5
|
|
});
|
|
await db.umpires.put({
|
|
id: 1,
|
|
firstName: 'Alex',
|
|
lastName: 'Smith',
|
|
gender: 'M',
|
|
country: 'GB'
|
|
});
|
|
service = TestBed.inject(WaitingDutyService);
|
|
});
|
|
afterEach(async () => {
|
|
TestBed.resetTestingModule();
|
|
await Promise.all([
|
|
db.settings.clear(),
|
|
db.umpires.clear(),
|
|
db.waitingUmpires.clear(),
|
|
db.waitingServiceJudges.clear(),
|
|
db.courtUmpires.clear(),
|
|
db.courtServiceJudges.clear()
|
|
]);
|
|
});
|
|
for (const role of ['umpire', 'serviceJudge'] as const) {
|
|
it(`remembers the ${role} queue and returns at its bottom only once`, async () => {
|
|
if (role === 'umpire')
|
|
await db.waitingUmpires.add({ umpireId: 1, order: 1 });
|
|
else await db.waitingServiceJudges.add({ serviceJudgeId: 1, order: 1 });
|
|
await service.move(1, 'rest');
|
|
expect((await db.umpires.get(1))?.returnToQueue).toBe(role);
|
|
expect(
|
|
(await db.waitingUmpires.count()) +
|
|
(await db.waitingServiceJudges.count())
|
|
).toBe(0);
|
|
if (role === 'umpire')
|
|
await db.waitingUmpires.add({ umpireId: 2, order: 1 });
|
|
else await db.waitingServiceJudges.add({ serviceJudgeId: 2, order: 1 });
|
|
await Promise.all([service.move(1, 'umpire'), service.move(1, 'umpire')]);
|
|
const items =
|
|
role === 'umpire'
|
|
? await db.waitingUmpires.orderBy('order').toArray()
|
|
: await db.waitingServiceJudges.orderBy('order').toArray();
|
|
expect(items.map((item) => item.order)).toEqual([1, 2]);
|
|
expect((await db.umpires.get(1))?.returnToQueue).toBeUndefined();
|
|
});
|
|
}
|
|
for (const role of ['umpire', 'serviceJudge'] as const) {
|
|
it(`saves the ${role} origin on a drag move even with quick buttons disabled`, async () => {
|
|
await db.settings.update(1, { waitingListQuickButtons: false });
|
|
if (role === 'umpire')
|
|
await db.waitingUmpires.add({ umpireId: 1, order: 1 });
|
|
else await db.waitingServiceJudges.add({ serviceJudgeId: 1, order: 1 });
|
|
await service.moveToRest(1);
|
|
expect((await db.umpires.get(1))?.returnToQueue).toBe(role);
|
|
expect(await db.waitingUmpires.count()).toBe(0);
|
|
expect(await db.waitingServiceJudges.count()).toBe(0);
|
|
});
|
|
}
|
|
|
|
it('does not return officials without a saved origin', async () => {
|
|
await service.move(1, 'umpire');
|
|
expect(await db.waitingUmpires.count()).toBe(0);
|
|
expect(await db.waitingServiceJudges.count()).toBe(0);
|
|
});
|
|
|
|
it('ignores stale return actions for assigned officials', async () => {
|
|
await db.courtUmpires.add({ umpireId: 1, courtNo: 1 });
|
|
await service.move(1, 'umpire');
|
|
expect(await db.waitingUmpires.count()).toBe(0);
|
|
});
|
|
it('does nothing when service judges are disabled', async () => {
|
|
await db.settings.update(1, { withServiceJudge: false });
|
|
await service.move(1, 'umpire');
|
|
expect(await db.waitingUmpires.count()).toBe(0);
|
|
});
|
|
});
|