@letanure/resend-cli
Version:
A command-line interface for Resend email API
116 lines • 4.41 kB
JavaScript
import { describe, expect, it, vi } from 'vitest';
import { createContact } from '../action.js';
// Mock the Resend SDK
vi.mock('resend', () => ({
Resend: vi.fn().mockImplementation(() => ({
contacts: {
create: vi.fn(),
},
})),
}));
describe('Contact Create Action', () => {
it('should return success result when contact is created successfully', async () => {
const { Resend } = await import('resend');
const mockCreate = vi.fn().mockResolvedValue({
data: { object: 'contact', id: 'contact-123' },
error: null,
});
vi.mocked(Resend).mockImplementation(() => ({
contacts: { create: mockCreate },
}));
const contactData = {
email: 'test@example.com',
audienceId: 'audience-123',
firstName: 'John',
lastName: 'Doe',
unsubscribed: false,
};
const result = await createContact(contactData, 'test-api-key');
expect(result.success).toBe(true);
expect(result.data).toEqual({ object: 'contact', id: 'contact-123' });
expect(mockCreate).toHaveBeenCalledWith({
email: 'test@example.com',
audienceId: 'audience-123',
firstName: 'John',
lastName: 'Doe',
unsubscribed: false,
});
});
it('should return error result when API returns error', async () => {
const { Resend } = await import('resend');
const mockCreate = vi.fn().mockResolvedValue({
data: null,
error: { message: 'Invalid audience ID' },
});
vi.mocked(Resend).mockImplementation(() => ({
contacts: { create: mockCreate },
}));
const contactData = {
email: 'test@example.com',
audienceId: 'invalid-audience',
unsubscribed: false,
};
const result = await createContact(contactData, 'test-api-key');
expect(result.success).toBe(false);
expect(result.error).toContain('Invalid audience ID');
});
it('should return error result when API throws exception', async () => {
const { Resend } = await import('resend');
const mockCreate = vi.fn().mockRejectedValue(new Error('Network error'));
vi.mocked(Resend).mockImplementation(() => ({
contacts: { create: mockCreate },
}));
const contactData = {
email: 'test@example.com',
audienceId: 'audience-123',
unsubscribed: false,
};
const result = await createContact(contactData, 'test-api-key');
expect(result.success).toBe(false);
expect(result.error).toContain('Network error');
});
it('should return error result when no data returned', async () => {
const { Resend } = await import('resend');
const mockCreate = vi.fn().mockResolvedValue({
data: null,
error: null,
});
vi.mocked(Resend).mockImplementation(() => ({
contacts: { create: mockCreate },
}));
const contactData = {
email: 'test@example.com',
audienceId: 'audience-123',
unsubscribed: false,
};
const result = await createContact(contactData, 'test-api-key');
expect(result.success).toBe(false);
expect(result.error).toContain('No data returned from API');
});
it('should call Resend API with correct field mapping', async () => {
const { Resend } = await import('resend');
const mockCreate = vi.fn().mockResolvedValue({
data: { object: 'contact', id: 'contact-123' },
error: null,
});
vi.mocked(Resend).mockImplementation(() => ({
contacts: { create: mockCreate },
}));
const contactData = {
email: 'test@example.com',
audienceId: 'audience-123',
firstName: 'Steve',
lastName: 'Wozniak',
unsubscribed: true,
};
await createContact(contactData, 'test-api-key');
expect(mockCreate).toHaveBeenCalledWith({
email: 'test@example.com',
audienceId: 'audience-123',
firstName: 'Steve',
lastName: 'Wozniak',
unsubscribed: true,
});
});
});
//# sourceMappingURL=action.test.js.map