Selectors with description
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import {beforeEach, describe, expect, it, vi} from 'vitest';
|
||||
import type {Prisma} from '@plunk/db';
|
||||
import {EmailSourceType, EmailStatus} from '@plunk/db';
|
||||
import {EmailSourceType, EmailStatus, TrackingMode} from '@plunk/db';
|
||||
import {createServiceMocks, factories, getPrismaClient} from '../../../../../test/helpers';
|
||||
|
||||
// Mock MeterService
|
||||
@@ -16,7 +16,7 @@ describe('Email Processor', () => {
|
||||
const _serviceMocks = createServiceMocks();
|
||||
|
||||
beforeEach(async () => {
|
||||
const {project} = await factories.createUserWithProject({}, {trackingEnabled: true});
|
||||
const {project} = await factories.createUserWithProject({}, {tracking: TrackingMode.ENABLED});
|
||||
projectId = project.id;
|
||||
});
|
||||
|
||||
|
||||
@@ -89,6 +89,9 @@ export function createEmailWorker() {
|
||||
? {name: email.toName, email: email.contact.email}
|
||||
: email.contact.email;
|
||||
|
||||
// Determine tracking based on project settings and email type
|
||||
const shouldTrack = EmailService.shouldTrackEmail(email.project.tracking, email.sourceType);
|
||||
|
||||
// Send via AWS SES
|
||||
const result = await sendRawEmail({
|
||||
from: {
|
||||
@@ -101,7 +104,7 @@ export function createEmailWorker() {
|
||||
html: compiledHtml,
|
||||
},
|
||||
reply: email.replyTo || undefined,
|
||||
tracking: email.project.trackingEnabled, // Use project's tracking preference
|
||||
tracking: shouldTrack,
|
||||
attachments: email.attachments as {filename: string; content: string; contentType: string}[] | null,
|
||||
});
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type {Contact, Email, Prisma, Project} from '@plunk/db';
|
||||
import {EmailSourceType, EmailStatus} from '@plunk/db';
|
||||
import {EmailSourceType, EmailStatus, TrackingMode} from '@plunk/db';
|
||||
import signale from 'signale';
|
||||
|
||||
import {DASHBOARD_URI, LANDING_URI, STRIPE_ENABLED} from '../app/constants.js';
|
||||
@@ -365,6 +365,9 @@ export class EmailService {
|
||||
? (email.attachments as Array<{filename: string; content: string; contentType: string}>)
|
||||
: undefined;
|
||||
|
||||
// Determine tracking based on project settings and email type
|
||||
const shouldTrack = this.shouldTrackEmail(email.project.tracking, email.sourceType);
|
||||
|
||||
// Send via AWS SES
|
||||
const result = await sendRawEmail({
|
||||
from: {
|
||||
@@ -379,7 +382,7 @@ export class EmailService {
|
||||
reply: email.replyTo || undefined,
|
||||
headers: customHeaders,
|
||||
attachments: attachments,
|
||||
tracking: email.project.trackingEnabled, // Use project's tracking preference
|
||||
tracking: shouldTrack,
|
||||
});
|
||||
|
||||
// Mark as sent with SES message ID
|
||||
@@ -565,6 +568,23 @@ export class EmailService {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if an email should be tracked based on project tracking mode and email source type
|
||||
*/
|
||||
public static shouldTrackEmail(trackingMode: TrackingMode, sourceType: EmailSourceType): boolean {
|
||||
switch (trackingMode) {
|
||||
case TrackingMode.ENABLED:
|
||||
return true;
|
||||
case TrackingMode.DISABLED:
|
||||
return false;
|
||||
case TrackingMode.MARKETING_ONLY:
|
||||
// Track only campaigns and workflows (marketing), not transactional emails
|
||||
return sourceType !== EmailSourceType.TRANSACTIONAL;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Compile HTML email with optional unsubscribe footer and badge
|
||||
* Adds unsubscribe link and Plunk badge for free tier users (only when billing is enabled)
|
||||
|
||||
Reference in New Issue
Block a user