UNPKG

@letanure/resend-cli

Version:

A command-line interface for Resend email API

165 lines 6.83 kB
import { describe, expect, it } from 'vitest'; import { createBroadcastSchema } from '../schema.js'; describe('createBroadcastSchema', () => { it('should validate a valid broadcast with all parameters', () => { const result = createBroadcastSchema.safeParse({ audienceId: '78261eea-8f8b-4381-83c6-79fa7120f1cf', from: 'Acme <onboarding@resend.dev>', subject: 'hello world', replyTo: 'reply@example.com', html: '<p>Hello world</p>', text: 'Hello world', name: 'Test Broadcast', }); expect(result.success).toBe(true); if (result.success) { expect(result.data.audienceId).toBe('78261eea-8f8b-4381-83c6-79fa7120f1cf'); expect(result.data.from).toBe('Acme <onboarding@resend.dev>'); expect(result.data.subject).toBe('hello world'); expect(result.data.replyTo).toBe('reply@example.com'); expect(result.data.html).toBe('<p>Hello world</p>'); expect(result.data.text).toBe('Hello world'); expect(result.data.name).toBe('Test Broadcast'); } }); it('should validate with only required parameters and HTML', () => { const result = createBroadcastSchema.safeParse({ audienceId: '78261eea-8f8b-4381-83c6-79fa7120f1cf', from: 'test@example.com', subject: 'test subject', html: '<p>Hello world</p>', }); expect(result.success).toBe(true); if (result.success) { expect(result.data.audienceId).toBe('78261eea-8f8b-4381-83c6-79fa7120f1cf'); expect(result.data.html).toBe('<p>Hello world</p>'); } }); it('should validate with only required parameters and text', () => { const result = createBroadcastSchema.safeParse({ audienceId: '78261eea-8f8b-4381-83c6-79fa7120f1cf', from: 'test@example.com', subject: 'test subject', text: 'Hello world', }); expect(result.success).toBe(true); if (result.success) { expect(result.data.text).toBe('Hello world'); } }); it('should reject missing audience ID', () => { const result = createBroadcastSchema.safeParse({ from: 'test@example.com', subject: 'test subject', html: '<p>Hello world</p>', }); expect(result.success).toBe(false); if (!result.success) { expect(result.error.issues).toHaveLength(1); expect(result.error.issues[0]?.path).toEqual(['audienceId']); expect(result.error.issues[0]?.message).toBe('Audience ID is required'); } }); it('should reject empty audience ID', () => { const result = createBroadcastSchema.safeParse({ audienceId: '', from: 'test@example.com', subject: 'test subject', html: '<p>Hello world</p>', }); expect(result.success).toBe(false); if (!result.success) { expect(result.error.issues[0]?.message).toBe('Audience ID is required'); } }); it('should reject missing from field', () => { const result = createBroadcastSchema.safeParse({ audienceId: '78261eea-8f8b-4381-83c6-79fa7120f1cf', subject: 'test subject', html: '<p>Hello world</p>', }); expect(result.success).toBe(false); if (!result.success) { expect(result.error.issues[0]?.message).toBe('Required'); } }); it('should reject missing subject', () => { const result = createBroadcastSchema.safeParse({ audienceId: '78261eea-8f8b-4381-83c6-79fa7120f1cf', from: 'test@example.com', html: '<p>Hello world</p>', }); expect(result.success).toBe(false); if (!result.success) { expect(result.error.issues[0]?.message).toBe('Required'); } }); it('should reject missing both html and text', () => { const result = createBroadcastSchema.safeParse({ audienceId: '78261eea-8f8b-4381-83c6-79fa7120f1cf', from: 'test@example.com', subject: 'test subject', }); expect(result.success).toBe(false); if (!result.success) { expect(result.error.issues[0]?.message).toBe('Either html or text must be provided'); } }); it('should validate friendly email format', () => { const result = createBroadcastSchema.safeParse({ audienceId: '78261eea-8f8b-4381-83c6-79fa7120f1cf', from: 'John Doe <john@example.com>', subject: 'test subject', html: '<p>Hello world</p>', }); expect(result.success).toBe(true); if (result.success) { expect(result.data.from).toBe('John Doe <john@example.com>'); } }); it('should validate multiple reply-to addresses', () => { const result = createBroadcastSchema.safeParse({ audienceId: '78261eea-8f8b-4381-83c6-79fa7120f1cf', from: 'test@example.com', subject: 'test subject', replyTo: 'reply1@example.com, reply2@example.com', html: '<p>Hello world</p>', }); expect(result.success).toBe(true); if (result.success) { expect(result.data.replyTo).toBe('reply1@example.com, reply2@example.com'); } }); it('should trim whitespace from audience ID', () => { const result = createBroadcastSchema.safeParse({ audienceId: ' 78261eea-8f8b-4381-83c6-79fa7120f1cf ', from: 'test@example.com', subject: 'test subject', html: '<p>Hello world</p>', }); expect(result.success).toBe(true); if (result.success) { expect(result.data.audienceId).toBe('78261eea-8f8b-4381-83c6-79fa7120f1cf'); } }); it('should remove empty fields', () => { const result = createBroadcastSchema.safeParse({ audienceId: '78261eea-8f8b-4381-83c6-79fa7120f1cf', from: 'test@example.com', subject: 'test subject', replyTo: undefined, html: '<p>Hello world</p>', text: undefined, name: undefined, }); expect(result.success).toBe(true); if (result.success) { expect(result.data.audienceId).toBe('78261eea-8f8b-4381-83c6-79fa7120f1cf'); expect(result.data.html).toBe('<p>Hello world</p>'); expect(result.data.replyTo).toBeUndefined(); expect(result.data.text).toBeUndefined(); expect(result.data.name).toBeUndefined(); } }); }); //# sourceMappingURL=schema.test.js.map