import { describe, it, expect } from 'vitest'; import { resolveWalkInPrice, omitWalkInPrice, parseWalkInPrice, canSeeWalkInPrice } from './walkInPrice.js'; describe('resolveWalkInPrice', () => { it('falls back to the ticket price when no walk-in price is set', () => { expect(resolveWalkInPrice({ price: 21000, walkInPrice: null })).toEqual({ unitPrice: 21000, source: 'ticket' }); expect(resolveWalkInPrice({ price: 21000 })).toEqual({ unitPrice: 21000, source: 'ticket' }); }); it('treats 0 as a free walk-in, not as unset', () => { expect(resolveWalkInPrice({ price: 21000, walkInPrice: 0 })).toEqual({ unitPrice: 0, source: 'walk_in' }); }); it('uses a set walk-in price', () => { expect(resolveWalkInPrice({ price: 21000, walkInPrice: 25000 })).toEqual({ unitPrice: 25000, source: 'walk_in' }); }); it('reads Postgres decimal strings', () => { expect(resolveWalkInPrice({ price: '21000.00', walkInPrice: '25000.00' })).toEqual({ unitPrice: 25000, source: 'walk_in' }); expect(resolveWalkInPrice({ price: '21000.00', walkInPrice: null })).toEqual({ unitPrice: 21000, source: 'ticket' }); expect(parseWalkInPrice('0.00')).toBe(0); expect(parseWalkInPrice('')).toBeNull(); }); }); describe('omitWalkInPrice', () => { it('drops the walk-in price and keeps everything else', () => { const event = { id: 'e1', price: 21000, walkInPrice: 25000, currency: 'PYG' }; const result = omitWalkInPrice(event); expect(result).not.toHaveProperty('walkInPrice'); expect(result).toEqual({ id: 'e1', price: 21000, currency: 'PYG' }); expect(event.walkInPrice).toBe(25000); }); it('passes null through', () => { expect(omitWalkInPrice(null)).toBeNull(); }); }); describe('canSeeWalkInPrice', () => { it('is limited to event managers and door staff', () => { expect(canSeeWalkInPrice('admin')).toBe(true); expect(canSeeWalkInPrice('organizer')).toBe(true); expect(canSeeWalkInPrice('staff')).toBe(true); expect(canSeeWalkInPrice('marketing')).toBe(false); expect(canSeeWalkInPrice('user')).toBe(false); expect(canSeeWalkInPrice(null)).toBe(false); }); });