@nlabs/reaktor 0.10.6 → 0.10.7
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/package.json +12 -1
- package/.env +0 -1
- package/.env.example +0 -1
- package/DATABASE_I18N_GUIDE.md +0 -434
- package/TEST_UTILITIES_GUIDE.md +0 -360
- package/coverage/actions/groups.ts.html +0 -1039
- package/coverage/actions/images.ts.html +0 -2500
- package/coverage/actions/index.html +0 -116
- package/coverage/actions/notifications.ts.html +0 -223
- package/coverage/actions/posts.ts.html +0 -2356
- package/coverage/actions/tags.ts.html +0 -1000
- package/coverage/adapters/arangoAdapter.ts.html +0 -301
- package/coverage/adapters/fileAdapter.ts.html +0 -445
- package/coverage/adapters/index.html +0 -176
- package/coverage/adapters/postAdapter.ts.html +0 -436
- package/coverage/adapters/reaktorAdapter.ts.html +0 -310
- package/coverage/adapters/tagAdapter.ts.html +0 -409
- package/coverage/adapters/userAdapter.ts.html +0 -829
- package/coverage/analyticsUtils.ts.html +0 -286
- package/coverage/base.css +0 -224
- package/coverage/block-navigation.js +0 -87
- package/coverage/clover.xml +0 -6
- package/coverage/config.ts.html +0 -766
- package/coverage/coverage-final.json +0 -1
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +0 -221
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -101
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -196
- package/coverage/lcov.info +0 -0
- package/coverage/mocks/file.ts.html +0 -118
- package/coverage/mocks/group.ts.html +0 -145
- package/coverage/mocks/image.ts.html +0 -142
- package/coverage/mocks/index.html +0 -176
- package/coverage/mocks/post.ts.html +0 -169
- package/coverage/mocks/tag.ts.html +0 -121
- package/coverage/mocks/user.ts.html +0 -271
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -2
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -210
- package/coverage/testUtils.ts.html +0 -1309
- package/coverage/translationQueue.ts.html +0 -592
- package/coverage/types/error.ts.html +0 -145
- package/coverage/types/error.types.ts.html +0 -148
- package/coverage/types/index.html +0 -116
- package/coverage/utils/adapterUtils.ts.html +0 -163
- package/coverage/utils/analyticsUtils.ts.html +0 -286
- package/coverage/utils/arangodbUtils.ts.html +0 -463
- package/coverage/utils/authUtils.ts.html +0 -328
- package/coverage/utils/dbI18n.ts.html +0 -280
- package/coverage/utils/googleTranslate.ts.html +0 -385
- package/coverage/utils/index.html +0 -131
- package/coverage/utils/localeUtils.ts.html +0 -193
- package/coverage/utils/sessionUtils.ts.html +0 -211
- package/coverage/utils/testUtils.ts.html +0 -1309
- package/index.js +0 -5
- package/jpg:- +0 -0
- package/lex.config.mjs +0 -34
- package/tsconfig.build.json +0 -21
- package/tsconfig.lint.json +0 -33
- package/tsconfig.test.json +0 -31
package/TEST_UTILITIES_GUIDE.md
DELETED
|
@@ -1,360 +0,0 @@
|
|
|
1
|
-
# Test Utilities Guide
|
|
2
|
-
|
|
3
|
-
This guide explains how to use the test utilities in `src/utils/testUtils.ts` to optimize and consolidate your GraphQL query and mutation tests.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
The test utilities provide a standardized way to create tests for GraphQL resolvers, reducing code duplication and improving maintainability. They abstract common testing patterns into reusable functions.
|
|
8
|
-
|
|
9
|
-
## Available Utilities
|
|
10
|
-
|
|
11
|
-
### 1. Mock Context and Resolve Info
|
|
12
|
-
|
|
13
|
-
```typescript
|
|
14
|
-
import { createMockContext, createMockResolveInfo } from '../utils/testUtils';
|
|
15
|
-
|
|
16
|
-
// Create a standard mock context
|
|
17
|
-
const context = createMockContext();
|
|
18
|
-
|
|
19
|
-
// Create a custom context with overrides
|
|
20
|
-
const customContext = createMockContext({
|
|
21
|
-
databaseName: 'custom-db',
|
|
22
|
-
session: { userId: 'custom-user' }
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
// Create mock resolve info for GraphQL resolvers
|
|
26
|
-
const resolveInfo = createMockResolveInfo('fieldName');
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### 2. Mock Data Generators
|
|
30
|
-
|
|
31
|
-
```typescript
|
|
32
|
-
import {
|
|
33
|
-
createMockUser,
|
|
34
|
-
createMockPost,
|
|
35
|
-
createMockMessage,
|
|
36
|
-
createMockReaction,
|
|
37
|
-
createMockTag
|
|
38
|
-
} from '../utils/testUtils';
|
|
39
|
-
|
|
40
|
-
// Create mock data with defaults
|
|
41
|
-
const user = createMockUser();
|
|
42
|
-
const post = createMockPost();
|
|
43
|
-
|
|
44
|
-
// Create mock data with custom values
|
|
45
|
-
const customUser = createMockUser({
|
|
46
|
-
userId: 'custom-id',
|
|
47
|
-
email: 'custom@example.com'
|
|
48
|
-
});
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
### 3. Mock Setup Utilities
|
|
52
|
-
|
|
53
|
-
```typescript
|
|
54
|
-
import { mockActionsModule, mockObjectType, setupCommonMocks } from '../utils/testUtils';
|
|
55
|
-
|
|
56
|
-
// Mock actions module
|
|
57
|
-
mockActionsModule('../actions/users', {
|
|
58
|
-
getUser: jest.fn(),
|
|
59
|
-
getSessionUser: jest.fn()
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
// Mock object types
|
|
63
|
-
mockObjectType('../objectTypes/user', 'user');
|
|
64
|
-
|
|
65
|
-
// Setup common mocks (auth utils, etc.)
|
|
66
|
-
setupCommonMocks();
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
## Test Suite Creators
|
|
70
|
-
|
|
71
|
-
### 1. Query Test Suite
|
|
72
|
-
|
|
73
|
-
Use `createQueryTestSuite` for testing GraphQL query resolvers:
|
|
74
|
-
|
|
75
|
-
```typescript
|
|
76
|
-
import { createQueryTestSuite, createMockUser } from '../utils/testUtils';
|
|
77
|
-
|
|
78
|
-
// Mock dependencies
|
|
79
|
-
mockActionsModule('../actions/users', {
|
|
80
|
-
getUser: jest.fn(),
|
|
81
|
-
getSessionUser: jest.fn()
|
|
82
|
-
});
|
|
83
|
-
mockObjectType('../objectTypes/user', 'user');
|
|
84
|
-
|
|
85
|
-
// Define test cases
|
|
86
|
-
const testCases = [
|
|
87
|
-
{
|
|
88
|
-
name: 'getUserByEmail',
|
|
89
|
-
actionName: 'getUser',
|
|
90
|
-
args: { email: 'test@example.com' },
|
|
91
|
-
expectedCall: (context: any, args: any) => ({ email: args.email }),
|
|
92
|
-
mockReturnValue: createMockUser(),
|
|
93
|
-
errorCase: true
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
name: 'getUserById',
|
|
97
|
-
actionName: 'getUser',
|
|
98
|
-
args: { userId: 'user1' },
|
|
99
|
-
expectedCall: (context: any, args: any) => ({ userId: args.userId }),
|
|
100
|
-
mockReturnValue: createMockUser(),
|
|
101
|
-
errorCase: true
|
|
102
|
-
}
|
|
103
|
-
];
|
|
104
|
-
|
|
105
|
-
// Create the test suite
|
|
106
|
-
createQueryTestSuite(
|
|
107
|
-
'User Queries',
|
|
108
|
-
'../actions/users',
|
|
109
|
-
'../objectTypes/user',
|
|
110
|
-
'user',
|
|
111
|
-
testCases
|
|
112
|
-
);
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### 2. Mutation Test Suite
|
|
116
|
-
|
|
117
|
-
Use `createMutationTestSuite` for testing GraphQL mutation resolvers:
|
|
118
|
-
|
|
119
|
-
```typescript
|
|
120
|
-
import { createMutationTestSuite, createMockUser, setupCommonMocks } from '../utils/testUtils';
|
|
121
|
-
|
|
122
|
-
// Setup common mocks
|
|
123
|
-
setupCommonMocks();
|
|
124
|
-
|
|
125
|
-
// Mock mutations module (complex setup)
|
|
126
|
-
jest.mock('./users', () => ({
|
|
127
|
-
userMutations: {
|
|
128
|
-
getField: jest.fn((fieldName) => ({
|
|
129
|
-
resolve: jest.fn(async (context, args) => {
|
|
130
|
-
const actions = require('../actions/users');
|
|
131
|
-
return await actions[fieldName](context, args);
|
|
132
|
-
})
|
|
133
|
-
}))
|
|
134
|
-
}
|
|
135
|
-
}));
|
|
136
|
-
|
|
137
|
-
// Define test cases
|
|
138
|
-
const testCases = [
|
|
139
|
-
{
|
|
140
|
-
name: 'addUser',
|
|
141
|
-
actionName: 'addUser',
|
|
142
|
-
args: { username: 'testuser', email: 'test@example.com' },
|
|
143
|
-
expectedCall: (context: any, args: any) => args,
|
|
144
|
-
mockReturnValue: createMockUser()
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
name: 'deactivateUser',
|
|
148
|
-
actionName: 'deactivateUser',
|
|
149
|
-
args: { userId: 'user1' },
|
|
150
|
-
expectedCall: (context: any, args: any) => args,
|
|
151
|
-
mockReturnValue: createMockUser(),
|
|
152
|
-
requiresAuth: true,
|
|
153
|
-
authUserId: 'user1'
|
|
154
|
-
}
|
|
155
|
-
];
|
|
156
|
-
|
|
157
|
-
// Create the test suite
|
|
158
|
-
createMutationTestSuite(
|
|
159
|
-
'User',
|
|
160
|
-
'../actions/users',
|
|
161
|
-
'./users',
|
|
162
|
-
testCases
|
|
163
|
-
);
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
### 3. Integration Test Suite
|
|
167
|
-
|
|
168
|
-
Use `createIntegrationTestSuite` for testing integration scenarios:
|
|
169
|
-
|
|
170
|
-
```typescript
|
|
171
|
-
import { createIntegrationTestSuite, createMockUser } from '../utils/testUtils';
|
|
172
|
-
|
|
173
|
-
// Define test cases
|
|
174
|
-
const testCases = [
|
|
175
|
-
{
|
|
176
|
-
name: 'getUserByEmail',
|
|
177
|
-
actionName: 'getUser',
|
|
178
|
-
args: { email: 'test@example.com' },
|
|
179
|
-
expectedCall: (context: any, args: any) => ({ email: args.email }),
|
|
180
|
-
successReturnValue: createMockUser(),
|
|
181
|
-
errorReturnValue: null,
|
|
182
|
-
testErrorCase: true
|
|
183
|
-
}
|
|
184
|
-
];
|
|
185
|
-
|
|
186
|
-
// Create the integration test suite
|
|
187
|
-
createIntegrationTestSuite(
|
|
188
|
-
'User',
|
|
189
|
-
'../actions/users',
|
|
190
|
-
'../objectTypes/user',
|
|
191
|
-
'user',
|
|
192
|
-
testCases
|
|
193
|
-
);
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
## Test Case Configuration
|
|
197
|
-
|
|
198
|
-
### Query Test Cases
|
|
199
|
-
|
|
200
|
-
```typescript
|
|
201
|
-
{
|
|
202
|
-
name: string; // Test name
|
|
203
|
-
actionName: string; // Action function name
|
|
204
|
-
args: any; // Arguments to pass
|
|
205
|
-
expectedCall: (context: any, args: any) => any; // Expected call parameters
|
|
206
|
-
mockReturnValue?: any; // Mock return value
|
|
207
|
-
errorCase?: boolean; // Whether to test error handling
|
|
208
|
-
}
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
### Mutation Test Cases
|
|
212
|
-
|
|
213
|
-
```typescript
|
|
214
|
-
{
|
|
215
|
-
name: string; // Test name
|
|
216
|
-
actionName: string; // Action function name
|
|
217
|
-
args: any; // Arguments to pass
|
|
218
|
-
expectedCall: (context: any, args: any) => any; // Expected call parameters
|
|
219
|
-
mockReturnValue?: any; // Mock return value
|
|
220
|
-
requiresAuth?: boolean; // Whether authentication is required
|
|
221
|
-
authUserId?: string; // User ID for auth check
|
|
222
|
-
errorCase?: boolean; // Whether to test error handling
|
|
223
|
-
}
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
### Integration Test Cases
|
|
227
|
-
|
|
228
|
-
```typescript
|
|
229
|
-
{
|
|
230
|
-
name: string; // Test name
|
|
231
|
-
actionName: string; // Action function name
|
|
232
|
-
args: any; // Arguments to pass
|
|
233
|
-
expectedCall: (context: any, args: any) => any; // Expected call parameters
|
|
234
|
-
successReturnValue?: any; // Success case return value
|
|
235
|
-
errorReturnValue?: any; // Error case return value
|
|
236
|
-
testErrorCase?: boolean; // Whether to test error scenarios
|
|
237
|
-
}
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
## Migration Guide
|
|
241
|
-
|
|
242
|
-
### From Manual Tests to Utilities
|
|
243
|
-
|
|
244
|
-
**Before (Manual):**
|
|
245
|
-
```typescript
|
|
246
|
-
describe('User Queries', () => {
|
|
247
|
-
const mockContext = {
|
|
248
|
-
databaseName: 'test',
|
|
249
|
-
session: { userId: 'user1', username: 'testuser', userAccess: 1 }
|
|
250
|
-
};
|
|
251
|
-
|
|
252
|
-
beforeEach(() => {
|
|
253
|
-
jest.clearAllMocks();
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
describe('getUserByEmail', () => {
|
|
257
|
-
it('should call getUser action with email parameter', async () => {
|
|
258
|
-
const mockUser = { userId: 'user1', email: 'test@example.com' };
|
|
259
|
-
const { getUser } = require('../actions/users');
|
|
260
|
-
getUser.mockResolvedValue(mockUser);
|
|
261
|
-
|
|
262
|
-
const result = await getUser(mockContext, { email: 'test@example.com' });
|
|
263
|
-
|
|
264
|
-
expect(getUser).toHaveBeenCalledWith(mockContext, { email: 'test@example.com' });
|
|
265
|
-
expect(result).toEqual(mockUser);
|
|
266
|
-
});
|
|
267
|
-
});
|
|
268
|
-
});
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
**After (Using Utilities):**
|
|
272
|
-
```typescript
|
|
273
|
-
import { createQueryTestSuite, createMockUser } from '../utils/testUtils';
|
|
274
|
-
|
|
275
|
-
const testCases = [
|
|
276
|
-
{
|
|
277
|
-
name: 'getUserByEmail',
|
|
278
|
-
actionName: 'getUser',
|
|
279
|
-
args: { email: 'test@example.com' },
|
|
280
|
-
expectedCall: (context: any, args: any) => ({ email: args.email }),
|
|
281
|
-
mockReturnValue: createMockUser()
|
|
282
|
-
}
|
|
283
|
-
];
|
|
284
|
-
|
|
285
|
-
createQueryTestSuite('User Queries', '../actions/users', '../objectTypes/user', 'user', testCases);
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
## Benefits
|
|
289
|
-
|
|
290
|
-
1. **Reduced Code Duplication**: Common test patterns are abstracted into reusable functions
|
|
291
|
-
2. **Consistent Testing**: All tests follow the same structure and patterns
|
|
292
|
-
3. **Easier Maintenance**: Changes to test patterns only need to be made in one place
|
|
293
|
-
4. **Better Readability**: Test intentions are clearer with declarative test case definitions
|
|
294
|
-
5. **Faster Development**: New tests can be created quickly by defining test cases
|
|
295
|
-
|
|
296
|
-
## Best Practices
|
|
297
|
-
|
|
298
|
-
1. **Use Descriptive Names**: Make test case names clear and descriptive
|
|
299
|
-
2. **Group Related Tests**: Use the suite name to group related functionality
|
|
300
|
-
3. **Test Both Success and Error Cases**: Include error handling tests where appropriate
|
|
301
|
-
4. **Use Mock Data Generators**: Use the provided mock data generators for consistent test data
|
|
302
|
-
5. **Keep Test Cases Focused**: Each test case should test one specific scenario
|
|
303
|
-
|
|
304
|
-
## Example: Complete Optimized Test File
|
|
305
|
-
|
|
306
|
-
```typescript
|
|
307
|
-
import {
|
|
308
|
-
createQueryTestSuite,
|
|
309
|
-
createMockUser,
|
|
310
|
-
mockActionsModule,
|
|
311
|
-
mockObjectType
|
|
312
|
-
} from '../utils/testUtils';
|
|
313
|
-
|
|
314
|
-
// Mock dependencies
|
|
315
|
-
mockActionsModule('../actions/users', {
|
|
316
|
-
getUser: jest.fn(),
|
|
317
|
-
getSessionUser: jest.fn()
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
mockObjectType('../objectTypes/user', 'user');
|
|
321
|
-
|
|
322
|
-
// Define test cases
|
|
323
|
-
const userQueryTestCases = [
|
|
324
|
-
{
|
|
325
|
-
name: 'getUserByEmail',
|
|
326
|
-
actionName: 'getUser',
|
|
327
|
-
args: { email: 'test@example.com' },
|
|
328
|
-
expectedCall: (context: any, args: any) => ({ email: args.email }),
|
|
329
|
-
mockReturnValue: createMockUser(),
|
|
330
|
-
errorCase: true
|
|
331
|
-
},
|
|
332
|
-
{
|
|
333
|
-
name: 'getUserById',
|
|
334
|
-
actionName: 'getUser',
|
|
335
|
-
args: { userId: 'user1' },
|
|
336
|
-
expectedCall: (context: any, args: any) => ({ userId: args.userId }),
|
|
337
|
-
mockReturnValue: createMockUser(),
|
|
338
|
-
errorCase: true
|
|
339
|
-
},
|
|
340
|
-
{
|
|
341
|
-
name: 'getUserBySession',
|
|
342
|
-
actionName: 'getSessionUser',
|
|
343
|
-
args: {},
|
|
344
|
-
expectedCall: (context: any, args: any) => ({}),
|
|
345
|
-
mockReturnValue: createMockUser(),
|
|
346
|
-
errorCase: true
|
|
347
|
-
}
|
|
348
|
-
];
|
|
349
|
-
|
|
350
|
-
// Create the test suite
|
|
351
|
-
createQueryTestSuite(
|
|
352
|
-
'User Queries',
|
|
353
|
-
'../actions/users',
|
|
354
|
-
'../objectTypes/user',
|
|
355
|
-
'user',
|
|
356
|
-
userQueryTestCases
|
|
357
|
-
);
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
This approach reduces the original 130-line test file to just 40 lines while maintaining the same test coverage and functionality.
|