@memberjunction/communication-sendgrid 4.2.0 → 4.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SendGridProvider.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/SendGridProvider.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the SendGrid provider.
|
|
3
|
+
* Tests: email construction, parameter mapping, error handling, unsupported operations.
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Mocks
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
const { mockSgSend, mockSetApiKey } = vi.hoisted(() => ({
|
|
10
|
+
mockSgSend: vi.fn(),
|
|
11
|
+
mockSetApiKey: vi.fn(),
|
|
12
|
+
}));
|
|
13
|
+
vi.mock('@sendgrid/mail', () => ({
|
|
14
|
+
default: {
|
|
15
|
+
setApiKey: mockSetApiKey,
|
|
16
|
+
send: mockSgSend,
|
|
17
|
+
},
|
|
18
|
+
}));
|
|
19
|
+
vi.mock('@memberjunction/communication-types', () => ({
|
|
20
|
+
BaseCommunicationProvider: class {
|
|
21
|
+
getSupportedOperations() { return []; }
|
|
22
|
+
},
|
|
23
|
+
resolveCredentialValue: (requestVal, envVal, disableFallback) => {
|
|
24
|
+
if (requestVal)
|
|
25
|
+
return requestVal;
|
|
26
|
+
if (!disableFallback && envVal)
|
|
27
|
+
return envVal;
|
|
28
|
+
return undefined;
|
|
29
|
+
},
|
|
30
|
+
validateRequiredCredentials: (creds, required, provider) => {
|
|
31
|
+
for (const key of required) {
|
|
32
|
+
if (!creds[key])
|
|
33
|
+
throw new Error(`${provider}: Missing required credential: ${key}`);
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
}));
|
|
37
|
+
vi.mock('@memberjunction/global', () => ({
|
|
38
|
+
RegisterClass: () => (target) => target,
|
|
39
|
+
}));
|
|
40
|
+
vi.mock('@memberjunction/core', () => ({
|
|
41
|
+
LogError: vi.fn(),
|
|
42
|
+
LogStatus: vi.fn(),
|
|
43
|
+
}));
|
|
44
|
+
vi.mock('dotenv', () => ({
|
|
45
|
+
default: { config: vi.fn() },
|
|
46
|
+
}));
|
|
47
|
+
// The config.ts module reads from process.env, let's mock it
|
|
48
|
+
vi.mock('../config', () => ({
|
|
49
|
+
__API_KEY: 'env-sendgrid-key',
|
|
50
|
+
}));
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
// Import after mocks
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
import { SendGridProvider } from '../SendGridProvider.js';
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// Tests
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
describe('SendGridProvider', () => {
|
|
59
|
+
let provider;
|
|
60
|
+
beforeEach(() => {
|
|
61
|
+
vi.clearAllMocks();
|
|
62
|
+
provider = new SendGridProvider();
|
|
63
|
+
});
|
|
64
|
+
describe('getSupportedOperations', () => {
|
|
65
|
+
it('should only support SendSingleMessage', () => {
|
|
66
|
+
const ops = provider.getSupportedOperations();
|
|
67
|
+
expect(ops).toEqual(['SendSingleMessage']);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
describe('SendSingleMessage', () => {
|
|
71
|
+
const createMessage = (overrides = {}) => ({
|
|
72
|
+
From: 'sender@example.com',
|
|
73
|
+
FromName: 'Test Sender',
|
|
74
|
+
To: 'recipient@example.com',
|
|
75
|
+
CCRecipients: ['cc@example.com'],
|
|
76
|
+
BCCRecipients: ['bcc@example.com'],
|
|
77
|
+
ProcessedSubject: 'Test Email',
|
|
78
|
+
ProcessedBody: 'Plain text body',
|
|
79
|
+
ProcessedHTMLBody: '<p>HTML body</p>',
|
|
80
|
+
SendAt: undefined,
|
|
81
|
+
Headers: {},
|
|
82
|
+
ContextData: {},
|
|
83
|
+
...overrides,
|
|
84
|
+
});
|
|
85
|
+
it('should send email successfully', async () => {
|
|
86
|
+
mockSgSend.mockResolvedValue([{ statusCode: 202, body: 'Accepted' }]);
|
|
87
|
+
const result = await provider.SendSingleMessage(createMessage());
|
|
88
|
+
expect(result.Success).toBe(true);
|
|
89
|
+
expect(result.Error).toBe('');
|
|
90
|
+
expect(mockSetApiKey).toHaveBeenCalledWith('env-sendgrid-key');
|
|
91
|
+
expect(mockSgSend).toHaveBeenCalledWith(expect.objectContaining({
|
|
92
|
+
to: 'recipient@example.com',
|
|
93
|
+
from: { email: 'sender@example.com', name: 'Test Sender' },
|
|
94
|
+
cc: ['cc@example.com'],
|
|
95
|
+
bcc: ['bcc@example.com'],
|
|
96
|
+
subject: 'Test Email',
|
|
97
|
+
text: 'Plain text body',
|
|
98
|
+
html: '<p>HTML body</p>',
|
|
99
|
+
}));
|
|
100
|
+
});
|
|
101
|
+
it('should disable subscription tracking', async () => {
|
|
102
|
+
mockSgSend.mockResolvedValue([{ statusCode: 202, body: '' }]);
|
|
103
|
+
await provider.SendSingleMessage(createMessage());
|
|
104
|
+
expect(mockSgSend).toHaveBeenCalledWith(expect.objectContaining({
|
|
105
|
+
trackingSettings: {
|
|
106
|
+
subscriptionTracking: { enable: false },
|
|
107
|
+
},
|
|
108
|
+
}));
|
|
109
|
+
});
|
|
110
|
+
it('should convert SendAt to unix timestamp', async () => {
|
|
111
|
+
const sendAt = new Date('2025-06-15T12:00:00Z');
|
|
112
|
+
mockSgSend.mockResolvedValue([{ statusCode: 202, body: '' }]);
|
|
113
|
+
await provider.SendSingleMessage(createMessage({ SendAt: sendAt }));
|
|
114
|
+
expect(mockSgSend).toHaveBeenCalledWith(expect.objectContaining({
|
|
115
|
+
sendAt: Math.floor(sendAt.getTime() / 1000),
|
|
116
|
+
}));
|
|
117
|
+
});
|
|
118
|
+
it('should handle API errors gracefully', async () => {
|
|
119
|
+
mockSgSend.mockRejectedValue(new Error('Bad Request'));
|
|
120
|
+
const result = await provider.SendSingleMessage(createMessage());
|
|
121
|
+
expect(result.Success).toBe(false);
|
|
122
|
+
expect(result.Error).toContain('Bad Request');
|
|
123
|
+
});
|
|
124
|
+
it('should handle non-success status codes', async () => {
|
|
125
|
+
mockSgSend.mockResolvedValue([{ statusCode: 400, body: 'Invalid', toString: () => 'Error 400' }]);
|
|
126
|
+
const result = await provider.SendSingleMessage(createMessage());
|
|
127
|
+
expect(result.Success).toBe(false);
|
|
128
|
+
});
|
|
129
|
+
it('should use per-request credentials when provided', async () => {
|
|
130
|
+
mockSgSend.mockResolvedValue([{ statusCode: 202, body: '' }]);
|
|
131
|
+
await provider.SendSingleMessage(createMessage(), {
|
|
132
|
+
apiKey: 'SG.custom-key',
|
|
133
|
+
});
|
|
134
|
+
expect(mockSetApiKey).toHaveBeenCalledWith('SG.custom-key');
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
describe('unsupported operations', () => {
|
|
138
|
+
it('GetMessages should throw', async () => {
|
|
139
|
+
await expect(provider.GetMessages({})).rejects.toThrow('does not support fetching messages');
|
|
140
|
+
});
|
|
141
|
+
it('ForwardMessage should throw', () => {
|
|
142
|
+
expect(() => provider.ForwardMessage({})).toThrow('does not support forwarding');
|
|
143
|
+
});
|
|
144
|
+
it('ReplyToMessage should throw', () => {
|
|
145
|
+
expect(() => provider.ReplyToMessage({})).toThrow('does not support replying');
|
|
146
|
+
});
|
|
147
|
+
it('CreateDraft should return failure', async () => {
|
|
148
|
+
const result = await provider.CreateDraft({});
|
|
149
|
+
expect(result.Success).toBe(false);
|
|
150
|
+
expect(result.ErrorMessage).toContain('does not support');
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
//# sourceMappingURL=SendGridProvider.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SendGridProvider.test.js","sourceRoot":"","sources":["../../src/__tests__/SendGridProvider.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/communication-sendgrid",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.3.1",
|
|
5
5
|
"description": "MemberJunction: SendGrid Provider for the MJ Communication Framework",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"scripts": {
|
|
12
12
|
"start": "ts-node-dev src/index.ts",
|
|
13
13
|
"build": "tsc && tsc-alias -f",
|
|
14
|
-
"test": "
|
|
14
|
+
"test": "vitest run"
|
|
15
15
|
},
|
|
16
16
|
"author": "MemberJunction.com",
|
|
17
17
|
"license": "ISC",
|
|
@@ -20,10 +20,10 @@
|
|
|
20
20
|
"typescript": "^5.9.3"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@memberjunction/communication-types": "4.
|
|
24
|
-
"@memberjunction/core": "4.
|
|
25
|
-
"@memberjunction/core-entities": "4.
|
|
26
|
-
"@memberjunction/global": "4.
|
|
23
|
+
"@memberjunction/communication-types": "4.3.1",
|
|
24
|
+
"@memberjunction/core": "4.3.1",
|
|
25
|
+
"@memberjunction/core-entities": "4.3.1",
|
|
26
|
+
"@memberjunction/global": "4.3.1",
|
|
27
27
|
"@sendgrid/mail": "^8.1.6",
|
|
28
28
|
"dotenv": "^17.2.4"
|
|
29
29
|
},
|