fixed cors bug, separating rental confirmation for owner and renter, removing condition checks from my-listings
This commit is contained in:
@@ -248,4 +248,172 @@ describe('EmailService', () => {
|
||||
expect(result.success).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('sendRentalConfirmationEmails', () => {
|
||||
const { User } = require('../../../models');
|
||||
|
||||
beforeEach(async () => {
|
||||
mockSend.mockResolvedValue({ MessageId: 'test-message-id' });
|
||||
await emailService.initialize();
|
||||
});
|
||||
|
||||
it('should send emails to both owner and renter successfully', async () => {
|
||||
const mockOwner = { email: 'owner@example.com' };
|
||||
const mockRenter = { email: 'renter@example.com' };
|
||||
|
||||
User.findByPk
|
||||
.mockResolvedValueOnce(mockOwner) // First call for owner
|
||||
.mockResolvedValueOnce(mockRenter); // Second call for renter
|
||||
|
||||
const rental = {
|
||||
id: 1,
|
||||
ownerId: 10,
|
||||
renterId: 20,
|
||||
item: { name: 'Test Item' },
|
||||
startDateTime: '2024-01-15T10:00:00Z',
|
||||
endDateTime: '2024-01-17T10:00:00Z'
|
||||
};
|
||||
|
||||
const results = await emailService.sendRentalConfirmationEmails(rental);
|
||||
|
||||
expect(results.ownerEmailSent).toBe(true);
|
||||
expect(results.renterEmailSent).toBe(true);
|
||||
expect(mockSend).toHaveBeenCalledTimes(2);
|
||||
});
|
||||
|
||||
it('should send renter email even if owner email fails', async () => {
|
||||
const mockOwner = { email: 'owner@example.com' };
|
||||
const mockRenter = { email: 'renter@example.com' };
|
||||
|
||||
User.findByPk
|
||||
.mockResolvedValueOnce(mockOwner)
|
||||
.mockResolvedValueOnce(mockRenter);
|
||||
|
||||
// First call (owner) fails, second call (renter) succeeds
|
||||
mockSend
|
||||
.mockRejectedValueOnce(new Error('SES Error for owner'))
|
||||
.mockResolvedValueOnce({ MessageId: 'renter-message-id' });
|
||||
|
||||
const rental = {
|
||||
id: 1,
|
||||
ownerId: 10,
|
||||
renterId: 20,
|
||||
item: { name: 'Test Item' },
|
||||
startDateTime: '2024-01-15T10:00:00Z',
|
||||
endDateTime: '2024-01-17T10:00:00Z'
|
||||
};
|
||||
|
||||
const results = await emailService.sendRentalConfirmationEmails(rental);
|
||||
|
||||
expect(results.ownerEmailSent).toBe(false);
|
||||
expect(results.renterEmailSent).toBe(true);
|
||||
expect(mockSend).toHaveBeenCalledTimes(2);
|
||||
});
|
||||
|
||||
it('should send owner email even if renter email fails', async () => {
|
||||
const mockOwner = { email: 'owner@example.com' };
|
||||
const mockRenter = { email: 'renter@example.com' };
|
||||
|
||||
User.findByPk
|
||||
.mockResolvedValueOnce(mockOwner)
|
||||
.mockResolvedValueOnce(mockRenter);
|
||||
|
||||
// First call (owner) succeeds, second call (renter) fails
|
||||
mockSend
|
||||
.mockResolvedValueOnce({ MessageId: 'owner-message-id' })
|
||||
.mockRejectedValueOnce(new Error('SES Error for renter'));
|
||||
|
||||
const rental = {
|
||||
id: 1,
|
||||
ownerId: 10,
|
||||
renterId: 20,
|
||||
item: { name: 'Test Item' },
|
||||
startDateTime: '2024-01-15T10:00:00Z',
|
||||
endDateTime: '2024-01-17T10:00:00Z'
|
||||
};
|
||||
|
||||
const results = await emailService.sendRentalConfirmationEmails(rental);
|
||||
|
||||
expect(results.ownerEmailSent).toBe(true);
|
||||
expect(results.renterEmailSent).toBe(false);
|
||||
expect(mockSend).toHaveBeenCalledTimes(2);
|
||||
});
|
||||
|
||||
it('should handle both emails failing gracefully', async () => {
|
||||
const mockOwner = { email: 'owner@example.com' };
|
||||
const mockRenter = { email: 'renter@example.com' };
|
||||
|
||||
User.findByPk
|
||||
.mockResolvedValueOnce(mockOwner)
|
||||
.mockResolvedValueOnce(mockRenter);
|
||||
|
||||
// Both calls fail
|
||||
mockSend
|
||||
.mockRejectedValueOnce(new Error('SES Error for owner'))
|
||||
.mockRejectedValueOnce(new Error('SES Error for renter'));
|
||||
|
||||
const rental = {
|
||||
id: 1,
|
||||
ownerId: 10,
|
||||
renterId: 20,
|
||||
item: { name: 'Test Item' },
|
||||
startDateTime: '2024-01-15T10:00:00Z',
|
||||
endDateTime: '2024-01-17T10:00:00Z'
|
||||
};
|
||||
|
||||
const results = await emailService.sendRentalConfirmationEmails(rental);
|
||||
|
||||
expect(results.ownerEmailSent).toBe(false);
|
||||
expect(results.renterEmailSent).toBe(false);
|
||||
expect(mockSend).toHaveBeenCalledTimes(2);
|
||||
});
|
||||
|
||||
it('should handle missing owner email', async () => {
|
||||
const mockOwner = { email: null };
|
||||
const mockRenter = { email: 'renter@example.com' };
|
||||
|
||||
User.findByPk
|
||||
.mockResolvedValueOnce(mockOwner)
|
||||
.mockResolvedValueOnce(mockRenter);
|
||||
|
||||
const rental = {
|
||||
id: 1,
|
||||
ownerId: 10,
|
||||
renterId: 20,
|
||||
item: { name: 'Test Item' },
|
||||
startDateTime: '2024-01-15T10:00:00Z',
|
||||
endDateTime: '2024-01-17T10:00:00Z'
|
||||
};
|
||||
|
||||
const results = await emailService.sendRentalConfirmationEmails(rental);
|
||||
|
||||
expect(results.ownerEmailSent).toBe(false);
|
||||
expect(results.renterEmailSent).toBe(true);
|
||||
expect(mockSend).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('should handle missing renter email', async () => {
|
||||
const mockOwner = { email: 'owner@example.com' };
|
||||
const mockRenter = { email: null };
|
||||
|
||||
User.findByPk
|
||||
.mockResolvedValueOnce(mockOwner)
|
||||
.mockResolvedValueOnce(mockRenter);
|
||||
|
||||
const rental = {
|
||||
id: 1,
|
||||
ownerId: 10,
|
||||
renterId: 20,
|
||||
item: { name: 'Test Item' },
|
||||
startDateTime: '2024-01-15T10:00:00Z',
|
||||
endDateTime: '2024-01-17T10:00:00Z'
|
||||
};
|
||||
|
||||
const results = await emailService.sendRentalConfirmationEmails(rental);
|
||||
|
||||
expect(results.ownerEmailSent).toBe(true);
|
||||
expect(results.renterEmailSent).toBe(false);
|
||||
expect(mockSend).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user