@simplens/mock 1.0.0
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/README.md +94 -0
- package/dist/index.d.ts +137 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +71 -0
- package/dist/index.js.map +1 -0
- package/dist/index.test.d.ts +2 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +286 -0
- package/dist/index.test.js.map +1 -0
- package/package.json +44 -0
package/README.md
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# @simplens/mock
|
|
2
|
+
|
|
3
|
+
A mock provider plugin for [SimpleNS](https://github.com/SimpleNotificationSystem) designed for testing and development purposes.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @simplens/mock
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
### Configuration
|
|
14
|
+
|
|
15
|
+
Add the mock provider to your `simplens.config.yaml`:
|
|
16
|
+
|
|
17
|
+
```yaml
|
|
18
|
+
providers:
|
|
19
|
+
- name: mock
|
|
20
|
+
package: '@simplens/mock'
|
|
21
|
+
options:
|
|
22
|
+
rateLimit:
|
|
23
|
+
maxTokens: 100
|
|
24
|
+
refillRate: 10
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Notification Schema
|
|
28
|
+
|
|
29
|
+
The mock provider accepts notifications with the following structure:
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
{
|
|
33
|
+
channel: 'mock',
|
|
34
|
+
recipient: {
|
|
35
|
+
user_id: string
|
|
36
|
+
},
|
|
37
|
+
content: {
|
|
38
|
+
message: string
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Example
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
import { SimpleNS } from '@simplens/core';
|
|
47
|
+
|
|
48
|
+
const notification = {
|
|
49
|
+
channel: 'mock',
|
|
50
|
+
recipient: {
|
|
51
|
+
user_id: 'test-user-123'
|
|
52
|
+
},
|
|
53
|
+
content: {
|
|
54
|
+
message: 'Hello, this is a test notification!'
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
await simplens.send(notification);
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Configuration Options
|
|
62
|
+
|
|
63
|
+
| Option | Type | Default | Description |
|
|
64
|
+
|--------|------|---------|-------------|
|
|
65
|
+
| `rateLimit.maxTokens` | number | 100 | Maximum number of tokens in the rate limit bucket |
|
|
66
|
+
| `rateLimit.refillRate` | number | 10 | Number of tokens refilled per second |
|
|
67
|
+
|
|
68
|
+
## Development
|
|
69
|
+
|
|
70
|
+
### Build
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
npm run build
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Test
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npm test
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Watch Mode
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
npm run test:watch
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## License
|
|
89
|
+
|
|
90
|
+
MIT
|
|
91
|
+
|
|
92
|
+
## Author
|
|
93
|
+
|
|
94
|
+
SimpleNS Team
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { z, type SimpleNSProvider, type ProviderManifest, type ProviderConfig, type DeliveryResult, type RateLimitConfig } from '@simplens/sdk';
|
|
2
|
+
declare const mockNotificationSchema: z.ZodObject<{
|
|
3
|
+
notification_id: z.ZodString;
|
|
4
|
+
request_id: z.ZodString;
|
|
5
|
+
client_id: z.ZodString;
|
|
6
|
+
variables: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
7
|
+
webhook_url: z.ZodString;
|
|
8
|
+
retry_count: z.ZodNumber;
|
|
9
|
+
} & {
|
|
10
|
+
channel: z.ZodLiteral<"mock">;
|
|
11
|
+
recipient: z.ZodObject<{
|
|
12
|
+
user_id: z.ZodString;
|
|
13
|
+
}, "strip", z.ZodTypeAny, {
|
|
14
|
+
user_id: string;
|
|
15
|
+
}, {
|
|
16
|
+
user_id: string;
|
|
17
|
+
}>;
|
|
18
|
+
content: z.ZodObject<{
|
|
19
|
+
message: z.ZodString;
|
|
20
|
+
}, "strip", z.ZodTypeAny, {
|
|
21
|
+
message: string;
|
|
22
|
+
}, {
|
|
23
|
+
message: string;
|
|
24
|
+
}>;
|
|
25
|
+
created_at: z.ZodDate;
|
|
26
|
+
}, z.core.$strip, z.ZodTypeAny, {
|
|
27
|
+
notification_id: string;
|
|
28
|
+
request_id: string;
|
|
29
|
+
client_id: string;
|
|
30
|
+
channel: "mock";
|
|
31
|
+
webhook_url: string;
|
|
32
|
+
retry_count: number;
|
|
33
|
+
created_at: Date;
|
|
34
|
+
recipient: {
|
|
35
|
+
user_id: string;
|
|
36
|
+
};
|
|
37
|
+
content: {
|
|
38
|
+
message: string;
|
|
39
|
+
};
|
|
40
|
+
variables?: Record<string, string> | undefined;
|
|
41
|
+
}, {
|
|
42
|
+
notification_id: string;
|
|
43
|
+
request_id: string;
|
|
44
|
+
client_id: string;
|
|
45
|
+
channel: "mock";
|
|
46
|
+
webhook_url: string;
|
|
47
|
+
retry_count: number;
|
|
48
|
+
created_at: Date;
|
|
49
|
+
recipient: {
|
|
50
|
+
user_id: string;
|
|
51
|
+
};
|
|
52
|
+
content: {
|
|
53
|
+
message: string;
|
|
54
|
+
};
|
|
55
|
+
variables?: Record<string, string> | undefined;
|
|
56
|
+
}>;
|
|
57
|
+
type MockNotification = z.infer<typeof mockNotificationSchema>;
|
|
58
|
+
declare class MockProvider implements SimpleNSProvider<MockNotification> {
|
|
59
|
+
private config;
|
|
60
|
+
readonly manifest: ProviderManifest;
|
|
61
|
+
getNotificationSchema(): z.ZodObject<{
|
|
62
|
+
notification_id: z.ZodString;
|
|
63
|
+
request_id: z.ZodString;
|
|
64
|
+
client_id: z.ZodString;
|
|
65
|
+
variables: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
66
|
+
webhook_url: z.ZodString;
|
|
67
|
+
retry_count: z.ZodNumber;
|
|
68
|
+
} & {
|
|
69
|
+
channel: z.ZodLiteral<"mock">;
|
|
70
|
+
recipient: z.ZodObject<{
|
|
71
|
+
user_id: z.ZodString;
|
|
72
|
+
}, "strip", z.ZodTypeAny, {
|
|
73
|
+
user_id: string;
|
|
74
|
+
}, {
|
|
75
|
+
user_id: string;
|
|
76
|
+
}>;
|
|
77
|
+
content: z.ZodObject<{
|
|
78
|
+
message: z.ZodString;
|
|
79
|
+
}, "strip", z.ZodTypeAny, {
|
|
80
|
+
message: string;
|
|
81
|
+
}, {
|
|
82
|
+
message: string;
|
|
83
|
+
}>;
|
|
84
|
+
created_at: z.ZodDate;
|
|
85
|
+
}, z.core.$strip, z.ZodTypeAny, {
|
|
86
|
+
notification_id: string;
|
|
87
|
+
request_id: string;
|
|
88
|
+
client_id: string;
|
|
89
|
+
channel: "mock";
|
|
90
|
+
webhook_url: string;
|
|
91
|
+
retry_count: number;
|
|
92
|
+
created_at: Date;
|
|
93
|
+
recipient: {
|
|
94
|
+
user_id: string;
|
|
95
|
+
};
|
|
96
|
+
content: {
|
|
97
|
+
message: string;
|
|
98
|
+
};
|
|
99
|
+
variables?: Record<string, string> | undefined;
|
|
100
|
+
}, {
|
|
101
|
+
notification_id: string;
|
|
102
|
+
request_id: string;
|
|
103
|
+
client_id: string;
|
|
104
|
+
channel: "mock";
|
|
105
|
+
webhook_url: string;
|
|
106
|
+
retry_count: number;
|
|
107
|
+
created_at: Date;
|
|
108
|
+
recipient: {
|
|
109
|
+
user_id: string;
|
|
110
|
+
};
|
|
111
|
+
content: {
|
|
112
|
+
message: string;
|
|
113
|
+
};
|
|
114
|
+
variables?: Record<string, string> | undefined;
|
|
115
|
+
}>;
|
|
116
|
+
getRecipientSchema(): z.ZodObject<{
|
|
117
|
+
user_id: z.ZodString;
|
|
118
|
+
}, "strip", z.ZodTypeAny, {
|
|
119
|
+
user_id: string;
|
|
120
|
+
}, {
|
|
121
|
+
user_id: string;
|
|
122
|
+
}>;
|
|
123
|
+
getContentSchema(): z.ZodObject<{
|
|
124
|
+
message: z.ZodString;
|
|
125
|
+
}, "strip", z.ZodTypeAny, {
|
|
126
|
+
message: string;
|
|
127
|
+
}, {
|
|
128
|
+
message: string;
|
|
129
|
+
}>;
|
|
130
|
+
getRateLimitConfig(): RateLimitConfig;
|
|
131
|
+
initialize(config: ProviderConfig): Promise<void>;
|
|
132
|
+
healthCheck(): Promise<boolean>;
|
|
133
|
+
send(notification: MockNotification): Promise<DeliveryResult>;
|
|
134
|
+
shutdown(): Promise<void>;
|
|
135
|
+
}
|
|
136
|
+
export default MockProvider;
|
|
137
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,CAAC,EACD,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EAEvB,MAAM,eAAe,CAAC;AAUvB,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK1B,CAAC;AAEH,KAAK,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE/D,cAAM,YAAa,YAAW,gBAAgB,CAAC,gBAAgB,CAAC;IAE5D,OAAO,CAAC,MAAM,CAA+B;IAE7C,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CASjC;IAEF,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIrB,kBAAkB;;;;;;;IAIlB,gBAAgB;;;;;;;IAIhB,kBAAkB,IAAI,eAAe;IAU/B,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,IAAI,CAAC,YAAY,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC;IAe7D,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC;AAED,eAAe,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { z, baseNotificationSchema, } from '@simplens/sdk';
|
|
2
|
+
const recipientSchema = z.object({
|
|
3
|
+
user_id: z.string(),
|
|
4
|
+
});
|
|
5
|
+
const contentSchema = z.object({
|
|
6
|
+
message: z.string(),
|
|
7
|
+
});
|
|
8
|
+
const mockNotificationSchema = baseNotificationSchema.extend({
|
|
9
|
+
channel: z.literal('mock'),
|
|
10
|
+
recipient: recipientSchema,
|
|
11
|
+
content: contentSchema,
|
|
12
|
+
created_at: z.coerce.date(),
|
|
13
|
+
});
|
|
14
|
+
class MockProvider {
|
|
15
|
+
config = null;
|
|
16
|
+
manifest = {
|
|
17
|
+
name: 'simplens-plugin-mock',
|
|
18
|
+
version: '1.0.0',
|
|
19
|
+
channel: 'mock',
|
|
20
|
+
displayName: 'Mock',
|
|
21
|
+
description: 'Send mock notifications for testing',
|
|
22
|
+
author: 'Adhish Krishna S',
|
|
23
|
+
homepage: 'https://github.com/SimpleNotificationSystem/plugin-mock',
|
|
24
|
+
requiredCredentials: [],
|
|
25
|
+
};
|
|
26
|
+
getNotificationSchema() {
|
|
27
|
+
return mockNotificationSchema;
|
|
28
|
+
}
|
|
29
|
+
;
|
|
30
|
+
getRecipientSchema() {
|
|
31
|
+
return recipientSchema;
|
|
32
|
+
}
|
|
33
|
+
;
|
|
34
|
+
getContentSchema() {
|
|
35
|
+
return contentSchema;
|
|
36
|
+
}
|
|
37
|
+
getRateLimitConfig() {
|
|
38
|
+
const options = this.config?.options;
|
|
39
|
+
const rateLimit = options?.rateLimit;
|
|
40
|
+
return {
|
|
41
|
+
maxTokens: rateLimit?.maxTokens || 100,
|
|
42
|
+
refillRate: rateLimit?.refillRate || 10,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
async initialize(config) {
|
|
46
|
+
this.config = config;
|
|
47
|
+
}
|
|
48
|
+
async healthCheck() {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
async send(notification) {
|
|
52
|
+
try {
|
|
53
|
+
console.log('Sending mock notification:', notification);
|
|
54
|
+
console.log('Mock notification');
|
|
55
|
+
return {
|
|
56
|
+
success: true,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.error('Failed to send notification:', error);
|
|
61
|
+
return {
|
|
62
|
+
success: false,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async shutdown() {
|
|
67
|
+
console.log('Mock provider shutting down');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export default MockProvider;
|
|
71
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,CAAC,EAMD,sBAAsB,GACzB,MAAM,eAAe,CAAC;AAEvB,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,sBAAsB,CAAC,MAAM,CAAC;IACzD,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC1B,SAAS,EAAE,eAAe;IAC1B,OAAO,EAAE,aAAa;IACtB,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;CAC9B,CAAC,CAAC;AAIH,MAAM,YAAY;IAEN,MAAM,GAA0B,IAAI,CAAC;IAEpC,QAAQ,GAAqB;QAClC,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,MAAM;QACnB,WAAW,EAAE,qCAAqC;QAClD,MAAM,EAAE,kBAAkB;QAC1B,QAAQ,EAAE,yDAAyD;QACnE,mBAAmB,EAAE,EAAE;KAC1B,CAAC;IAEF,qBAAqB;QACjB,OAAO,sBAAsB,CAAC;IAClC,CAAC;IAAA,CAAC;IAEF,kBAAkB;QACd,OAAO,eAAe,CAAC;IAC3B,CAAC;IAAA,CAAC;IAEF,gBAAgB;QACZ,OAAO,aAAa,CAAC;IACzB,CAAC;IAED,kBAAkB;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,OAA8C,CAAC;QAC3E,MAAM,SAAS,GAAG,OAAO,EAAE,SAAoE,CAAC;QAEhG,OAAO;YACH,SAAS,EAAE,SAAS,EAAE,SAAS,IAAI,GAAG;YACtC,UAAU,EAAE,SAAS,EAAE,UAAU,IAAI,EAAE;SAC1C,CAAC;IACN,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAsB;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,WAAW;QACb,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,YAA8B;QACrC,IAAI,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,YAAY,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YACjC,OAAO;gBACH,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACrD,OAAO;gBACH,OAAO,EAAE,KAAK;aACjB,CAAC;QACN,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC/C,CAAC;CACJ;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
2
|
+
import MockProvider from './index.js';
|
|
3
|
+
// Helper to create a valid notification
|
|
4
|
+
const createValidNotification = (overrides = {}) => ({
|
|
5
|
+
notification_id: 'test-123',
|
|
6
|
+
request_id: '550e8400-e29b-41d4-a716-446655440000', // Valid UUID
|
|
7
|
+
client_id: '6ba7b810-9dad-11d1-80b4-00c04fd430c8', // Valid UUID
|
|
8
|
+
channel: 'mock',
|
|
9
|
+
webhook_url: 'https://example.com/webhook',
|
|
10
|
+
retry_count: 0,
|
|
11
|
+
recipient: { user_id: 'user-456' },
|
|
12
|
+
content: { message: 'Hello, World!' },
|
|
13
|
+
created_at: new Date(),
|
|
14
|
+
...overrides,
|
|
15
|
+
});
|
|
16
|
+
// Helper to create a valid provider config
|
|
17
|
+
const createProviderConfig = (overrides = {}) => {
|
|
18
|
+
return {
|
|
19
|
+
id: 'mock-provider',
|
|
20
|
+
credentials: {},
|
|
21
|
+
options: {},
|
|
22
|
+
...overrides,
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
describe('MockProvider', () => {
|
|
26
|
+
let provider;
|
|
27
|
+
beforeEach(() => {
|
|
28
|
+
provider = new MockProvider();
|
|
29
|
+
vi.clearAllMocks();
|
|
30
|
+
});
|
|
31
|
+
describe('manifest', () => {
|
|
32
|
+
it('should have correct manifest properties', () => {
|
|
33
|
+
expect(provider.manifest.name).toBe('simplens-plugin-mock');
|
|
34
|
+
expect(provider.manifest.version).toBe('1.0.0');
|
|
35
|
+
expect(provider.manifest.channel).toBe('mock');
|
|
36
|
+
expect(provider.manifest.displayName).toBe('Mock');
|
|
37
|
+
expect(provider.manifest.description).toBe('Send mock notifications for testing');
|
|
38
|
+
expect(provider.manifest.author).toBe('Adhish Krishna S');
|
|
39
|
+
expect(provider.manifest.homepage).toBe('https://github.com/SimpleNotificationSystem/plugin-mock');
|
|
40
|
+
expect(provider.manifest.requiredCredentials).toEqual([]);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('getNotificationSchema', () => {
|
|
44
|
+
it('should return a valid notification schema', () => {
|
|
45
|
+
const schema = provider.getNotificationSchema();
|
|
46
|
+
expect(schema).toBeDefined();
|
|
47
|
+
});
|
|
48
|
+
it('should validate a valid mock notification', () => {
|
|
49
|
+
const schema = provider.getNotificationSchema();
|
|
50
|
+
const validNotification = createValidNotification();
|
|
51
|
+
const result = schema.safeParse(validNotification);
|
|
52
|
+
expect(result.success).toBe(true);
|
|
53
|
+
});
|
|
54
|
+
it('should reject notification with wrong channel', () => {
|
|
55
|
+
const schema = provider.getNotificationSchema();
|
|
56
|
+
const invalidNotification = {
|
|
57
|
+
...createValidNotification(),
|
|
58
|
+
channel: 'email',
|
|
59
|
+
};
|
|
60
|
+
const result = schema.safeParse(invalidNotification);
|
|
61
|
+
expect(result.success).toBe(false);
|
|
62
|
+
});
|
|
63
|
+
it('should reject notification with missing recipient user_id', () => {
|
|
64
|
+
const schema = provider.getNotificationSchema();
|
|
65
|
+
const invalidNotification = {
|
|
66
|
+
...createValidNotification(),
|
|
67
|
+
recipient: {},
|
|
68
|
+
};
|
|
69
|
+
const result = schema.safeParse(invalidNotification);
|
|
70
|
+
expect(result.success).toBe(false);
|
|
71
|
+
});
|
|
72
|
+
it('should reject notification with missing content message', () => {
|
|
73
|
+
const schema = provider.getNotificationSchema();
|
|
74
|
+
const invalidNotification = {
|
|
75
|
+
...createValidNotification(),
|
|
76
|
+
content: {},
|
|
77
|
+
};
|
|
78
|
+
const result = schema.safeParse(invalidNotification);
|
|
79
|
+
expect(result.success).toBe(false);
|
|
80
|
+
});
|
|
81
|
+
it('should coerce string date to Date object', () => {
|
|
82
|
+
const schema = provider.getNotificationSchema();
|
|
83
|
+
const notification = {
|
|
84
|
+
...createValidNotification(),
|
|
85
|
+
created_at: '2025-12-21T09:00:00Z',
|
|
86
|
+
};
|
|
87
|
+
const result = schema.safeParse(notification);
|
|
88
|
+
expect(result.success).toBe(true);
|
|
89
|
+
if (result.success) {
|
|
90
|
+
expect(result.data.created_at).toBeInstanceOf(Date);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
it('should reject notification missing notification_id', () => {
|
|
94
|
+
const schema = provider.getNotificationSchema();
|
|
95
|
+
const { notification_id, ...invalidNotification } = createValidNotification();
|
|
96
|
+
const result = schema.safeParse(invalidNotification);
|
|
97
|
+
expect(result.success).toBe(false);
|
|
98
|
+
});
|
|
99
|
+
it('should reject notification missing request_id', () => {
|
|
100
|
+
const schema = provider.getNotificationSchema();
|
|
101
|
+
const { request_id, ...invalidNotification } = createValidNotification();
|
|
102
|
+
const result = schema.safeParse(invalidNotification);
|
|
103
|
+
expect(result.success).toBe(false);
|
|
104
|
+
});
|
|
105
|
+
it('should reject notification missing client_id', () => {
|
|
106
|
+
const schema = provider.getNotificationSchema();
|
|
107
|
+
const { client_id, ...invalidNotification } = createValidNotification();
|
|
108
|
+
const result = schema.safeParse(invalidNotification);
|
|
109
|
+
expect(result.success).toBe(false);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
describe('getRecipientSchema', () => {
|
|
113
|
+
it('should return a valid recipient schema', () => {
|
|
114
|
+
const schema = provider.getRecipientSchema();
|
|
115
|
+
expect(schema).toBeDefined();
|
|
116
|
+
});
|
|
117
|
+
it('should validate a valid recipient', () => {
|
|
118
|
+
const schema = provider.getRecipientSchema();
|
|
119
|
+
const validRecipient = { user_id: 'user-456' };
|
|
120
|
+
const result = schema.safeParse(validRecipient);
|
|
121
|
+
expect(result.success).toBe(true);
|
|
122
|
+
});
|
|
123
|
+
it('should reject recipient without user_id', () => {
|
|
124
|
+
const schema = provider.getRecipientSchema();
|
|
125
|
+
const invalidRecipient = {};
|
|
126
|
+
const result = schema.safeParse(invalidRecipient);
|
|
127
|
+
expect(result.success).toBe(false);
|
|
128
|
+
});
|
|
129
|
+
it('should reject recipient with non-string user_id', () => {
|
|
130
|
+
const schema = provider.getRecipientSchema();
|
|
131
|
+
const invalidRecipient = { user_id: 123 };
|
|
132
|
+
const result = schema.safeParse(invalidRecipient);
|
|
133
|
+
expect(result.success).toBe(false);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
describe('getContentSchema', () => {
|
|
137
|
+
it('should return a valid content schema', () => {
|
|
138
|
+
const schema = provider.getContentSchema();
|
|
139
|
+
expect(schema).toBeDefined();
|
|
140
|
+
});
|
|
141
|
+
it('should validate valid content', () => {
|
|
142
|
+
const schema = provider.getContentSchema();
|
|
143
|
+
const validContent = { message: 'Hello, World!' };
|
|
144
|
+
const result = schema.safeParse(validContent);
|
|
145
|
+
expect(result.success).toBe(true);
|
|
146
|
+
});
|
|
147
|
+
it('should reject content without message', () => {
|
|
148
|
+
const schema = provider.getContentSchema();
|
|
149
|
+
const invalidContent = {};
|
|
150
|
+
const result = schema.safeParse(invalidContent);
|
|
151
|
+
expect(result.success).toBe(false);
|
|
152
|
+
});
|
|
153
|
+
it('should reject content with non-string message', () => {
|
|
154
|
+
const schema = provider.getContentSchema();
|
|
155
|
+
const invalidContent = { message: 123 };
|
|
156
|
+
const result = schema.safeParse(invalidContent);
|
|
157
|
+
expect(result.success).toBe(false);
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
describe('getRateLimitConfig', () => {
|
|
161
|
+
it('should return default rate limit config when not initialized', () => {
|
|
162
|
+
const config = provider.getRateLimitConfig();
|
|
163
|
+
expect(config.maxTokens).toBe(100);
|
|
164
|
+
expect(config.refillRate).toBe(10);
|
|
165
|
+
});
|
|
166
|
+
it('should return default rate limit config when initialized without options', async () => {
|
|
167
|
+
await provider.initialize(createProviderConfig());
|
|
168
|
+
const config = provider.getRateLimitConfig();
|
|
169
|
+
expect(config.maxTokens).toBe(100);
|
|
170
|
+
expect(config.refillRate).toBe(10);
|
|
171
|
+
});
|
|
172
|
+
it('should return custom rate limit config when provided', async () => {
|
|
173
|
+
await provider.initialize(createProviderConfig({
|
|
174
|
+
options: {
|
|
175
|
+
rateLimit: {
|
|
176
|
+
maxTokens: 200,
|
|
177
|
+
refillRate: 20,
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
}));
|
|
181
|
+
const config = provider.getRateLimitConfig();
|
|
182
|
+
expect(config.maxTokens).toBe(200);
|
|
183
|
+
expect(config.refillRate).toBe(20);
|
|
184
|
+
});
|
|
185
|
+
it('should use defaults for missing rate limit options', async () => {
|
|
186
|
+
await provider.initialize(createProviderConfig({
|
|
187
|
+
options: {
|
|
188
|
+
rateLimit: {
|
|
189
|
+
maxTokens: 150,
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
}));
|
|
193
|
+
const config = provider.getRateLimitConfig();
|
|
194
|
+
expect(config.maxTokens).toBe(150);
|
|
195
|
+
expect(config.refillRate).toBe(10);
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
describe('initialize', () => {
|
|
199
|
+
it('should initialize successfully with config', async () => {
|
|
200
|
+
await expect(provider.initialize(createProviderConfig())).resolves.not.toThrow();
|
|
201
|
+
});
|
|
202
|
+
it('should store config for later use', async () => {
|
|
203
|
+
const config = createProviderConfig({
|
|
204
|
+
credentials: { apiKey: 'test-key' },
|
|
205
|
+
options: { rateLimit: { maxTokens: 50 } },
|
|
206
|
+
});
|
|
207
|
+
await provider.initialize(config);
|
|
208
|
+
const rateLimitConfig = provider.getRateLimitConfig();
|
|
209
|
+
expect(rateLimitConfig.maxTokens).toBe(50);
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
describe('healthCheck', () => {
|
|
213
|
+
it('should always return true', async () => {
|
|
214
|
+
const result = await provider.healthCheck();
|
|
215
|
+
expect(result).toBe(true);
|
|
216
|
+
});
|
|
217
|
+
it('should return true even before initialization', async () => {
|
|
218
|
+
const result = await provider.healthCheck();
|
|
219
|
+
expect(result).toBe(true);
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
describe('send', () => {
|
|
223
|
+
const validNotification = createValidNotification();
|
|
224
|
+
it('should successfully send a notification', async () => {
|
|
225
|
+
const result = await provider.send(validNotification);
|
|
226
|
+
expect(result.success).toBe(true);
|
|
227
|
+
});
|
|
228
|
+
it('should log the notification being sent', async () => {
|
|
229
|
+
const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
230
|
+
await provider.send(validNotification);
|
|
231
|
+
expect(consoleSpy).toHaveBeenCalledWith('Sending mock notification:', validNotification);
|
|
232
|
+
expect(consoleSpy).toHaveBeenCalledWith('Mock notification');
|
|
233
|
+
consoleSpy.mockRestore();
|
|
234
|
+
});
|
|
235
|
+
it('should work with different notification content', async () => {
|
|
236
|
+
const notification = createValidNotification({
|
|
237
|
+
content: { message: 'A different message' },
|
|
238
|
+
});
|
|
239
|
+
const result = await provider.send(notification);
|
|
240
|
+
expect(result.success).toBe(true);
|
|
241
|
+
});
|
|
242
|
+
it('should work with different recipient', async () => {
|
|
243
|
+
const notification = createValidNotification({
|
|
244
|
+
recipient: { user_id: 'another-user-789' },
|
|
245
|
+
});
|
|
246
|
+
const result = await provider.send(notification);
|
|
247
|
+
expect(result.success).toBe(true);
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
describe('shutdown', () => {
|
|
251
|
+
it('should shutdown successfully', async () => {
|
|
252
|
+
await expect(provider.shutdown()).resolves.not.toThrow();
|
|
253
|
+
});
|
|
254
|
+
it('should log shutdown message', async () => {
|
|
255
|
+
const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
256
|
+
await provider.shutdown();
|
|
257
|
+
expect(consoleSpy).toHaveBeenCalledWith('Mock provider shutting down');
|
|
258
|
+
consoleSpy.mockRestore();
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
describe('integration', () => {
|
|
262
|
+
it('should work through full lifecycle', async () => {
|
|
263
|
+
// Initialize
|
|
264
|
+
await provider.initialize(createProviderConfig({
|
|
265
|
+
credentials: { apiKey: 'test-key' },
|
|
266
|
+
options: { rateLimit: { maxTokens: 50, refillRate: 5 } },
|
|
267
|
+
}));
|
|
268
|
+
// Health check
|
|
269
|
+
const isHealthy = await provider.healthCheck();
|
|
270
|
+
expect(isHealthy).toBe(true);
|
|
271
|
+
// Validate and send notification
|
|
272
|
+
const notification = createValidNotification({
|
|
273
|
+
notification_id: 'lifecycle-test',
|
|
274
|
+
content: { message: 'Integration test message' },
|
|
275
|
+
});
|
|
276
|
+
const schema = provider.getNotificationSchema();
|
|
277
|
+
const validationResult = schema.safeParse(notification);
|
|
278
|
+
expect(validationResult.success).toBe(true);
|
|
279
|
+
const sendResult = await provider.send(notification);
|
|
280
|
+
expect(sendResult.success).toBe(true);
|
|
281
|
+
// Shutdown
|
|
282
|
+
await expect(provider.shutdown()).resolves.not.toThrow();
|
|
283
|
+
});
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
//# 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
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@simplens/mock",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Mock provider plugin for SimpleNS for testing",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"default": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"type": "module",
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"test": "vitest run",
|
|
18
|
+
"test:watch": "vitest",
|
|
19
|
+
"prepublishOnly": "npm run build"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"simplens",
|
|
23
|
+
"plugin",
|
|
24
|
+
"mock"
|
|
25
|
+
],
|
|
26
|
+
"author": "SimpleNS Team",
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@simplens/sdk": "^1.0.3"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@types/node": "^25.0.3",
|
|
33
|
+
"typescript": "^5.0.0",
|
|
34
|
+
"vitest": "^4.0.16"
|
|
35
|
+
},
|
|
36
|
+
"files": [
|
|
37
|
+
"dist",
|
|
38
|
+
"README.md"
|
|
39
|
+
],
|
|
40
|
+
"repository": {
|
|
41
|
+
"type": "git",
|
|
42
|
+
"url": "https://github.com/SimpleNotificationSystem/plugin-mock"
|
|
43
|
+
}
|
|
44
|
+
}
|