@memberjunction/communication-twilio 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":"TwilioProvider.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/TwilioProvider.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the Twilio provider.
|
|
3
|
+
* Tests: SMS construction, channel detection, credential resolution, error handling.
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Mocks
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
const { mockMessagesCreate, mockMessagesList, mockMessageFetch } = vi.hoisted(() => ({
|
|
10
|
+
mockMessagesCreate: vi.fn(),
|
|
11
|
+
mockMessagesList: vi.fn(),
|
|
12
|
+
mockMessageFetch: vi.fn(),
|
|
13
|
+
}));
|
|
14
|
+
// Mock dotenv
|
|
15
|
+
vi.mock('dotenv', () => ({
|
|
16
|
+
default: { config: vi.fn() },
|
|
17
|
+
}));
|
|
18
|
+
// Mock config.ts directly to avoid dotenv import issues
|
|
19
|
+
vi.mock('../config', () => ({
|
|
20
|
+
TWILIO_ACCOUNT_SID: 'test-account-sid',
|
|
21
|
+
TWILIO_AUTH_TOKEN: 'test-auth-token',
|
|
22
|
+
TWILIO_PHONE_NUMBER: '+15551234567',
|
|
23
|
+
TWILIO_WHATSAPP_NUMBER: '+15559876543', // Provider adds whatsapp: prefix
|
|
24
|
+
TWILIO_FACEBOOK_PAGE_ID: 'fb-page-123', // Provider adds messenger: prefix
|
|
25
|
+
}));
|
|
26
|
+
vi.mock('twilio', () => ({
|
|
27
|
+
default: vi.fn().mockReturnValue({
|
|
28
|
+
messages: {
|
|
29
|
+
create: mockMessagesCreate,
|
|
30
|
+
list: mockMessagesList,
|
|
31
|
+
},
|
|
32
|
+
}),
|
|
33
|
+
Twilio: class {
|
|
34
|
+
},
|
|
35
|
+
}));
|
|
36
|
+
vi.mock('@memberjunction/communication-types', () => ({
|
|
37
|
+
BaseCommunicationProvider: class {
|
|
38
|
+
getSupportedOperations() { return []; }
|
|
39
|
+
},
|
|
40
|
+
resolveCredentialValue: (requestVal, envVal, disableFallback) => {
|
|
41
|
+
if (requestVal)
|
|
42
|
+
return requestVal;
|
|
43
|
+
if (!disableFallback && envVal)
|
|
44
|
+
return envVal;
|
|
45
|
+
return undefined;
|
|
46
|
+
},
|
|
47
|
+
validateRequiredCredentials: (creds, required, provider) => {
|
|
48
|
+
for (const key of required) {
|
|
49
|
+
if (!creds[key])
|
|
50
|
+
throw new Error(`${provider}: Missing required credential: ${key}`);
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
}));
|
|
54
|
+
vi.mock('@memberjunction/global', () => ({
|
|
55
|
+
RegisterClass: () => (target) => target,
|
|
56
|
+
}));
|
|
57
|
+
vi.mock('@memberjunction/core', () => ({
|
|
58
|
+
LogError: vi.fn(),
|
|
59
|
+
LogStatus: vi.fn(),
|
|
60
|
+
}));
|
|
61
|
+
// env-var not needed since we're mocking config.ts directly
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// Import after mocks
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
import { TwilioProvider } from '../TwilioProvider.js';
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
// Tests
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
describe('TwilioProvider', () => {
|
|
70
|
+
let provider;
|
|
71
|
+
beforeEach(() => {
|
|
72
|
+
vi.clearAllMocks();
|
|
73
|
+
provider = new TwilioProvider();
|
|
74
|
+
});
|
|
75
|
+
describe('getSupportedOperations', () => {
|
|
76
|
+
it('should support messaging operations but not CreateDraft', () => {
|
|
77
|
+
const ops = provider.getSupportedOperations();
|
|
78
|
+
expect(ops).toContain('SendSingleMessage');
|
|
79
|
+
expect(ops).toContain('GetMessages');
|
|
80
|
+
expect(ops).toContain('ForwardMessage');
|
|
81
|
+
expect(ops).toContain('ReplyToMessage');
|
|
82
|
+
expect(ops).not.toContain('CreateDraft');
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
describe('SendSingleMessage', () => {
|
|
86
|
+
const createMessage = (overrides = {}) => ({
|
|
87
|
+
From: '',
|
|
88
|
+
To: '+15559998888',
|
|
89
|
+
ProcessedBody: 'Hello via SMS',
|
|
90
|
+
ProcessedHTMLBody: '',
|
|
91
|
+
ProcessedSubject: '',
|
|
92
|
+
ContextData: {},
|
|
93
|
+
...overrides,
|
|
94
|
+
});
|
|
95
|
+
it('should send SMS successfully', async () => {
|
|
96
|
+
mockMessagesCreate.mockResolvedValue({ sid: 'SM123' });
|
|
97
|
+
const result = await provider.SendSingleMessage(createMessage());
|
|
98
|
+
expect(result.Success).toBe(true);
|
|
99
|
+
expect(mockMessagesCreate).toHaveBeenCalledWith(expect.objectContaining({
|
|
100
|
+
body: 'Hello via SMS',
|
|
101
|
+
from: '+15551234567',
|
|
102
|
+
to: '+15559998888',
|
|
103
|
+
}));
|
|
104
|
+
});
|
|
105
|
+
it('should return failure when recipient not specified', async () => {
|
|
106
|
+
const result = await provider.SendSingleMessage(createMessage({ To: '' }));
|
|
107
|
+
expect(result.Success).toBe(false);
|
|
108
|
+
expect(result.Error).toContain('Recipient not specified');
|
|
109
|
+
});
|
|
110
|
+
it('should detect WhatsApp channel from recipient prefix', async () => {
|
|
111
|
+
mockMessagesCreate.mockResolvedValue({ sid: 'WA123' });
|
|
112
|
+
await provider.SendSingleMessage(createMessage({ To: 'whatsapp:+15559998888' }));
|
|
113
|
+
expect(mockMessagesCreate).toHaveBeenCalledWith(expect.objectContaining({
|
|
114
|
+
from: 'whatsapp:+15559876543',
|
|
115
|
+
to: 'whatsapp:+15559998888',
|
|
116
|
+
}));
|
|
117
|
+
});
|
|
118
|
+
it('should detect Messenger channel from recipient prefix', async () => {
|
|
119
|
+
mockMessagesCreate.mockResolvedValue({ sid: 'MSG123' });
|
|
120
|
+
await provider.SendSingleMessage(createMessage({ To: 'messenger:user123' }));
|
|
121
|
+
expect(mockMessagesCreate).toHaveBeenCalledWith(expect.objectContaining({
|
|
122
|
+
from: 'messenger:fb-page-123',
|
|
123
|
+
to: 'messenger:user123',
|
|
124
|
+
}));
|
|
125
|
+
});
|
|
126
|
+
it('should include media URLs when provided', async () => {
|
|
127
|
+
mockMessagesCreate.mockResolvedValue({ sid: 'SM456' });
|
|
128
|
+
await provider.SendSingleMessage(createMessage({
|
|
129
|
+
ContextData: { mediaUrls: ['https://example.com/image.jpg'] },
|
|
130
|
+
}));
|
|
131
|
+
expect(mockMessagesCreate).toHaveBeenCalledWith(expect.objectContaining({
|
|
132
|
+
mediaUrl: ['https://example.com/image.jpg'],
|
|
133
|
+
}));
|
|
134
|
+
});
|
|
135
|
+
it('should handle Twilio API errors gracefully', async () => {
|
|
136
|
+
mockMessagesCreate.mockRejectedValue(new Error('Authentication Error'));
|
|
137
|
+
const result = await provider.SendSingleMessage(createMessage());
|
|
138
|
+
expect(result.Success).toBe(false);
|
|
139
|
+
expect(result.Error).toContain('Authentication Error');
|
|
140
|
+
});
|
|
141
|
+
it('should send successfully with per-request credentials', async () => {
|
|
142
|
+
mockMessagesCreate.mockResolvedValue({ sid: 'SM789' });
|
|
143
|
+
const result = await provider.SendSingleMessage(createMessage(), {
|
|
144
|
+
accountSid: 'custom-sid',
|
|
145
|
+
authToken: 'custom-token',
|
|
146
|
+
phoneNumber: '+15550001111',
|
|
147
|
+
});
|
|
148
|
+
expect(result.Success).toBe(true);
|
|
149
|
+
// The mock twilio constructor is called with custom creds internally
|
|
150
|
+
expect(mockMessagesCreate).toHaveBeenCalled();
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
describe('CreateDraft', () => {
|
|
154
|
+
it('should return unsupported error', async () => {
|
|
155
|
+
const result = await provider.CreateDraft({});
|
|
156
|
+
expect(result.Success).toBe(false);
|
|
157
|
+
expect(result.ErrorMessage).toContain('does not support');
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
describe('GetMessages', () => {
|
|
161
|
+
it('should fetch messages', async () => {
|
|
162
|
+
mockMessagesList.mockResolvedValue([
|
|
163
|
+
{ from: '+15551111111', to: '+15552222222', body: 'Hello', sid: 'SM001' },
|
|
164
|
+
]);
|
|
165
|
+
const result = await provider.GetMessages({
|
|
166
|
+
NumMessages: 10,
|
|
167
|
+
Identifier: '+15552222222',
|
|
168
|
+
});
|
|
169
|
+
expect(result.Success).toBe(true);
|
|
170
|
+
expect(result.Messages).toHaveLength(1);
|
|
171
|
+
expect(result.Messages[0].Body).toBe('Hello');
|
|
172
|
+
expect(result.Messages[0].ExternalSystemRecordID).toBe('SM001');
|
|
173
|
+
});
|
|
174
|
+
it('should handle fetch errors', async () => {
|
|
175
|
+
mockMessagesList.mockRejectedValue(new Error('Rate limited'));
|
|
176
|
+
const result = await provider.GetMessages({
|
|
177
|
+
NumMessages: 10,
|
|
178
|
+
});
|
|
179
|
+
expect(result.Success).toBe(false);
|
|
180
|
+
expect(result.ErrorMessage).toContain('Rate limited');
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
//# sourceMappingURL=TwilioProvider.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TwilioProvider.test.js","sourceRoot":"","sources":["../../src/__tests__/TwilioProvider.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/communication-twilio",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.3.1",
|
|
5
5
|
"description": "Twilio provider for MemberJunction Communication framework",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -10,12 +10,13 @@
|
|
|
10
10
|
],
|
|
11
11
|
"scripts": {
|
|
12
12
|
"build": "tsc && tsc-alias -f",
|
|
13
|
-
"clean": "rimraf dist"
|
|
13
|
+
"clean": "rimraf dist",
|
|
14
|
+
"test": "vitest run"
|
|
14
15
|
},
|
|
15
16
|
"dependencies": {
|
|
16
|
-
"@memberjunction/communication-types": "4.
|
|
17
|
-
"@memberjunction/core": "4.
|
|
18
|
-
"@memberjunction/global": "4.
|
|
17
|
+
"@memberjunction/communication-types": "4.3.1",
|
|
18
|
+
"@memberjunction/core": "4.3.1",
|
|
19
|
+
"@memberjunction/global": "4.3.1",
|
|
19
20
|
"dotenv": "^17.2.4",
|
|
20
21
|
"env-var": "^7.4.1",
|
|
21
22
|
"twilio": "^5.12.1"
|