@bernierllc/email-sender-manager 1.0.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.
- package/LICENSE +5 -0
- package/README.md +466 -0
- package/dist/__tests__/manager.test.d.ts +2 -0
- package/dist/__tests__/manager.test.d.ts.map +1 -0
- package/dist/__tests__/manager.test.js +344 -0
- package/dist/__tests__/manager.test.js.map +1 -0
- package/dist/__tests__/mocks/mock-database.d.ts +15 -0
- package/dist/__tests__/mocks/mock-database.d.ts.map +1 -0
- package/dist/__tests__/mocks/mock-database.js +219 -0
- package/dist/__tests__/mocks/mock-database.js.map +1 -0
- package/dist/__tests__/selection/selector.test.d.ts +2 -0
- package/dist/__tests__/selection/selector.test.d.ts.map +1 -0
- package/dist/__tests__/selection/selector.test.js +351 -0
- package/dist/__tests__/selection/selector.test.js.map +1 -0
- package/dist/__tests__/utils/domain-utils.test.d.ts +2 -0
- package/dist/__tests__/utils/domain-utils.test.d.ts.map +1 -0
- package/dist/__tests__/utils/domain-utils.test.js +91 -0
- package/dist/__tests__/utils/domain-utils.test.js.map +1 -0
- package/dist/__tests__/utils/validation-utils.test.d.ts +2 -0
- package/dist/__tests__/utils/validation-utils.test.d.ts.map +1 -0
- package/dist/__tests__/utils/validation-utils.test.js +117 -0
- package/dist/__tests__/utils/validation-utils.test.js.map +1 -0
- package/dist/database/bootstrap.d.ts +35 -0
- package/dist/database/bootstrap.d.ts.map +1 -0
- package/dist/database/bootstrap.js +183 -0
- package/dist/database/bootstrap.js.map +1 -0
- package/dist/database/schema.d.ts +13 -0
- package/dist/database/schema.d.ts.map +1 -0
- package/dist/database/schema.js +72 -0
- package/dist/database/schema.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/manager.d.ts +85 -0
- package/dist/manager.d.ts.map +1 -0
- package/dist/manager.js +469 -0
- package/dist/manager.js.map +1 -0
- package/dist/selection/selector.d.ts +27 -0
- package/dist/selection/selector.d.ts.map +1 -0
- package/dist/selection/selector.js +107 -0
- package/dist/selection/selector.js.map +1 -0
- package/dist/types.d.ts +257 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/domain-utils.d.ts +21 -0
- package/dist/utils/domain-utils.d.ts.map +1 -0
- package/dist/utils/domain-utils.js +65 -0
- package/dist/utils/domain-utils.js.map +1 -0
- package/dist/utils/validation-utils.d.ts +23 -0
- package/dist/utils/validation-utils.d.ts.map +1 -0
- package/dist/utils/validation-utils.js +148 -0
- package/dist/utils/validation-utils.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (c) 2025 Bernier LLC
|
|
3
|
+
|
|
4
|
+
This file is licensed to the client under a limited-use license.
|
|
5
|
+
The client may use and modify this code *only within the scope of the project it was delivered for*.
|
|
6
|
+
Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
|
|
7
|
+
*/
|
|
8
|
+
// Test framework functions are globally available via Jest
|
|
9
|
+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
10
|
+
/* global describe, it, expect, beforeEach */
|
|
11
|
+
import { EmailSenderManager } from '../manager.js';
|
|
12
|
+
import { MockDatabaseAdapter } from './mocks/mock-database.js';
|
|
13
|
+
// Mock provider for testing
|
|
14
|
+
class MockProvider {
|
|
15
|
+
providerId = 'mock-provider';
|
|
16
|
+
name = 'Mock Provider';
|
|
17
|
+
async validateSender(email) {
|
|
18
|
+
return {
|
|
19
|
+
isVerified: email.includes('verified'),
|
|
20
|
+
verificationStatus: email.includes('verified') ? 'verified' : 'pending',
|
|
21
|
+
lastChecked: new Date(),
|
|
22
|
+
metadata: {},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
async getVerifiedSenders() {
|
|
26
|
+
return [];
|
|
27
|
+
}
|
|
28
|
+
async syncSender(sender) {
|
|
29
|
+
return {
|
|
30
|
+
success: true,
|
|
31
|
+
senderId: sender.id,
|
|
32
|
+
synced: true,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
getCapabilities() {
|
|
36
|
+
return ['verification', 'sync'];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
describe('EmailSenderManager', () => {
|
|
40
|
+
let manager;
|
|
41
|
+
let database;
|
|
42
|
+
beforeEach(() => {
|
|
43
|
+
database = new MockDatabaseAdapter();
|
|
44
|
+
manager = new EmailSenderManager({
|
|
45
|
+
database,
|
|
46
|
+
bootstrap: {
|
|
47
|
+
enabled: true,
|
|
48
|
+
createTables: true,
|
|
49
|
+
seedDefaultSenders: false,
|
|
50
|
+
defaultSenders: [],
|
|
51
|
+
environment: 'development',
|
|
52
|
+
},
|
|
53
|
+
selection: {
|
|
54
|
+
strategy: 'priority',
|
|
55
|
+
fallbackToDefault: true,
|
|
56
|
+
domainMatchingRules: [],
|
|
57
|
+
},
|
|
58
|
+
validation: {
|
|
59
|
+
requireVerification: false,
|
|
60
|
+
allowUnverifiedSenders: true,
|
|
61
|
+
validateDomainOwnership: false,
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe('bootstrap', () => {
|
|
66
|
+
it('should bootstrap database successfully', async () => {
|
|
67
|
+
const result = await manager.bootstrapDatabase();
|
|
68
|
+
expect(result.success).toBe(true);
|
|
69
|
+
expect(result.tablesCreated).toBe(true);
|
|
70
|
+
});
|
|
71
|
+
it('should seed default senders when configured', async () => {
|
|
72
|
+
const managerWithSeed = new EmailSenderManager({
|
|
73
|
+
database,
|
|
74
|
+
bootstrap: {
|
|
75
|
+
enabled: true,
|
|
76
|
+
createTables: true,
|
|
77
|
+
seedDefaultSenders: true,
|
|
78
|
+
defaultSenders: [
|
|
79
|
+
{
|
|
80
|
+
name: 'Default Sender',
|
|
81
|
+
fromEmail: 'default@example.com',
|
|
82
|
+
fromName: 'Default',
|
|
83
|
+
provider: 'test',
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
environment: 'development',
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
const result = await managerWithSeed.bootstrapDatabase();
|
|
90
|
+
expect(result.success).toBe(true);
|
|
91
|
+
expect(result.seedersRun).toBe(1);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe('CRUD operations', () => {
|
|
95
|
+
const validRequest = {
|
|
96
|
+
name: 'Test Sender',
|
|
97
|
+
fromEmail: 'test@example.com',
|
|
98
|
+
fromName: 'Test User',
|
|
99
|
+
provider: 'sendgrid',
|
|
100
|
+
priority: 10,
|
|
101
|
+
createdBy: 'user123',
|
|
102
|
+
};
|
|
103
|
+
it('should create a sender successfully', async () => {
|
|
104
|
+
const sender = await manager.createSender(validRequest);
|
|
105
|
+
expect(sender.id).toBeDefined();
|
|
106
|
+
expect(sender.name).toBe(validRequest.name);
|
|
107
|
+
expect(sender.fromEmail).toBe(validRequest.fromEmail);
|
|
108
|
+
expect(sender.domain).toBe('example.com');
|
|
109
|
+
expect(sender.isActive).toBe(true);
|
|
110
|
+
expect(sender.isVerified).toBe(false);
|
|
111
|
+
expect(sender.verificationStatus).toBe('pending');
|
|
112
|
+
});
|
|
113
|
+
it('should reject invalid sender creation', async () => {
|
|
114
|
+
const invalidRequest = {
|
|
115
|
+
...validRequest,
|
|
116
|
+
fromEmail: 'invalid-email',
|
|
117
|
+
};
|
|
118
|
+
await expect(manager.createSender(invalidRequest)).rejects.toThrow('Validation failed');
|
|
119
|
+
});
|
|
120
|
+
it('should update a sender successfully', async () => {
|
|
121
|
+
const sender = await manager.createSender(validRequest);
|
|
122
|
+
const updated = await manager.updateSender(sender.id, {
|
|
123
|
+
name: 'Updated Name',
|
|
124
|
+
priority: 20,
|
|
125
|
+
lastModifiedBy: 'admin',
|
|
126
|
+
});
|
|
127
|
+
expect(updated.name).toBe('Updated Name');
|
|
128
|
+
expect(updated.priority).toBe(20);
|
|
129
|
+
expect(updated.lastModifiedBy).toBe('admin');
|
|
130
|
+
});
|
|
131
|
+
it('should get a sender by ID', async () => {
|
|
132
|
+
const created = await manager.createSender(validRequest);
|
|
133
|
+
const retrieved = await manager.getSender(created.id);
|
|
134
|
+
expect(retrieved).not.toBeNull();
|
|
135
|
+
expect(retrieved?.id).toBe(created.id);
|
|
136
|
+
expect(retrieved?.fromEmail).toBe(created.fromEmail);
|
|
137
|
+
});
|
|
138
|
+
it('should return null for non-existent sender', async () => {
|
|
139
|
+
const sender = await manager.getSender('non-existent-id');
|
|
140
|
+
expect(sender).toBeNull();
|
|
141
|
+
});
|
|
142
|
+
it('should delete a sender successfully', async () => {
|
|
143
|
+
const sender = await manager.createSender(validRequest);
|
|
144
|
+
await manager.deleteSender(sender.id);
|
|
145
|
+
const retrieved = await manager.getSender(sender.id);
|
|
146
|
+
expect(retrieved).toBeNull();
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
describe('list senders', () => {
|
|
150
|
+
beforeEach(async () => {
|
|
151
|
+
await manager.createSender({
|
|
152
|
+
name: 'Sender 1',
|
|
153
|
+
fromEmail: 'sender1@example.com',
|
|
154
|
+
fromName: 'Sender One',
|
|
155
|
+
provider: 'sendgrid',
|
|
156
|
+
priority: 10,
|
|
157
|
+
createdBy: 'user',
|
|
158
|
+
});
|
|
159
|
+
await manager.createSender({
|
|
160
|
+
name: 'Sender 2',
|
|
161
|
+
fromEmail: 'sender2@test.com',
|
|
162
|
+
fromName: 'Sender Two',
|
|
163
|
+
provider: 'mailgun',
|
|
164
|
+
priority: 20,
|
|
165
|
+
createdBy: 'user',
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
it('should list all senders', async () => {
|
|
169
|
+
const result = await manager.listSenders();
|
|
170
|
+
expect(result.items).toHaveLength(2);
|
|
171
|
+
expect(result.total).toBe(2);
|
|
172
|
+
});
|
|
173
|
+
it('should filter by provider', async () => {
|
|
174
|
+
const result = await manager.listSenders({ provider: 'sendgrid' });
|
|
175
|
+
expect(result.items).toHaveLength(1);
|
|
176
|
+
expect(result.items[0].provider).toBe('sendgrid');
|
|
177
|
+
});
|
|
178
|
+
it('should filter by domain', async () => {
|
|
179
|
+
const result = await manager.listSenders({ domain: 'example.com' });
|
|
180
|
+
expect(result.items).toHaveLength(1);
|
|
181
|
+
expect(result.items[0].domain).toBe('example.com');
|
|
182
|
+
});
|
|
183
|
+
it('should paginate results', async () => {
|
|
184
|
+
const result = await manager.listSenders({ limit: 1, offset: 0 });
|
|
185
|
+
expect(result.items).toHaveLength(1);
|
|
186
|
+
expect(result.hasMore).toBe(true);
|
|
187
|
+
});
|
|
188
|
+
it('should sort by priority', async () => {
|
|
189
|
+
const result = await manager.listSenders({ orderBy: 'priority', orderDirection: 'asc' });
|
|
190
|
+
expect(result.items[0].priority).toBe(10);
|
|
191
|
+
expect(result.items[1].priority).toBe(20);
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
describe('sender selection', () => {
|
|
195
|
+
beforeEach(async () => {
|
|
196
|
+
// Create senders with different priorities and domains
|
|
197
|
+
await manager.createSender({
|
|
198
|
+
name: 'High Priority',
|
|
199
|
+
fromEmail: 'high@example.com',
|
|
200
|
+
fromName: 'High',
|
|
201
|
+
provider: 'test',
|
|
202
|
+
priority: 1,
|
|
203
|
+
createdBy: 'user',
|
|
204
|
+
});
|
|
205
|
+
await manager.createSender({
|
|
206
|
+
name: 'Low Priority',
|
|
207
|
+
fromEmail: 'low@example.com',
|
|
208
|
+
fromName: 'Low',
|
|
209
|
+
provider: 'test',
|
|
210
|
+
priority: 100,
|
|
211
|
+
createdBy: 'user',
|
|
212
|
+
});
|
|
213
|
+
await manager.createSender({
|
|
214
|
+
name: 'Different Domain',
|
|
215
|
+
fromEmail: 'sender@other.com',
|
|
216
|
+
fromName: 'Other',
|
|
217
|
+
provider: 'test',
|
|
218
|
+
priority: 50,
|
|
219
|
+
createdBy: 'user',
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
it('should select sender by priority', async () => {
|
|
223
|
+
const selected = await manager.selectBestSender('test@example.com');
|
|
224
|
+
expect(selected).not.toBeNull();
|
|
225
|
+
expect(selected?.priority).toBe(1);
|
|
226
|
+
});
|
|
227
|
+
it('should prefer domain match', async () => {
|
|
228
|
+
const managerWithDomainMatch = new EmailSenderManager({
|
|
229
|
+
database,
|
|
230
|
+
selection: {
|
|
231
|
+
strategy: 'domain_match',
|
|
232
|
+
fallbackToDefault: true,
|
|
233
|
+
domainMatchingRules: [],
|
|
234
|
+
},
|
|
235
|
+
});
|
|
236
|
+
// Re-create senders
|
|
237
|
+
await managerWithDomainMatch.createSender({
|
|
238
|
+
name: 'High Priority',
|
|
239
|
+
fromEmail: 'high@example.com',
|
|
240
|
+
fromName: 'High',
|
|
241
|
+
provider: 'test',
|
|
242
|
+
priority: 1,
|
|
243
|
+
createdBy: 'user',
|
|
244
|
+
});
|
|
245
|
+
const selected = await managerWithDomainMatch.selectBestSender('test@example.com');
|
|
246
|
+
expect(selected).not.toBeNull();
|
|
247
|
+
expect(selected?.domain).toBe('example.com');
|
|
248
|
+
});
|
|
249
|
+
it('should handle no matching senders', async () => {
|
|
250
|
+
await manager.deleteSender((await manager.listSenders()).items[0].id);
|
|
251
|
+
await manager.deleteSender((await manager.listSenders()).items[0].id);
|
|
252
|
+
await manager.deleteSender((await manager.listSenders()).items[0].id);
|
|
253
|
+
const selected = await manager.selectBestSender('test@nonexistent.com');
|
|
254
|
+
expect(selected).toBeNull();
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
describe('provider integration', () => {
|
|
258
|
+
it('should register a provider', async () => {
|
|
259
|
+
const provider = new MockProvider();
|
|
260
|
+
await manager.registerProvider(provider);
|
|
261
|
+
// Create a sender with this provider
|
|
262
|
+
const sender = await manager.createSender({
|
|
263
|
+
name: 'Test',
|
|
264
|
+
fromEmail: 'verified@example.com',
|
|
265
|
+
fromName: 'Test',
|
|
266
|
+
provider: 'mock-provider',
|
|
267
|
+
createdBy: 'user',
|
|
268
|
+
});
|
|
269
|
+
expect(sender.provider).toBe('mock-provider');
|
|
270
|
+
});
|
|
271
|
+
it('should verify sender with provider', async () => {
|
|
272
|
+
const provider = new MockProvider();
|
|
273
|
+
await manager.registerProvider(provider);
|
|
274
|
+
const sender = await manager.createSender({
|
|
275
|
+
name: 'Test',
|
|
276
|
+
fromEmail: 'verified@example.com',
|
|
277
|
+
fromName: 'Test',
|
|
278
|
+
provider: 'mock-provider',
|
|
279
|
+
createdBy: 'user',
|
|
280
|
+
});
|
|
281
|
+
const verification = await manager.verifySender(sender.id);
|
|
282
|
+
expect(verification.success).toBe(true);
|
|
283
|
+
expect(verification.isVerified).toBe(true);
|
|
284
|
+
});
|
|
285
|
+
it('should handle verification for non-existent sender', async () => {
|
|
286
|
+
const verification = await manager.verifySender('non-existent-id');
|
|
287
|
+
expect(verification.success).toBe(false);
|
|
288
|
+
expect(verification.error).toContain('not found');
|
|
289
|
+
});
|
|
290
|
+
});
|
|
291
|
+
describe('validation', () => {
|
|
292
|
+
it('should validate sender configuration', async () => {
|
|
293
|
+
const sender = await manager.createSender({
|
|
294
|
+
name: 'Test',
|
|
295
|
+
fromEmail: 'test@example.com',
|
|
296
|
+
fromName: 'Test',
|
|
297
|
+
provider: 'test',
|
|
298
|
+
createdBy: 'user',
|
|
299
|
+
});
|
|
300
|
+
const validation = await manager.validateSender(sender.id);
|
|
301
|
+
expect(validation.isValid).toBe(true);
|
|
302
|
+
expect(validation.errors).toHaveLength(0);
|
|
303
|
+
});
|
|
304
|
+
it('should detect validation errors', async () => {
|
|
305
|
+
const validation = await manager.validateSender('non-existent-id');
|
|
306
|
+
expect(validation.isValid).toBe(false);
|
|
307
|
+
expect(validation.errors.length).toBeGreaterThan(0);
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
describe('default sender management', () => {
|
|
311
|
+
it('should set first sender as default during bootstrap', async () => {
|
|
312
|
+
await manager.createSender({
|
|
313
|
+
name: 'First',
|
|
314
|
+
fromEmail: 'first@example.com',
|
|
315
|
+
fromName: 'First',
|
|
316
|
+
provider: 'test',
|
|
317
|
+
createdBy: 'user',
|
|
318
|
+
});
|
|
319
|
+
await manager.bootstrapDatabase();
|
|
320
|
+
const defaultSender = await manager.getDefaultSender();
|
|
321
|
+
expect(defaultSender).not.toBeNull();
|
|
322
|
+
expect(defaultSender?.fromEmail).toBe('first@example.com');
|
|
323
|
+
});
|
|
324
|
+
});
|
|
325
|
+
describe('cleanup operations', () => {
|
|
326
|
+
it('should cleanup inactive senders', async () => {
|
|
327
|
+
const sender = await manager.createSender({
|
|
328
|
+
name: 'Test',
|
|
329
|
+
fromEmail: 'test@example.com',
|
|
330
|
+
fromName: 'Test',
|
|
331
|
+
provider: 'test',
|
|
332
|
+
createdBy: 'user',
|
|
333
|
+
});
|
|
334
|
+
await manager.updateSender(sender.id, {
|
|
335
|
+
isActive: false,
|
|
336
|
+
lastModifiedBy: 'admin',
|
|
337
|
+
});
|
|
338
|
+
const result = await manager.cleanupInactiveSenders();
|
|
339
|
+
expect(result.success).toBe(true);
|
|
340
|
+
expect(result.deletedCount).toBe(1);
|
|
341
|
+
});
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
//# sourceMappingURL=manager.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.test.js","sourceRoot":"","sources":["../../src/__tests__/manager.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DatabaseAdapter } from '../../types.js';
|
|
2
|
+
export declare class MockDatabaseAdapter implements DatabaseAdapter {
|
|
3
|
+
private data;
|
|
4
|
+
private schemas;
|
|
5
|
+
execute(query: string, params?: unknown[]): Promise<void>;
|
|
6
|
+
query<T = unknown>(query: string, params?: unknown[]): Promise<T[]>;
|
|
7
|
+
queryOne<T = unknown>(query: string, params?: unknown[]): Promise<T | null>;
|
|
8
|
+
transaction<T>(callback: (adapter: DatabaseAdapter) => Promise<T>): Promise<T>;
|
|
9
|
+
private applyFilters;
|
|
10
|
+
private applyOrderAndLimit;
|
|
11
|
+
getSchemas(): string[];
|
|
12
|
+
getData(tableName: string): Record<string, unknown>[];
|
|
13
|
+
clear(): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=mock-database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-database.d.ts","sourceRoot":"","sources":["../../../src/__tests__/mocks/mock-database.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,qBAAa,mBAAoB,YAAW,eAAe;IACzD,OAAO,CAAC,IAAI,CAAqD;IACjE,OAAO,CAAC,OAAO,CAAgB;IAEzB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAuGzD,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAqBnE,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAK3E,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIpF,OAAO,CAAC,YAAY;IAqDpB,OAAO,CAAC,kBAAkB;IAoD1B,UAAU,IAAI,MAAM,EAAE;IAItB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAIrD,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (c) 2025 Bernier LLC
|
|
3
|
+
|
|
4
|
+
This file is licensed to the client under a limited-use license.
|
|
5
|
+
The client may use and modify this code *only within the scope of the project it was delivered for*.
|
|
6
|
+
Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
|
|
7
|
+
*/
|
|
8
|
+
export class MockDatabaseAdapter {
|
|
9
|
+
data = new Map();
|
|
10
|
+
schemas = [];
|
|
11
|
+
async execute(query, params) {
|
|
12
|
+
// Simulate async operation
|
|
13
|
+
await Promise.resolve();
|
|
14
|
+
this.schemas.push(query);
|
|
15
|
+
// Handle INSERT
|
|
16
|
+
if (query.includes('INSERT INTO email_senders')) {
|
|
17
|
+
const tableName = 'email_senders';
|
|
18
|
+
if (!this.data.has(tableName)) {
|
|
19
|
+
this.data.set(tableName, []);
|
|
20
|
+
}
|
|
21
|
+
const table = this.data.get(tableName);
|
|
22
|
+
const row = {};
|
|
23
|
+
// Map params to columns (simplified)
|
|
24
|
+
const columns = [
|
|
25
|
+
'id',
|
|
26
|
+
'name',
|
|
27
|
+
'description',
|
|
28
|
+
'from_email',
|
|
29
|
+
'from_name',
|
|
30
|
+
'reply_to_email',
|
|
31
|
+
'reply_to_name',
|
|
32
|
+
'provider',
|
|
33
|
+
'provider_sender_id',
|
|
34
|
+
'provider_metadata',
|
|
35
|
+
'is_verified',
|
|
36
|
+
'verification_status',
|
|
37
|
+
'is_default',
|
|
38
|
+
'is_active',
|
|
39
|
+
'priority',
|
|
40
|
+
'allowed_domains',
|
|
41
|
+
'domain',
|
|
42
|
+
'created_at',
|
|
43
|
+
'updated_at',
|
|
44
|
+
'created_by',
|
|
45
|
+
'last_modified_by',
|
|
46
|
+
];
|
|
47
|
+
columns.forEach((col, idx) => {
|
|
48
|
+
row[col] = params?.[idx] ?? null;
|
|
49
|
+
});
|
|
50
|
+
table.push(row);
|
|
51
|
+
}
|
|
52
|
+
// Handle UPDATE
|
|
53
|
+
if (query.includes('UPDATE email_senders')) {
|
|
54
|
+
const tableName = 'email_senders';
|
|
55
|
+
const table = this.data.get(tableName);
|
|
56
|
+
if (!table || !params)
|
|
57
|
+
return;
|
|
58
|
+
// Get the ID from the last param
|
|
59
|
+
const id = params[params.length - 1];
|
|
60
|
+
const index = table.findIndex((row) => row.id === id);
|
|
61
|
+
if (index >= 0) {
|
|
62
|
+
const existingRow = table[index];
|
|
63
|
+
const columns = [
|
|
64
|
+
'name',
|
|
65
|
+
'description',
|
|
66
|
+
'from_name',
|
|
67
|
+
'reply_to_email',
|
|
68
|
+
'reply_to_name',
|
|
69
|
+
'provider_sender_id',
|
|
70
|
+
'provider_metadata',
|
|
71
|
+
'is_verified',
|
|
72
|
+
'verification_status',
|
|
73
|
+
'last_verified_at',
|
|
74
|
+
'verification_error',
|
|
75
|
+
'is_default',
|
|
76
|
+
'is_active',
|
|
77
|
+
'priority',
|
|
78
|
+
'allowed_domains',
|
|
79
|
+
'updated_at',
|
|
80
|
+
'last_modified_by',
|
|
81
|
+
];
|
|
82
|
+
columns.forEach((col, idx) => {
|
|
83
|
+
if (idx < params.length - 1) {
|
|
84
|
+
existingRow[col] = params[idx];
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
table[index] = existingRow;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Handle DELETE
|
|
91
|
+
if (query.includes('DELETE FROM email_senders')) {
|
|
92
|
+
const tableName = 'email_senders';
|
|
93
|
+
const table = this.data.get(tableName);
|
|
94
|
+
if (!table || !params)
|
|
95
|
+
return;
|
|
96
|
+
const id = params[0];
|
|
97
|
+
const index = table.findIndex((row) => row.id === id);
|
|
98
|
+
if (index >= 0) {
|
|
99
|
+
table.splice(index, 1);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async query(query, params) {
|
|
104
|
+
// Simulate async operation
|
|
105
|
+
await Promise.resolve();
|
|
106
|
+
const tableName = 'email_senders';
|
|
107
|
+
const table = this.data.get(tableName) ?? [];
|
|
108
|
+
// Handle SELECT COUNT
|
|
109
|
+
if (query.includes('COUNT(*)')) {
|
|
110
|
+
const filtered = this.applyFilters(table, query, params);
|
|
111
|
+
return [{ count: filtered.length }];
|
|
112
|
+
}
|
|
113
|
+
// Handle SELECT
|
|
114
|
+
if (query.includes('SELECT')) {
|
|
115
|
+
const filtered = this.applyFilters(table, query, params);
|
|
116
|
+
return filtered;
|
|
117
|
+
}
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
async queryOne(query, params) {
|
|
121
|
+
const results = await this.query(query, params);
|
|
122
|
+
return results.length > 0 ? results[0] : null;
|
|
123
|
+
}
|
|
124
|
+
async transaction(callback) {
|
|
125
|
+
return await callback(this);
|
|
126
|
+
}
|
|
127
|
+
applyFilters(table, query, params) {
|
|
128
|
+
let filtered = [...table];
|
|
129
|
+
if (!params || params.length === 0) {
|
|
130
|
+
return this.applyOrderAndLimit(filtered, query);
|
|
131
|
+
}
|
|
132
|
+
let paramIndex = 0;
|
|
133
|
+
// Apply WHERE filters
|
|
134
|
+
if (query.includes('WHERE')) {
|
|
135
|
+
if (query.includes('id = ?')) {
|
|
136
|
+
const id = params[paramIndex++];
|
|
137
|
+
filtered = filtered.filter((row) => row.id === id);
|
|
138
|
+
}
|
|
139
|
+
if (query.includes('from_email = ?')) {
|
|
140
|
+
const email = params[paramIndex++];
|
|
141
|
+
filtered = filtered.filter((row) => row.from_email === email);
|
|
142
|
+
}
|
|
143
|
+
if (query.includes('provider = ?')) {
|
|
144
|
+
const provider = params[paramIndex++];
|
|
145
|
+
filtered = filtered.filter((row) => row.provider === provider);
|
|
146
|
+
}
|
|
147
|
+
if (query.includes('is_active = ?')) {
|
|
148
|
+
const isActive = params[paramIndex++];
|
|
149
|
+
filtered = filtered.filter((row) => row.is_active === isActive);
|
|
150
|
+
}
|
|
151
|
+
if (query.includes('is_verified = ?')) {
|
|
152
|
+
const isVerified = params[paramIndex++];
|
|
153
|
+
filtered = filtered.filter((row) => row.is_verified === isVerified);
|
|
154
|
+
}
|
|
155
|
+
if (query.includes('domain = ?')) {
|
|
156
|
+
const domain = params[paramIndex++];
|
|
157
|
+
filtered = filtered.filter((row) => row.domain === domain);
|
|
158
|
+
}
|
|
159
|
+
if (query.includes('is_default = TRUE')) {
|
|
160
|
+
filtered = filtered.filter((row) => row.is_default === true);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return this.applyOrderAndLimit(filtered, query, params);
|
|
164
|
+
}
|
|
165
|
+
applyOrderAndLimit(rows, query, params) {
|
|
166
|
+
let result = [...rows];
|
|
167
|
+
// Apply ORDER BY
|
|
168
|
+
if (query.includes('ORDER BY')) {
|
|
169
|
+
if (query.includes('priority')) {
|
|
170
|
+
const direction = query.includes('DESC') ? -1 : 1;
|
|
171
|
+
result.sort((a, b) => {
|
|
172
|
+
return direction * (a.priority - b.priority);
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
else if (query.includes('created_at')) {
|
|
176
|
+
const direction = query.includes('DESC') ? -1 : 1;
|
|
177
|
+
result.sort((a, b) => {
|
|
178
|
+
const aTime = new Date(a.created_at).getTime();
|
|
179
|
+
const bTime = new Date(b.created_at).getTime();
|
|
180
|
+
return direction * (aTime - bTime);
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Apply LIMIT and OFFSET
|
|
185
|
+
if (query.includes('LIMIT')) {
|
|
186
|
+
const limitMatch = query.match(/LIMIT (\d+)/);
|
|
187
|
+
const offsetMatch = query.match(/OFFSET (\d+)/);
|
|
188
|
+
let limit = limitMatch ? parseInt(limitMatch[1]) : undefined;
|
|
189
|
+
let offset = offsetMatch ? parseInt(offsetMatch[1]) : 0;
|
|
190
|
+
// If using placeholders
|
|
191
|
+
if (query.includes('LIMIT ?')) {
|
|
192
|
+
const lastParams = params?.slice(-2) ?? [];
|
|
193
|
+
if (lastParams.length >= 2) {
|
|
194
|
+
limit = lastParams[0];
|
|
195
|
+
offset = lastParams[1];
|
|
196
|
+
}
|
|
197
|
+
else if (lastParams.length === 1) {
|
|
198
|
+
limit = lastParams[0];
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (limit !== undefined) {
|
|
202
|
+
result = result.slice(offset, offset + limit);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return result;
|
|
206
|
+
}
|
|
207
|
+
// Helper methods for testing
|
|
208
|
+
getSchemas() {
|
|
209
|
+
return this.schemas;
|
|
210
|
+
}
|
|
211
|
+
getData(tableName) {
|
|
212
|
+
return this.data.get(tableName) ?? [];
|
|
213
|
+
}
|
|
214
|
+
clear() {
|
|
215
|
+
this.data.clear();
|
|
216
|
+
this.schemas = [];
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=mock-database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-database.js","sourceRoot":"","sources":["../../../src/__tests__/mocks/mock-database.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/selection/selector.test.ts"],"names":[],"mappings":""}
|