import { describe, it, expect } from 'vitest'; import { extractCalendarId, getCalendarSubscribeUrl } from './google-calendar'; describe('extractCalendarId', () => { it('returns null for empty input', () => { expect(extractCalendarId('')).toBeNull(); }); it('returns email-style calendar ID as-is', () => { expect(extractCalendarId('user@gmail.com')).toBe('user@gmail.com'); }); it('trims whitespace from email-style IDs', () => { expect(extractCalendarId(' user@gmail.com ')).toBe('user@gmail.com'); }); it('returns group calendar ID as-is', () => { const id = 'abc123@group.calendar.google.com'; expect(extractCalendarId(id)).toBe(id); }); it('extracts calendar ID from cid parameter (base64)', () => { const calId = 'user@gmail.com'; const encoded = btoa(calId); const url = `https://calendar.google.com/calendar/u/0?cid=${encoded}`; expect(extractCalendarId(url)).toBe(calId); }); it('extracts calendar ID from src parameter', () => { const url = 'https://calendar.google.com/calendar/embed?src=user@gmail.com'; expect(extractCalendarId(url)).toBe('user@gmail.com'); }); it('extracts calendar ID from ical path', () => { const url = 'https://calendar.google.com/calendar/ical/user%40gmail.com/public/basic.ics'; expect(extractCalendarId(url)).toBe('user@gmail.com'); }); it('returns null for non-URL non-email input', () => { expect(extractCalendarId('random-string')).toBeNull(); }); it('handles URL without recognized parameters', () => { expect(extractCalendarId('https://example.com/page')).toBeNull(); }); }); describe('getCalendarSubscribeUrl', () => { it('generates a subscribe URL with base64-encoded calendar ID', () => { const calId = 'user@gmail.com'; const url = getCalendarSubscribeUrl(calId); expect(url).toContain('https://calendar.google.com/calendar/u/0?cid='); expect(url).toContain(btoa(calId)); }); it('roundtrips with extractCalendarId', () => { const calId = 'test@group.calendar.google.com'; const url = getCalendarSubscribeUrl(calId); expect(extractCalendarId(url)).toBe(calId); }); });