fix(emailjs): update param mapping and api usage

This commit is contained in:
google-labs-jules[bot]
2026-01-23 17:20:35 +00:00
parent 7ee61ed342
commit dd49676fca
3 changed files with 131 additions and 15 deletions

View File

@@ -0,0 +1,113 @@
// @vitest-environment jsdom
import { render, screen, fireEvent, waitFor } from '@testing-library/react';
import { vi, describe, it, expect, beforeEach } from 'vitest';
import { Contact } from '../Contact';
import emailjs from '@emailjs/browser';
// Mock dependencies
vi.mock('@emailjs/browser', () => ({
default: {
send: vi.fn().mockResolvedValue({ status: 200, text: 'OK' }),
},
}));
vi.mock('../../i18n', () => ({
useTranslation: () => ({
t: {
contact: {
title: 'Contact Us',
subtitle: 'Get in touch',
intro: 'Send us a message',
form: {
name: 'Name',
namePlaceholder: 'Your Name',
email: 'Email',
emailPlaceholder: 'Your Email',
subject: 'Subject',
subjectPlaceholder: 'Message Subject',
message: 'Message',
messagePlaceholder: 'Your Message',
submit: 'Send Message',
sending: 'Sending...',
success: 'Message sent successfully!',
error: 'Failed to send message.',
},
info: {
title: 'Contact Info',
email: 'Email Us',
github: 'GitHub',
},
},
},
}),
}));
// Mock config
vi.mock('../../config', () => ({
config: {
emailJs: {
serviceId: 'mock_service_id',
templateIdAdmin: 'mock_template_admin',
templateIdUser: 'mock_template_user',
publicKey: 'mock_public_key',
},
},
}));
describe('Contact Page', () => {
beforeEach(() => {
vi.clearAllMocks();
});
it('submits the form with correct parameters', async () => {
render(<Contact />);
// Fill out the form
fireEvent.change(screen.getByLabelText('Name'), { target: { value: 'John Doe' } });
fireEvent.change(screen.getByLabelText('Email'), { target: { value: 'john@example.com' } });
fireEvent.change(screen.getByLabelText('Subject'), { target: { value: 'Test Subject' } });
fireEvent.change(screen.getByLabelText('Message'), { target: { value: 'Hello world' } });
// Submit
fireEvent.click(screen.getByRole('button', { name: 'Send Message' }));
// Wait for submission
await waitFor(() => {
expect(emailjs.send).toHaveBeenCalledTimes(2);
});
const expectedParams = {
name: 'John Doe',
email: 'john@example.com',
title: 'Test Subject',
message: 'Hello world',
};
const expectedOptions = {
publicKey: 'mock_public_key'
};
// Check first call (Admin)
expect(emailjs.send).toHaveBeenNthCalledWith(
1,
'mock_service_id',
'mock_template_admin',
expectedParams,
expectedOptions
);
// Check second call (User)
expect(emailjs.send).toHaveBeenNthCalledWith(
2,
'mock_service_id',
'mock_template_user',
expectedParams,
expectedOptions
);
// Verify success message
const successMessage = await screen.findByText('Message sent successfully!');
expect(successMessage).toBeTruthy();
});
});