import { verifyBranchCheckIn, verifyCustomerCheckIn, } from './check-in-verification'; import { haversineDistanceMeters } from './geo-distance'; describe('geo-distance', () => { it('returns zero for identical coordinates', () => { expect(haversineDistanceMeters(-6.2, 106.8, -6.2, 106.8)).toBe(0); }); }); describe('check-in-verification', () => { const target = { code: 'BR001', nfcId: 'nfc-123', latitude: -6.2, longitude: 106.8, }; it('accepts matching NFC tag', () => { const result = verifyBranchCheckIn( target, { method: 'nfc', nfcId: 'nfc-123', latitude: -6.2, longitude: 106.8, }, 100, ); expect(result.method).toBe('nfc'); }); it('accepts matching QR code', () => { const result = verifyBranchCheckIn( target, { method: 'qr', qrCode: 'BR001', latitude: -6.2, longitude: 106.8, }, 100, ); expect(result.method).toBe('qr'); }); it('rejects GPS when too far', () => { expect(() => verifyCustomerCheckIn( target, { method: 'gps', latitude: -7, longitude: 107.5, }, 100, ), ).toThrow('Too far from the customer location'); }); });