fix: oprava zobrazení ikonky o zaplacení u historických objednávek
CI / Generate TypeScript types (push) Successful in 21s
CI / Server unit tests (push) Successful in 22s
CI / Build server (push) Successful in 35s
CI / Build client (push) Successful in 36s
CI / Playwright E2E tests (push) Successful in 1m18s
CI / Build and push Docker image (push) Successful in 40s
CI / Notify (push) Successful in 2s

This commit is contained in:
2026-06-12 21:55:25 +02:00
parent 8c3c47dba1
commit 364d46bc18
2 changed files with 38 additions and 2 deletions
+4 -1
View File
@@ -135,7 +135,10 @@ router.post("/dismissQr", async (req: Request<{}, any, DismissQrData["body"]>, r
try {
const dismissed = await dismissPendingQr(login, req.body.id);
if (dismissed?.groupId) {
const updatedExtra = await markGroupMemberPaid(login, dismissed.groupId);
// Platbu zapisujeme ke dni, ke kterému se QR kód vztahuje, ne k dnešnímu dni
// jinak by se při potvrzení platby jiný den příznak zapsal do špatných dat (a zelené zatržítko by se neobjevilo).
const orderDate = new Date(`${dismissed.date}T00:00:00`);
const updatedExtra = await markGroupMemberPaid(login, dismissed.groupId, orderDate);
if (updatedExtra) getWebsocket().emit("message", updatedExtra);
}
res.status(200).json({});
+34 -1
View File
@@ -1,6 +1,6 @@
import { resetMemoryStorage } from '../storage/memory';
import { getStores, addStore } from '../stores';
import { createGroup, deleteGroup, addGroupMember, removeGroupMember, updateGroupMember, setGroupState, setGroupBoltTracking } from '../groups';
import { createGroup, deleteGroup, addGroupMember, removeGroupMember, updateGroupMember, setGroupState, setGroupBoltTracking, markGroupMemberPaid } from '../groups';
import { GroupState } from '../../../types/gen/types.gen';
const CREATOR = 'tomas';
@@ -202,3 +202,36 @@ describe('setGroupState', () => {
expect(d.groups![0].boltTrackingToken).toBeUndefined();
});
});
describe('markGroupMemberPaid', () => {
test('označí člena jako zaplaceného pro daný den', async () => {
const d = await createGroup(CREATOR, STORE, TODAY);
const groupId = d.groups![0].id;
const result = await markGroupMemberPaid(CREATOR, groupId, TODAY);
expect(result).not.toBeNull();
expect(result!.groups![0].members[CREATOR].paid).toBe(true);
});
test('vrátí null pro neexistující skupinu', async () => {
const result = await markGroupMemberPaid(CREATOR, 'nonexistent', TODAY);
expect(result).toBeNull();
});
// Regrese: potvrzení platby jiný den, než vznikla objednávka, se musí zapsat
// ke dni objednávky jinak se příznak ztratí a zelené zatržítko se nezobrazí.
test('zapíše platbu ke dni objednávky i při potvrzení jiný den', async () => {
const orderDay = new Date('2025-01-10');
const d = await createGroup(CREATOR, STORE, orderDay);
const groupId = d.groups![0].id;
// Uživatel potvrzuje platbu jiný den, ale předáváme datum objednávky.
const result = await markGroupMemberPaid(CREATOR, groupId, orderDay);
expect(result).not.toBeNull();
expect(result!.groups![0].members[CREATOR].paid).toBe(true);
// Skupina pod jiným dnem neexistuje ověříme, že tam příznak omylem nevznikl.
const otherDay = new Date('2025-01-15');
const onOtherDay = await markGroupMemberPaid(CREATOR, groupId, otherDay);
expect(onOtherDay).toBeNull();
});
});