Mega push vol 5, working on messaging now
This commit is contained in:
61
src/lib/api/google-calendar.test.ts
Normal file
61
src/lib/api/google-calendar.test.ts
Normal file
@@ -0,0 +1,61 @@
|
||||
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);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user