@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.
Files changed (67) hide show
  1. package/package.json +12 -1
  2. package/.env +0 -1
  3. package/.env.example +0 -1
  4. package/DATABASE_I18N_GUIDE.md +0 -434
  5. package/TEST_UTILITIES_GUIDE.md +0 -360
  6. package/coverage/actions/groups.ts.html +0 -1039
  7. package/coverage/actions/images.ts.html +0 -2500
  8. package/coverage/actions/index.html +0 -116
  9. package/coverage/actions/notifications.ts.html +0 -223
  10. package/coverage/actions/posts.ts.html +0 -2356
  11. package/coverage/actions/tags.ts.html +0 -1000
  12. package/coverage/adapters/arangoAdapter.ts.html +0 -301
  13. package/coverage/adapters/fileAdapter.ts.html +0 -445
  14. package/coverage/adapters/index.html +0 -176
  15. package/coverage/adapters/postAdapter.ts.html +0 -436
  16. package/coverage/adapters/reaktorAdapter.ts.html +0 -310
  17. package/coverage/adapters/tagAdapter.ts.html +0 -409
  18. package/coverage/adapters/userAdapter.ts.html +0 -829
  19. package/coverage/analyticsUtils.ts.html +0 -286
  20. package/coverage/base.css +0 -224
  21. package/coverage/block-navigation.js +0 -87
  22. package/coverage/clover.xml +0 -6
  23. package/coverage/config.ts.html +0 -766
  24. package/coverage/coverage-final.json +0 -1
  25. package/coverage/favicon.png +0 -0
  26. package/coverage/index.html +0 -221
  27. package/coverage/lcov-report/base.css +0 -224
  28. package/coverage/lcov-report/block-navigation.js +0 -87
  29. package/coverage/lcov-report/favicon.png +0 -0
  30. package/coverage/lcov-report/index.html +0 -101
  31. package/coverage/lcov-report/prettify.css +0 -1
  32. package/coverage/lcov-report/prettify.js +0 -2
  33. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  34. package/coverage/lcov-report/sorter.js +0 -196
  35. package/coverage/lcov.info +0 -0
  36. package/coverage/mocks/file.ts.html +0 -118
  37. package/coverage/mocks/group.ts.html +0 -145
  38. package/coverage/mocks/image.ts.html +0 -142
  39. package/coverage/mocks/index.html +0 -176
  40. package/coverage/mocks/post.ts.html +0 -169
  41. package/coverage/mocks/tag.ts.html +0 -121
  42. package/coverage/mocks/user.ts.html +0 -271
  43. package/coverage/prettify.css +0 -1
  44. package/coverage/prettify.js +0 -2
  45. package/coverage/sort-arrow-sprite.png +0 -0
  46. package/coverage/sorter.js +0 -210
  47. package/coverage/testUtils.ts.html +0 -1309
  48. package/coverage/translationQueue.ts.html +0 -592
  49. package/coverage/types/error.ts.html +0 -145
  50. package/coverage/types/error.types.ts.html +0 -148
  51. package/coverage/types/index.html +0 -116
  52. package/coverage/utils/adapterUtils.ts.html +0 -163
  53. package/coverage/utils/analyticsUtils.ts.html +0 -286
  54. package/coverage/utils/arangodbUtils.ts.html +0 -463
  55. package/coverage/utils/authUtils.ts.html +0 -328
  56. package/coverage/utils/dbI18n.ts.html +0 -280
  57. package/coverage/utils/googleTranslate.ts.html +0 -385
  58. package/coverage/utils/index.html +0 -131
  59. package/coverage/utils/localeUtils.ts.html +0 -193
  60. package/coverage/utils/sessionUtils.ts.html +0 -211
  61. package/coverage/utils/testUtils.ts.html +0 -1309
  62. package/index.js +0 -5
  63. package/jpg:- +0 -0
  64. package/lex.config.mjs +0 -34
  65. package/tsconfig.build.json +0 -21
  66. package/tsconfig.lint.json +0 -33
  67. package/tsconfig.test.json +0 -31
@@ -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.