fix: Update contact subscription logic for upsert operations
This commit is contained in:
@@ -850,6 +850,17 @@ describe('Actions API Integration Tests', () => {
|
|||||||
expect(result.data.subscribed).toBeUndefined();
|
expect(result.data.subscribed).toBeUndefined();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should create new contacts as unsubscribed when subscribed is undefined', async () => {
|
||||||
|
const newEmail = '[email protected]';
|
||||||
|
|
||||||
|
// Send email to new contact without specifying subscribed
|
||||||
|
const {ContactService} = await import('../../services/ContactService.js');
|
||||||
|
const contact = await ContactService.upsert(projectId, newEmail, {name: 'Test'}, false);
|
||||||
|
|
||||||
|
// Transactional emails should create contacts as unsubscribed by default
|
||||||
|
expect(contact.subscribed).toBe(false);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('/v1/track endpoint', () => {
|
describe('/v1/track endpoint', () => {
|
||||||
@@ -905,9 +916,9 @@ describe('Actions API Integration Tests', () => {
|
|||||||
|
|
||||||
// Track event for new contact without specifying subscribed
|
// Track event for new contact without specifying subscribed
|
||||||
const {ContactService} = await import('../../services/ContactService.js');
|
const {ContactService} = await import('../../services/ContactService.js');
|
||||||
const contact = await ContactService.upsert(projectId, newEmail, {event: 'test'}, undefined);
|
const contact = await ContactService.upsert(projectId, newEmail, {event: 'test'}, true);
|
||||||
|
|
||||||
// New contacts should default to subscribed=true
|
// Event tracking should create contacts as subscribed by default
|
||||||
expect(contact.subscribed).toBe(true);
|
expect(contact.subscribed).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -72,11 +72,12 @@ export class Actions {
|
|||||||
|
|
||||||
// Create or update contact with persistent data only
|
// Create or update contact with persistent data only
|
||||||
// ContactService.upsert will filter out non-persistent fields
|
// ContactService.upsert will filter out non-persistent fields
|
||||||
|
// Event tracking should subscribe contacts by default
|
||||||
const contact = await ContactService.upsert(
|
const contact = await ContactService.upsert(
|
||||||
auth.projectId,
|
auth.projectId,
|
||||||
email,
|
email,
|
||||||
data as Record<string, unknown> | undefined,
|
data as Record<string, unknown> | undefined,
|
||||||
subscribed,
|
subscribed ?? true,
|
||||||
);
|
);
|
||||||
|
|
||||||
// Track the event with ALL data (persistent + non-persistent)
|
// Track the event with ALL data (persistent + non-persistent)
|
||||||
@@ -266,7 +267,8 @@ export class Actions {
|
|||||||
: (data as Record<string, unknown> | undefined);
|
: (data as Record<string, unknown> | undefined);
|
||||||
|
|
||||||
// Create or update contact with metadata
|
// Create or update contact with metadata
|
||||||
const contact = await ContactService.upsert(auth.projectId, recipient.email, recipientData, subscribed);
|
// Transactional emails should not subscribe contacts by default
|
||||||
|
const contact = await ContactService.upsert(auth.projectId, recipient.email, recipientData, subscribed ?? false);
|
||||||
|
|
||||||
// Get merged data including non-persistent fields for template rendering
|
// Get merged data including non-persistent fields for template rendering
|
||||||
const mergedData = ContactService.getMergedData(contact, data as Record<string, unknown> | undefined);
|
const mergedData = ContactService.getMergedData(contact, data as Record<string, unknown> | undefined);
|
||||||
|
|||||||
Reference in New Issue
Block a user