@simplens/nodemailer-gmail 1.0.4 → 1.0.5
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.
- package/dist/index.test.d.ts +2 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +484 -0
- package/dist/index.test.js.map +1 -0
- package/package.json +7 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import nodemailer from 'nodemailer';
|
|
3
|
+
import { GmailProvider, createProvider } from './index.js';
|
|
4
|
+
// Mock nodemailer
|
|
5
|
+
vi.mock('nodemailer', () => ({
|
|
6
|
+
default: {
|
|
7
|
+
createTransport: vi.fn(),
|
|
8
|
+
},
|
|
9
|
+
}));
|
|
10
|
+
// Mock @simplens/sdk
|
|
11
|
+
vi.mock('@simplens/sdk', async () => {
|
|
12
|
+
const { z } = await import('zod');
|
|
13
|
+
return {
|
|
14
|
+
z,
|
|
15
|
+
baseNotificationSchema: z.object({
|
|
16
|
+
notification_id: z.string(),
|
|
17
|
+
channel: z.string(),
|
|
18
|
+
priority: z.enum(['high', 'normal', 'low']).optional(),
|
|
19
|
+
variables: z.record(z.string(), z.unknown()).optional(),
|
|
20
|
+
}),
|
|
21
|
+
replaceVariables: vi.fn((message, variables) => {
|
|
22
|
+
let result = message;
|
|
23
|
+
for (const [key, value] of Object.entries(variables)) {
|
|
24
|
+
result = result.replace(new RegExp(`{{${key}}}`, 'g'), String(value));
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
}),
|
|
28
|
+
isHtmlContent: vi.fn((content) => {
|
|
29
|
+
return /<[^>]+>/.test(content);
|
|
30
|
+
}),
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
describe('GmailProvider', () => {
|
|
34
|
+
let provider;
|
|
35
|
+
let mockTransporter;
|
|
36
|
+
beforeEach(() => {
|
|
37
|
+
provider = new GmailProvider();
|
|
38
|
+
mockTransporter = {
|
|
39
|
+
verify: vi.fn(),
|
|
40
|
+
sendMail: vi.fn(),
|
|
41
|
+
close: vi.fn(),
|
|
42
|
+
};
|
|
43
|
+
vi.mocked(nodemailer.createTransport).mockReturnValue(mockTransporter);
|
|
44
|
+
// Suppress console.log/error during tests
|
|
45
|
+
vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
46
|
+
vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
47
|
+
});
|
|
48
|
+
afterEach(() => {
|
|
49
|
+
vi.clearAllMocks();
|
|
50
|
+
});
|
|
51
|
+
describe('manifest', () => {
|
|
52
|
+
it('should have correct manifest properties', () => {
|
|
53
|
+
expect(provider.manifest).toEqual({
|
|
54
|
+
name: 'simplens-plugin-nodemailer-gmail',
|
|
55
|
+
version: '1.0.0',
|
|
56
|
+
channel: 'email',
|
|
57
|
+
displayName: 'Gmail (Nodemailer)',
|
|
58
|
+
description: 'Send emails via Gmail SMTP using Nodemailer',
|
|
59
|
+
author: 'Adhish Krishna S',
|
|
60
|
+
homepage: 'https://github.com/SimpleNotificationSystem/plugin-nodemailer-gmail',
|
|
61
|
+
requiredCredentials: ['EMAIL_USER', 'EMAIL_PASS'],
|
|
62
|
+
optionalConfig: ['EMAIL_HOST', 'EMAIL_PORT', 'EMAIL_FROM'],
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
describe('getNotificationSchema', () => {
|
|
67
|
+
it('should return a valid zod schema', () => {
|
|
68
|
+
const schema = provider.getNotificationSchema();
|
|
69
|
+
expect(schema).toBeDefined();
|
|
70
|
+
expect(typeof schema.parse).toBe('function');
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
describe('getRecipientSchema', () => {
|
|
74
|
+
it('should return a valid zod schema', () => {
|
|
75
|
+
const schema = provider.getRecipientSchema();
|
|
76
|
+
expect(schema).toBeDefined();
|
|
77
|
+
expect(typeof schema.parse).toBe('function');
|
|
78
|
+
});
|
|
79
|
+
it('should validate correct recipient', () => {
|
|
80
|
+
const schema = provider.getRecipientSchema();
|
|
81
|
+
const result = schema.safeParse({
|
|
82
|
+
user_id: 'user123',
|
|
83
|
+
email: 'test@example.com',
|
|
84
|
+
});
|
|
85
|
+
expect(result.success).toBe(true);
|
|
86
|
+
});
|
|
87
|
+
it('should reject invalid email', () => {
|
|
88
|
+
const schema = provider.getRecipientSchema();
|
|
89
|
+
const result = schema.safeParse({
|
|
90
|
+
user_id: 'user123',
|
|
91
|
+
email: 'invalid-email',
|
|
92
|
+
});
|
|
93
|
+
expect(result.success).toBe(false);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
describe('getContentSchema', () => {
|
|
97
|
+
it('should return a valid zod schema', () => {
|
|
98
|
+
const schema = provider.getContentSchema();
|
|
99
|
+
expect(schema).toBeDefined();
|
|
100
|
+
expect(typeof schema.parse).toBe('function');
|
|
101
|
+
});
|
|
102
|
+
it('should validate content with subject', () => {
|
|
103
|
+
const schema = provider.getContentSchema();
|
|
104
|
+
const result = schema.safeParse({
|
|
105
|
+
subject: 'Test Subject',
|
|
106
|
+
message: 'Test message',
|
|
107
|
+
});
|
|
108
|
+
expect(result.success).toBe(true);
|
|
109
|
+
});
|
|
110
|
+
it('should validate content without subject (optional)', () => {
|
|
111
|
+
const schema = provider.getContentSchema();
|
|
112
|
+
const result = schema.safeParse({
|
|
113
|
+
message: 'Test message',
|
|
114
|
+
});
|
|
115
|
+
expect(result.success).toBe(true);
|
|
116
|
+
});
|
|
117
|
+
it('should reject content without message', () => {
|
|
118
|
+
const schema = provider.getContentSchema();
|
|
119
|
+
const result = schema.safeParse({
|
|
120
|
+
subject: 'Test Subject',
|
|
121
|
+
});
|
|
122
|
+
expect(result.success).toBe(false);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
describe('getRateLimitConfig', () => {
|
|
126
|
+
it('should return default rate limit config when not initialized', () => {
|
|
127
|
+
const config = provider.getRateLimitConfig();
|
|
128
|
+
expect(config).toEqual({
|
|
129
|
+
maxTokens: 100,
|
|
130
|
+
refillRate: 10,
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
it('should return custom rate limit config from options', async () => {
|
|
134
|
+
await provider.initialize({
|
|
135
|
+
id: 'test',
|
|
136
|
+
credentials: {
|
|
137
|
+
EMAIL_USER: 'test@gmail.com',
|
|
138
|
+
EMAIL_PASS: 'password123',
|
|
139
|
+
},
|
|
140
|
+
options: {
|
|
141
|
+
rateLimit: {
|
|
142
|
+
maxTokens: 200,
|
|
143
|
+
refillRate: 20,
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
const config = provider.getRateLimitConfig();
|
|
148
|
+
expect(config).toEqual({
|
|
149
|
+
maxTokens: 200,
|
|
150
|
+
refillRate: 20,
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
describe('initialize', () => {
|
|
155
|
+
it('should initialize with required credentials', async () => {
|
|
156
|
+
await provider.initialize({
|
|
157
|
+
id: 'test',
|
|
158
|
+
credentials: {
|
|
159
|
+
EMAIL_USER: 'test@gmail.com',
|
|
160
|
+
EMAIL_PASS: 'password123',
|
|
161
|
+
},
|
|
162
|
+
});
|
|
163
|
+
expect(nodemailer.createTransport).toHaveBeenCalledWith({
|
|
164
|
+
host: 'smtp.gmail.com',
|
|
165
|
+
port: 587,
|
|
166
|
+
secure: false,
|
|
167
|
+
auth: { user: 'test@gmail.com', pass: 'password123' },
|
|
168
|
+
connectionTimeout: 10000,
|
|
169
|
+
greetingTimeout: 10000,
|
|
170
|
+
socketTimeout: 30000,
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
it('should use custom host and port', async () => {
|
|
174
|
+
await provider.initialize({
|
|
175
|
+
id: 'test',
|
|
176
|
+
credentials: {
|
|
177
|
+
EMAIL_USER: 'test@example.com',
|
|
178
|
+
EMAIL_PASS: 'password123',
|
|
179
|
+
EMAIL_HOST: 'smtp.example.com',
|
|
180
|
+
EMAIL_PORT: '465',
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
expect(nodemailer.createTransport).toHaveBeenCalledWith({
|
|
184
|
+
host: 'smtp.example.com',
|
|
185
|
+
port: 465,
|
|
186
|
+
secure: true, // Port 465 should be secure
|
|
187
|
+
auth: { user: 'test@example.com', pass: 'password123' },
|
|
188
|
+
connectionTimeout: 10000,
|
|
189
|
+
greetingTimeout: 10000,
|
|
190
|
+
socketTimeout: 30000,
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
it('should throw error when EMAIL_USER is missing', async () => {
|
|
194
|
+
await expect(provider.initialize({
|
|
195
|
+
id: 'test',
|
|
196
|
+
credentials: {
|
|
197
|
+
EMAIL_PASS: 'password123',
|
|
198
|
+
},
|
|
199
|
+
})).rejects.toThrow('EMAIL_USER and EMAIL_PASS are required');
|
|
200
|
+
});
|
|
201
|
+
it('should throw error when EMAIL_PASS is missing', async () => {
|
|
202
|
+
await expect(provider.initialize({
|
|
203
|
+
id: 'test',
|
|
204
|
+
credentials: {
|
|
205
|
+
EMAIL_USER: 'test@gmail.com',
|
|
206
|
+
},
|
|
207
|
+
})).rejects.toThrow('EMAIL_USER and EMAIL_PASS are required');
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
describe('healthCheck', () => {
|
|
211
|
+
it('should return false when transporter is not initialized', async () => {
|
|
212
|
+
const result = await provider.healthCheck();
|
|
213
|
+
expect(result).toBe(false);
|
|
214
|
+
});
|
|
215
|
+
it('should return true when transporter verification succeeds', async () => {
|
|
216
|
+
mockTransporter.verify.mockResolvedValue(true);
|
|
217
|
+
await provider.initialize({
|
|
218
|
+
id: 'test',
|
|
219
|
+
credentials: {
|
|
220
|
+
EMAIL_USER: 'test@gmail.com',
|
|
221
|
+
EMAIL_PASS: 'password123',
|
|
222
|
+
},
|
|
223
|
+
});
|
|
224
|
+
const result = await provider.healthCheck();
|
|
225
|
+
expect(result).toBe(true);
|
|
226
|
+
expect(mockTransporter.verify).toHaveBeenCalled();
|
|
227
|
+
});
|
|
228
|
+
it('should return false when transporter verification fails', async () => {
|
|
229
|
+
mockTransporter.verify.mockRejectedValue(new Error('Connection failed'));
|
|
230
|
+
await provider.initialize({
|
|
231
|
+
id: 'test',
|
|
232
|
+
credentials: {
|
|
233
|
+
EMAIL_USER: 'test@gmail.com',
|
|
234
|
+
EMAIL_PASS: 'password123',
|
|
235
|
+
},
|
|
236
|
+
});
|
|
237
|
+
const result = await provider.healthCheck();
|
|
238
|
+
expect(result).toBe(false);
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
describe('send', () => {
|
|
242
|
+
const createNotification = (overrides = {}) => ({
|
|
243
|
+
notification_id: 'notif-123',
|
|
244
|
+
request_id: crypto.randomUUID(),
|
|
245
|
+
client_id: crypto.randomUUID(),
|
|
246
|
+
channel: 'email',
|
|
247
|
+
recipient: {
|
|
248
|
+
user_id: 'user-456',
|
|
249
|
+
email: 'recipient@example.com',
|
|
250
|
+
},
|
|
251
|
+
webhook_url: 'https://example.com/webhook',
|
|
252
|
+
retry_count: 3,
|
|
253
|
+
content: {
|
|
254
|
+
subject: 'Test Subject',
|
|
255
|
+
message: 'Hello, this is a test message.',
|
|
256
|
+
},
|
|
257
|
+
created_at: new Date(),
|
|
258
|
+
...overrides,
|
|
259
|
+
});
|
|
260
|
+
it('should return error when transporter is not initialized', async () => {
|
|
261
|
+
const notification = createNotification();
|
|
262
|
+
const result = await provider.send(notification);
|
|
263
|
+
expect(result.success).toBe(false);
|
|
264
|
+
expect(result.error).toEqual({
|
|
265
|
+
code: 'NOT_INITIALIZED',
|
|
266
|
+
message: 'Transporter not initialized',
|
|
267
|
+
retryable: false,
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
it('should send email successfully with plain text', async () => {
|
|
271
|
+
mockTransporter.sendMail.mockResolvedValue({
|
|
272
|
+
messageId: '<msg-id-123@gmail.com>',
|
|
273
|
+
});
|
|
274
|
+
await provider.initialize({
|
|
275
|
+
id: 'test',
|
|
276
|
+
credentials: {
|
|
277
|
+
EMAIL_USER: 'sender@gmail.com',
|
|
278
|
+
EMAIL_PASS: 'password123',
|
|
279
|
+
},
|
|
280
|
+
});
|
|
281
|
+
const notification = createNotification();
|
|
282
|
+
const result = await provider.send(notification);
|
|
283
|
+
expect(result.success).toBe(true);
|
|
284
|
+
expect(result.messageId).toBe('<msg-id-123@gmail.com>');
|
|
285
|
+
expect(mockTransporter.sendMail).toHaveBeenCalledWith({
|
|
286
|
+
from: 'sender@gmail.com',
|
|
287
|
+
to: 'recipient@example.com',
|
|
288
|
+
subject: 'Test Subject',
|
|
289
|
+
text: 'Hello, this is a test message.',
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
it('should send email with HTML content', async () => {
|
|
293
|
+
mockTransporter.sendMail.mockResolvedValue({
|
|
294
|
+
messageId: '<msg-id-456@gmail.com>',
|
|
295
|
+
});
|
|
296
|
+
await provider.initialize({
|
|
297
|
+
id: 'test',
|
|
298
|
+
credentials: {
|
|
299
|
+
EMAIL_USER: 'sender@gmail.com',
|
|
300
|
+
EMAIL_PASS: 'password123',
|
|
301
|
+
},
|
|
302
|
+
});
|
|
303
|
+
const notification = createNotification({
|
|
304
|
+
content: {
|
|
305
|
+
subject: 'HTML Email',
|
|
306
|
+
message: '<h1>Hello</h1><p>This is HTML content</p>',
|
|
307
|
+
},
|
|
308
|
+
});
|
|
309
|
+
const result = await provider.send(notification);
|
|
310
|
+
expect(result.success).toBe(true);
|
|
311
|
+
expect(mockTransporter.sendMail).toHaveBeenCalledWith({
|
|
312
|
+
from: 'sender@gmail.com',
|
|
313
|
+
to: 'recipient@example.com',
|
|
314
|
+
subject: 'HTML Email',
|
|
315
|
+
html: '<h1>Hello</h1><p>This is HTML content</p>',
|
|
316
|
+
});
|
|
317
|
+
});
|
|
318
|
+
it('should use default subject when not provided', async () => {
|
|
319
|
+
mockTransporter.sendMail.mockResolvedValue({
|
|
320
|
+
messageId: '<msg-id-789@gmail.com>',
|
|
321
|
+
});
|
|
322
|
+
await provider.initialize({
|
|
323
|
+
id: 'test',
|
|
324
|
+
credentials: {
|
|
325
|
+
EMAIL_USER: 'sender@gmail.com',
|
|
326
|
+
EMAIL_PASS: 'password123',
|
|
327
|
+
},
|
|
328
|
+
});
|
|
329
|
+
const notification = createNotification({
|
|
330
|
+
content: {
|
|
331
|
+
message: 'Message without subject',
|
|
332
|
+
},
|
|
333
|
+
});
|
|
334
|
+
const result = await provider.send(notification);
|
|
335
|
+
expect(result.success).toBe(true);
|
|
336
|
+
expect(mockTransporter.sendMail).toHaveBeenCalledWith(expect.objectContaining({
|
|
337
|
+
subject: 'Notification',
|
|
338
|
+
}));
|
|
339
|
+
});
|
|
340
|
+
it('should replace template variables', async () => {
|
|
341
|
+
mockTransporter.sendMail.mockResolvedValue({
|
|
342
|
+
messageId: '<msg-id-var@gmail.com>',
|
|
343
|
+
});
|
|
344
|
+
await provider.initialize({
|
|
345
|
+
id: 'test',
|
|
346
|
+
credentials: {
|
|
347
|
+
EMAIL_USER: 'sender@gmail.com',
|
|
348
|
+
EMAIL_PASS: 'password123',
|
|
349
|
+
},
|
|
350
|
+
});
|
|
351
|
+
const notification = createNotification({
|
|
352
|
+
content: {
|
|
353
|
+
subject: 'Welcome',
|
|
354
|
+
message: 'Hello {{name}}, your order {{orderId}} is confirmed.',
|
|
355
|
+
},
|
|
356
|
+
variables: {
|
|
357
|
+
name: 'John',
|
|
358
|
+
orderId: '12345',
|
|
359
|
+
},
|
|
360
|
+
});
|
|
361
|
+
const result = await provider.send(notification);
|
|
362
|
+
expect(result.success).toBe(true);
|
|
363
|
+
expect(mockTransporter.sendMail).toHaveBeenCalledWith(expect.objectContaining({
|
|
364
|
+
text: 'Hello John, your order 12345 is confirmed.',
|
|
365
|
+
}));
|
|
366
|
+
});
|
|
367
|
+
it('should use custom FROM address', async () => {
|
|
368
|
+
mockTransporter.sendMail.mockResolvedValue({
|
|
369
|
+
messageId: '<msg-id-from@gmail.com>',
|
|
370
|
+
});
|
|
371
|
+
await provider.initialize({
|
|
372
|
+
id: 'test',
|
|
373
|
+
credentials: {
|
|
374
|
+
EMAIL_USER: 'sender@gmail.com',
|
|
375
|
+
EMAIL_PASS: 'password123',
|
|
376
|
+
EMAIL_FROM: 'noreply@mycompany.com',
|
|
377
|
+
},
|
|
378
|
+
});
|
|
379
|
+
const notification = createNotification();
|
|
380
|
+
const result = await provider.send(notification);
|
|
381
|
+
expect(result.success).toBe(true);
|
|
382
|
+
expect(mockTransporter.sendMail).toHaveBeenCalledWith(expect.objectContaining({
|
|
383
|
+
from: 'noreply@mycompany.com',
|
|
384
|
+
}));
|
|
385
|
+
});
|
|
386
|
+
it('should return retryable error for connection issues', async () => {
|
|
387
|
+
mockTransporter.sendMail.mockRejectedValue(new Error('Connection timeout'));
|
|
388
|
+
await provider.initialize({
|
|
389
|
+
id: 'test',
|
|
390
|
+
credentials: {
|
|
391
|
+
EMAIL_USER: 'sender@gmail.com',
|
|
392
|
+
EMAIL_PASS: 'password123',
|
|
393
|
+
},
|
|
394
|
+
});
|
|
395
|
+
const notification = createNotification();
|
|
396
|
+
const result = await provider.send(notification);
|
|
397
|
+
expect(result.success).toBe(false);
|
|
398
|
+
expect(result.error).toEqual({
|
|
399
|
+
code: 'SEND_FAILED',
|
|
400
|
+
message: 'Connection timeout',
|
|
401
|
+
retryable: true,
|
|
402
|
+
});
|
|
403
|
+
});
|
|
404
|
+
it('should return non-retryable error for authentication failure', async () => {
|
|
405
|
+
mockTransporter.sendMail.mockRejectedValue(new Error('Invalid login credentials'));
|
|
406
|
+
await provider.initialize({
|
|
407
|
+
id: 'test',
|
|
408
|
+
credentials: {
|
|
409
|
+
EMAIL_USER: 'sender@gmail.com',
|
|
410
|
+
EMAIL_PASS: 'wrong-password',
|
|
411
|
+
},
|
|
412
|
+
});
|
|
413
|
+
const notification = createNotification();
|
|
414
|
+
const result = await provider.send(notification);
|
|
415
|
+
expect(result.success).toBe(false);
|
|
416
|
+
expect(result.error?.retryable).toBe(false);
|
|
417
|
+
});
|
|
418
|
+
it('should return non-retryable error for invalid email address', async () => {
|
|
419
|
+
mockTransporter.sendMail.mockRejectedValue(new Error('Invalid email address'));
|
|
420
|
+
await provider.initialize({
|
|
421
|
+
id: 'test',
|
|
422
|
+
credentials: {
|
|
423
|
+
EMAIL_USER: 'sender@gmail.com',
|
|
424
|
+
EMAIL_PASS: 'password123',
|
|
425
|
+
},
|
|
426
|
+
});
|
|
427
|
+
const notification = createNotification();
|
|
428
|
+
const result = await provider.send(notification);
|
|
429
|
+
expect(result.success).toBe(false);
|
|
430
|
+
expect(result.error?.retryable).toBe(false);
|
|
431
|
+
});
|
|
432
|
+
it('should handle unknown error type', async () => {
|
|
433
|
+
mockTransporter.sendMail.mockRejectedValue('String error');
|
|
434
|
+
await provider.initialize({
|
|
435
|
+
id: 'test',
|
|
436
|
+
credentials: {
|
|
437
|
+
EMAIL_USER: 'sender@gmail.com',
|
|
438
|
+
EMAIL_PASS: 'password123',
|
|
439
|
+
},
|
|
440
|
+
});
|
|
441
|
+
const notification = createNotification();
|
|
442
|
+
const result = await provider.send(notification);
|
|
443
|
+
expect(result.success).toBe(false);
|
|
444
|
+
expect(result.error?.message).toBe('Unknown error');
|
|
445
|
+
});
|
|
446
|
+
});
|
|
447
|
+
describe('shutdown', () => {
|
|
448
|
+
it('should close transporter when initialized', async () => {
|
|
449
|
+
await provider.initialize({
|
|
450
|
+
id: 'test',
|
|
451
|
+
credentials: {
|
|
452
|
+
EMAIL_USER: 'test@gmail.com',
|
|
453
|
+
EMAIL_PASS: 'password123',
|
|
454
|
+
},
|
|
455
|
+
});
|
|
456
|
+
await provider.shutdown();
|
|
457
|
+
expect(mockTransporter.close).toHaveBeenCalled();
|
|
458
|
+
});
|
|
459
|
+
it('should do nothing when transporter is not initialized', async () => {
|
|
460
|
+
await provider.shutdown();
|
|
461
|
+
expect(mockTransporter.close).not.toHaveBeenCalled();
|
|
462
|
+
});
|
|
463
|
+
it('should set transporter to null after shutdown', async () => {
|
|
464
|
+
await provider.initialize({
|
|
465
|
+
id: 'test',
|
|
466
|
+
credentials: {
|
|
467
|
+
EMAIL_USER: 'test@gmail.com',
|
|
468
|
+
EMAIL_PASS: 'password123',
|
|
469
|
+
},
|
|
470
|
+
});
|
|
471
|
+
await provider.shutdown();
|
|
472
|
+
// Verify transporter is null by checking healthCheck returns false
|
|
473
|
+
const result = await provider.healthCheck();
|
|
474
|
+
expect(result).toBe(false);
|
|
475
|
+
});
|
|
476
|
+
});
|
|
477
|
+
});
|
|
478
|
+
describe('createProvider', () => {
|
|
479
|
+
it('should create a new GmailProvider instance', () => {
|
|
480
|
+
const provider = createProvider();
|
|
481
|
+
expect(provider).toBeInstanceOf(GmailProvider);
|
|
482
|
+
});
|
|
483
|
+
});
|
|
484
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplens/nodemailer-gmail",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "Gmail/SMTP email provider plugin for SimpleNS using Nodemailer",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -14,6 +14,9 @@
|
|
|
14
14
|
"type": "module",
|
|
15
15
|
"scripts": {
|
|
16
16
|
"build": "tsc",
|
|
17
|
+
"test": "vitest run",
|
|
18
|
+
"test:watch": "vitest",
|
|
19
|
+
"test:coverage": "vitest run --coverage",
|
|
17
20
|
"prepublishOnly": "npm run build"
|
|
18
21
|
},
|
|
19
22
|
"keywords": [
|
|
@@ -32,7 +35,8 @@
|
|
|
32
35
|
},
|
|
33
36
|
"devDependencies": {
|
|
34
37
|
"@types/nodemailer": "^6.4.0",
|
|
35
|
-
"typescript": "^5.0.0"
|
|
38
|
+
"typescript": "^5.0.0",
|
|
39
|
+
"vitest": "^4.0.16"
|
|
36
40
|
},
|
|
37
41
|
"files": [
|
|
38
42
|
"dist",
|
|
@@ -42,4 +46,4 @@
|
|
|
42
46
|
"type": "git",
|
|
43
47
|
"url": "https://github.com/SimpleNotificationSystem/plugin-nodemailer-gmail"
|
|
44
48
|
}
|
|
45
|
-
}
|
|
49
|
+
}
|