@pasosdejesus/m 0.25.0 → 0.27.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.
Files changed (155) hide show
  1. package/dist/CHANGELOG.md +85 -0
  2. package/dist/base-model/baseline.generated.d.ts +48 -0
  3. package/dist/base-model/baseline.generated.d.ts.map +1 -0
  4. package/dist/base-model/baseline.generated.js +930 -0
  5. package/dist/base-model/baseline.generated.js.map +1 -0
  6. package/dist/base-model/check.d.ts +6 -0
  7. package/dist/base-model/check.d.ts.map +1 -0
  8. package/dist/base-model/check.js +195 -0
  9. package/dist/base-model/check.js.map +1 -0
  10. package/dist/base-model/forward/baseline_1_0_0.d.ts +3 -0
  11. package/dist/base-model/forward/baseline_1_0_0.d.ts.map +1 -0
  12. package/dist/base-model/forward/baseline_1_0_0.js +23 -0
  13. package/dist/base-model/forward/baseline_1_0_0.js.map +1 -0
  14. package/dist/base-model/forward/index.d.ts +28 -0
  15. package/dist/base-model/forward/index.d.ts.map +1 -0
  16. package/dist/base-model/forward/index.js +126 -0
  17. package/dist/base-model/forward/index.js.map +1 -0
  18. package/dist/base-model/forward/index.test.d.ts +2 -0
  19. package/dist/base-model/forward/index.test.d.ts.map +1 -0
  20. package/dist/base-model/forward/index.test.js +65 -0
  21. package/dist/base-model/forward/index.test.js.map +1 -0
  22. package/dist/base-model/forward/policy.d.ts +16 -0
  23. package/dist/base-model/forward/policy.d.ts.map +1 -0
  24. package/dist/base-model/forward/policy.js +37 -0
  25. package/dist/base-model/forward/policy.js.map +1 -0
  26. package/dist/base-model/forward/policy.test.d.ts +2 -0
  27. package/dist/base-model/forward/policy.test.d.ts.map +1 -0
  28. package/dist/base-model/forward/policy.test.js +40 -0
  29. package/dist/base-model/forward/policy.test.js.map +1 -0
  30. package/dist/base-model/forward/types.d.ts +21 -0
  31. package/dist/base-model/forward/types.d.ts.map +1 -0
  32. package/dist/base-model/forward/types.js +2 -0
  33. package/dist/base-model/forward/types.js.map +1 -0
  34. package/dist/base-model/generate.d.ts +42 -0
  35. package/dist/base-model/generate.d.ts.map +1 -0
  36. package/dist/base-model/generate.js +241 -0
  37. package/dist/base-model/generate.js.map +1 -0
  38. package/dist/base-model/guidelines.d.ts +13 -0
  39. package/dist/base-model/guidelines.d.ts.map +1 -0
  40. package/dist/base-model/guidelines.js +61 -0
  41. package/dist/base-model/guidelines.js.map +1 -0
  42. package/dist/base-model/index.d.ts +24 -0
  43. package/dist/base-model/index.d.ts.map +1 -0
  44. package/dist/base-model/index.js +29 -0
  45. package/dist/base-model/index.js.map +1 -0
  46. package/dist/base-model/parse-structure.d.ts +4 -0
  47. package/dist/base-model/parse-structure.d.ts.map +1 -0
  48. package/dist/base-model/parse-structure.js +170 -0
  49. package/dist/base-model/parse-structure.js.map +1 -0
  50. package/dist/base-model/queries.d.ts +34 -0
  51. package/dist/base-model/queries.d.ts.map +1 -0
  52. package/dist/base-model/queries.js +118 -0
  53. package/dist/base-model/queries.js.map +1 -0
  54. package/dist/base-model/references/learn-tg.d.ts +21 -0
  55. package/dist/base-model/references/learn-tg.d.ts.map +1 -0
  56. package/dist/base-model/references/learn-tg.js +65 -0
  57. package/dist/base-model/references/learn-tg.js.map +1 -0
  58. package/dist/base-model/references/msip.d.ts +29 -0
  59. package/dist/base-model/references/msip.d.ts.map +1 -0
  60. package/dist/base-model/references/msip.js +33 -0
  61. package/dist/base-model/references/msip.js.map +1 -0
  62. package/dist/base-model/types.d.ts +207 -0
  63. package/dist/base-model/types.d.ts.map +1 -0
  64. package/dist/base-model/types.js +10 -0
  65. package/dist/base-model/types.js.map +1 -0
  66. package/dist/base-model/version.d.ts +19 -0
  67. package/dist/base-model/version.d.ts.map +1 -0
  68. package/dist/base-model/version.js +26 -0
  69. package/dist/base-model/version.js.map +1 -0
  70. package/dist/base-model/wallet-link.d.ts +69 -0
  71. package/dist/base-model/wallet-link.d.ts.map +1 -0
  72. package/dist/base-model/wallet-link.js +220 -0
  73. package/dist/base-model/wallet-link.js.map +1 -0
  74. package/dist/base-model/wallet-link.test.d.ts +2 -0
  75. package/dist/base-model/wallet-link.test.d.ts.map +1 -0
  76. package/dist/base-model/wallet-link.test.js +147 -0
  77. package/dist/base-model/wallet-link.test.js.map +1 -0
  78. package/dist/e2e/full-wallet.d.ts +19 -0
  79. package/dist/e2e/full-wallet.d.ts.map +1 -1
  80. package/dist/e2e/full-wallet.js +12 -4
  81. package/dist/e2e/full-wallet.js.map +1 -1
  82. package/dist/e2e/full-wallet.test.js +26 -0
  83. package/dist/e2e/full-wallet.test.js.map +1 -1
  84. package/dist/e2e/in-app-wallet.d.ts +23 -0
  85. package/dist/e2e/in-app-wallet.d.ts.map +1 -0
  86. package/dist/e2e/in-app-wallet.js +40 -0
  87. package/dist/e2e/in-app-wallet.js.map +1 -0
  88. package/dist/e2e/in-app-wallet.test.d.ts +2 -0
  89. package/dist/e2e/in-app-wallet.test.d.ts.map +1 -0
  90. package/dist/e2e/in-app-wallet.test.js +52 -0
  91. package/dist/e2e/in-app-wallet.test.js.map +1 -0
  92. package/dist/e2e/index.d.ts +5 -1
  93. package/dist/e2e/index.d.ts.map +1 -1
  94. package/dist/e2e/index.js +2 -0
  95. package/dist/e2e/index.js.map +1 -1
  96. package/dist/e2e/siwe-optional.test.d.ts +2 -0
  97. package/dist/e2e/siwe-optional.test.d.ts.map +1 -0
  98. package/dist/e2e/siwe-optional.test.js +13 -0
  99. package/dist/e2e/siwe-optional.test.js.map +1 -0
  100. package/dist/e2e/siwe.d.ts.map +1 -1
  101. package/dist/e2e/siwe.js +1 -3
  102. package/dist/e2e/siwe.js.map +1 -1
  103. package/dist/e2e/warmup.d.ts +38 -0
  104. package/dist/e2e/warmup.d.ts.map +1 -0
  105. package/dist/e2e/warmup.js +84 -0
  106. package/dist/e2e/warmup.js.map +1 -0
  107. package/dist/e2e/warmup.test.d.ts +2 -0
  108. package/dist/e2e/warmup.test.d.ts.map +1 -0
  109. package/dist/e2e/warmup.test.js +67 -0
  110. package/dist/e2e/warmup.test.js.map +1 -0
  111. package/dist/i18n/locales/cli.d.ts.map +1 -1
  112. package/dist/i18n/locales/cli.js +10 -0
  113. package/dist/i18n/locales/cli.js.map +1 -1
  114. package/dist/m.js +14 -1
  115. package/dist/m.js.map +1 -1
  116. package/dist/tasks/base-model.d.ts +5 -0
  117. package/dist/tasks/base-model.d.ts.map +1 -0
  118. package/dist/tasks/base-model.js +310 -0
  119. package/dist/tasks/base-model.js.map +1 -0
  120. package/dist/tasks/db.d.ts.map +1 -1
  121. package/dist/tasks/db.js +27 -0
  122. package/dist/tasks/db.js.map +1 -1
  123. package/dist/tasks/warmup.d.ts +4 -0
  124. package/dist/tasks/warmup.d.ts.map +1 -0
  125. package/dist/tasks/warmup.js +67 -0
  126. package/dist/tasks/warmup.js.map +1 -0
  127. package/dist/tasks/warmup.test.d.ts +2 -0
  128. package/dist/tasks/warmup.test.d.ts.map +1 -0
  129. package/dist/tasks/warmup.test.js +40 -0
  130. package/dist/tasks/warmup.test.js.map +1 -0
  131. package/dist/templates/apps/nextjs/package.json.hbs +1 -1
  132. package/dist/test-utils/console.d.ts +37 -0
  133. package/dist/test-utils/console.d.ts.map +1 -0
  134. package/dist/test-utils/console.js +65 -0
  135. package/dist/test-utils/console.js.map +1 -0
  136. package/dist/test-utils/console.test.d.ts +2 -0
  137. package/dist/test-utils/console.test.d.ts.map +1 -0
  138. package/dist/test-utils/console.test.js +70 -0
  139. package/dist/test-utils/console.test.js.map +1 -0
  140. package/dist/test-utils/index.d.ts +1 -0
  141. package/dist/test-utils/index.d.ts.map +1 -1
  142. package/dist/test-utils/index.js +1 -0
  143. package/dist/test-utils/index.js.map +1 -1
  144. package/dist/test-utils/kysely-mocks.d.ts +244 -103
  145. package/dist/test-utils/kysely-mocks.d.ts.map +1 -1
  146. package/dist/test-utils/kysely-mocks.js +161 -18
  147. package/dist/test-utils/kysely-mocks.js.map +1 -1
  148. package/dist/test-utils/kysely-mocks.test.d.ts +2 -0
  149. package/dist/test-utils/kysely-mocks.test.d.ts.map +1 -0
  150. package/dist/test-utils/kysely-mocks.test.js +110 -0
  151. package/dist/test-utils/kysely-mocks.test.js.map +1 -0
  152. package/package.json +5 -1
  153. package/src/e2e/README.md +42 -0
  154. package/src/tasks/README.md +1 -0
  155. package/src/test-utils/README.md +28 -0
@@ -2,42 +2,166 @@
2
2
  * Database mocking utilities for tests
3
3
  *
4
4
  * "Y todo lo que hagáis, hacedlo de corazón, como para el Señor y no para los hombres" (Colosenses 3:23)
5
+ *
6
+ * U1 of `m/REQ/49`: the builder covers what real API routes use (measured in
7
+ * `sivel3/app/api` and learn.tg): `eb.or`/`eb.and`, `eb('col', 'in', cb)`,
8
+ * `where(sql`…`)`, a subquery used as a table (`db.selectFrom(base.as('lb'))`),
9
+ * `having`, `with`, `onConflict`/`doNothing`, `transaction().execute(cb)`,
10
+ * `getExecutor()`, `fn.countAll/sum/avg/max/min`, and the `sql` tag with
11
+ * `raw`/`ref`/`val`/`join`/`literal`.
5
12
  */
6
13
  import { vi } from 'vitest';
14
+ /**
15
+ * Creates a mock of Kysely's `sql` tag. The returned value is both callable
16
+ * (`sql`\`count(*) = ${x}\``) and carries the helpers real code uses
17
+ * (`sql.raw`, `sql.ref`, `sql.val`, `sql.join`, `sql.literal`).
18
+ */
19
+ export function createMockSql() {
20
+ const tag = vi.fn((strings, ...values) => {
21
+ const text = Array.isArray(strings)
22
+ ? strings.map((s, i) => s + (i < values.length ? '?' : '')).join('')
23
+ : String(strings);
24
+ return {
25
+ __sql: text,
26
+ parameters: values,
27
+ as: vi.fn(() => ({ __sql: text })),
28
+ execute: vi.fn(() => Promise.resolve({ rows: [] })),
29
+ };
30
+ });
31
+ tag.raw = vi.fn((value) => ({ __sql: value }));
32
+ tag.ref = vi.fn((value) => ({ __sql: value }));
33
+ tag.val = vi.fn((value) => value);
34
+ tag.literal = vi.fn((value) => ({ __sql: value }));
35
+ tag.join = vi.fn((parts) => ({
36
+ __sql: parts.map((p) => p?.__sql ?? String(p)).join(' '),
37
+ }));
38
+ tag.id = vi.fn((value) => ({ __sql: value }));
39
+ tag.table = vi.fn((value) => ({ __sql: value }));
40
+ return tag;
41
+ }
42
+ /**
43
+ * Creates a mock of Kysely's `ExpressionBuilder` (`eb`). Supports the call
44
+ * forms real routes use: `eb('col', 'in', cb)` (invokes `cb` with the builder)
45
+ * and the combinators `and`/`or`/`not`/`exists`/`case`.
46
+ */
47
+ export function createExpressionBuilder() {
48
+ const eb = vi.fn((lhs, op, rhs) => {
49
+ if (typeof op === 'function')
50
+ op(eb);
51
+ else if (typeof rhs === 'function')
52
+ rhs(eb);
53
+ return { __expr: true, lhs, op, rhs };
54
+ });
55
+ eb.and = vi.fn((exprs) => ({ __expr: 'and', exprs }));
56
+ eb.or = vi.fn((exprs) => ({ __expr: 'or', exprs }));
57
+ eb.not = vi.fn((expr) => ({ __expr: 'not', expr }));
58
+ eb.exists = vi.fn((arg) => {
59
+ if (typeof arg === 'function')
60
+ arg(eb);
61
+ return { __expr: 'exists' };
62
+ });
63
+ eb.case = vi.fn(() => ({
64
+ when: vi.fn().mockReturnThis(),
65
+ then: vi.fn().mockReturnThis(),
66
+ otherwise: vi.fn().mockReturnThis(),
67
+ end: vi.fn(() => ({ __expr: true })),
68
+ }));
69
+ return eb;
70
+ }
71
+ function makeFn() {
72
+ const col = () => ({ as: vi.fn(() => ({})) });
73
+ return {
74
+ countAll: vi.fn(col),
75
+ count: vi.fn(col),
76
+ sum: vi.fn(col),
77
+ avg: vi.fn(col),
78
+ max: vi.fn(col),
79
+ min: vi.fn(col),
80
+ };
81
+ }
82
+ function makeOnConflict() {
83
+ const oc = {
84
+ column: vi.fn().mockReturnThis(),
85
+ columns: vi.fn().mockReturnThis(),
86
+ constraint: vi.fn().mockReturnThis(),
87
+ where: vi.fn().mockReturnThis(),
88
+ doNothing: vi.fn().mockReturnThis(),
89
+ doUpdateSet: vi.fn().mockReturnThis(),
90
+ };
91
+ return oc;
92
+ }
7
93
  /**
8
94
  * Mock Kysely class for use in vi.mock() factories and direct instantiation.
9
95
  *
10
96
  * ```typescript
11
- * import { MockKysely } from '@pasosdejesus/m/test-utils/kysely-mocks'
12
- * vi.mock('kysely', () => ({ Kysely: MockKysely }))
97
+ * import { MockKysely, createMockSql, createExpressionBuilder } from '@pasosdejesus/m/test-utils/kysely-mocks'
98
+ * vi.mock('kysely', () => ({ Kysely: MockKysely, sql: createMockSql(), ... }))
13
99
  * ```
14
100
  */
15
101
  export class MockKysely {
16
102
  _executeTakeFirst;
17
103
  _execute;
18
104
  _sqlExecute;
105
+ _eb;
106
+ _sql;
19
107
  constructor(options) {
20
108
  this._executeTakeFirst = options?.executeTakeFirst ?? (() => undefined);
21
109
  this._execute = options?.execute ?? (() => undefined);
22
110
  this._sqlExecute = options?.sqlExecute ?? (() => ({ rows: [] }));
111
+ this._eb = options?.eb ?? createExpressionBuilder();
112
+ this._sql = options?.sql ?? createMockSql();
23
113
  }
24
114
  selectFrom() { return this; }
25
- where() { return this; }
115
+ selectNoFrom() { return this; }
116
+ /** Accepts `(column, op, value)`, a callback, or a prebuilt expression. */
117
+ where(...args) {
118
+ if (args.length === 1 && typeof args[0] === 'function')
119
+ args[0](this._eb);
120
+ return this;
121
+ }
122
+ having(...args) {
123
+ if (args.length === 1 && typeof args[0] === 'function')
124
+ args[0](this._eb);
125
+ return this;
126
+ }
127
+ select(...args) {
128
+ for (const arg of args) {
129
+ if (typeof arg === 'function')
130
+ arg({ fn: this.fn, eb: this._eb, sql: this._sql });
131
+ }
132
+ return this;
133
+ }
26
134
  selectAll() { return this; }
27
- select(...args) { return this; }
135
+ distinct() { return this; }
136
+ distinctOn() { return this; }
28
137
  orderBy() { return this; }
29
138
  limit() { return this; }
139
+ offset() { return this; }
30
140
  groupBy() { return this; }
31
- having() { return this; }
32
141
  leftJoin() { return this; }
142
+ rightJoin() { return this; }
33
143
  innerJoin() { return this; }
144
+ fullJoin() { return this; }
34
145
  insertInto() { return this; }
35
146
  values() { return this; }
36
147
  returningAll() { return this; }
148
+ returning() { return this; }
37
149
  updateTable() { return this; }
38
150
  set() { return this; }
39
151
  deleteFrom() { return this; }
40
152
  with() { return this; }
153
+ withRecursive() { return this; }
154
+ union() { return this; }
155
+ unionAll() { return this; }
156
+ /** A subquery used as a table: `db.selectFrom(base.as('lb'))`. */
157
+ as() { return this; }
158
+ onConflict(...args) {
159
+ if (typeof args[0] === 'function')
160
+ args[0](makeOnConflict());
161
+ return this;
162
+ }
163
+ doNothing() { return this; }
164
+ doUpdateSet() { return this; }
41
165
  transaction() {
42
166
  return {
43
167
  execute: async (callback) => {
@@ -45,6 +169,8 @@ export class MockKysely {
45
169
  executeTakeFirst: this._executeTakeFirst,
46
170
  execute: this._execute,
47
171
  sqlExecute: this._sqlExecute,
172
+ eb: this._eb,
173
+ sql: this._sql,
48
174
  });
49
175
  return callback(mockTrx);
50
176
  }
@@ -53,6 +179,7 @@ export class MockKysely {
53
179
  executeTakeFirst() { return this._executeTakeFirst(); }
54
180
  executeTakeFirstOrThrow() { return this._executeTakeFirst(); }
55
181
  execute() { return this._execute(); }
182
+ compile() { return { sql: '', parameters: [] }; }
56
183
  getExecutor() {
57
184
  return {
58
185
  executeQuery: (query) => this._sqlExecute(query),
@@ -62,13 +189,20 @@ export class MockKysely {
62
189
  compileQuery: (query, ctx) => ({ sql: '', parameters: [] }),
63
190
  };
64
191
  }
65
- fn = {
66
- countAll: vi.fn(() => ({ as: vi.fn(() => ({})) })),
67
- sum: vi.fn(() => ({ as: vi.fn(() => ({})) })),
68
- avg: vi.fn(() => ({ as: vi.fn(() => ({})) })),
69
- max: vi.fn(() => ({ as: vi.fn(() => ({})) })),
70
- min: vi.fn(() => ({ as: vi.fn(() => ({})) })),
71
- };
192
+ fn = makeFn();
193
+ }
194
+ /** Alias exported for consumers that used learn.tg's hand-written class name. */
195
+ export const GlobalMockKysely = MockKysely;
196
+ /**
197
+ * Hace que el tag `sql` delegue en `mockSqlExecute` (el patrón histórico que los
198
+ * consumidores usaban en 0.25.0 para controlar el SQL y recibir filas).
199
+ */
200
+ function wireMockSql(tag, sqlExecute) {
201
+ tag.mockImplementation(() => ({
202
+ as: vi.fn(() => ({})),
203
+ execute: sqlExecute,
204
+ val: vi.fn((value) => value),
205
+ }));
72
206
  }
73
207
  /**
74
208
  * Creates a mock Kysely instance with configurable behavior
@@ -91,6 +225,10 @@ export function createMockKysely(options = {}) {
91
225
  if (opts.sqlExecute !== undefined) {
92
226
  mockSqlExecute.mockImplementation(options.sqlExecute);
93
227
  }
228
+ const mockSql = createMockSql();
229
+ // El tag `sql` delega en `mockSqlExecute` (patrón histórico de los consumidores).
230
+ wireMockSql(mockSql, mockSqlExecute);
231
+ const mockEb = createExpressionBuilder();
94
232
  // Wire the MockKysely class to the shared mock functions so that
95
233
  // libDbMocks.mockExecute (etc.) reflect actual DB calls made by the code.
96
234
  class WiredMockKysely extends MockKysely {
@@ -99,14 +237,11 @@ export function createMockKysely(options = {}) {
99
237
  executeTakeFirst: mockExecuteTakeFirst,
100
238
  execute: mockExecute,
101
239
  sqlExecute: mockSqlExecute,
240
+ eb: mockEb,
241
+ sql: mockSql,
102
242
  });
103
243
  }
104
244
  }
105
- const mockSql = vi.fn(() => ({
106
- as: vi.fn().mockReturnValue({}),
107
- execute: mockSqlExecute,
108
- val: vi.fn((val) => val),
109
- }));
110
245
  const mockPgPool = vi.fn();
111
246
  return {
112
247
  MockKysely: WiredMockKysely,
@@ -114,6 +249,7 @@ export function createMockKysely(options = {}) {
114
249
  mockExecute,
115
250
  mockSqlExecute,
116
251
  mockSql,
252
+ mockEb,
117
253
  mockPgPool,
118
254
  /**
119
255
  * @deprecated `vi.mock()` NO funciona dentro de una función de un módulo
@@ -137,6 +273,8 @@ export function createMockKysely(options = {}) {
137
273
  mockExecute.mockReset();
138
274
  mockSqlExecute.mockReset();
139
275
  mockSql.mockReset();
276
+ wireMockSql(mockSql, mockSqlExecute);
277
+ mockEb.mockReset();
140
278
  mockPgPool.mockReset();
141
279
  },
142
280
  /**
@@ -172,15 +310,18 @@ export const libDbMocks = createMockKysely();
172
310
  export function createMockDb() {
173
311
  return {
174
312
  selectFrom: vi.fn().mockReturnThis(),
313
+ selectNoFrom: vi.fn().mockReturnThis(),
175
314
  select: vi.fn().mockReturnThis(),
176
315
  selectAll: vi.fn().mockReturnThis(),
177
316
  where: vi.fn().mockReturnThis(),
317
+ having: vi.fn().mockReturnThis(),
178
318
  orderBy: vi.fn().mockReturnThis(),
179
319
  limit: vi.fn().mockReturnThis(),
320
+ offset: vi.fn().mockReturnThis(),
180
321
  groupBy: vi.fn().mockReturnThis(),
181
- having: vi.fn().mockReturnThis(),
182
322
  leftJoin: vi.fn().mockReturnThis(),
183
323
  innerJoin: vi.fn().mockReturnThis(),
324
+ as: vi.fn().mockReturnThis(),
184
325
  executeTakeFirst: vi.fn().mockResolvedValue(null),
185
326
  executeTakeFirstOrThrow: vi.fn().mockResolvedValue(null),
186
327
  insertInto: vi.fn().mockReturnThis(),
@@ -191,6 +332,8 @@ export function createMockDb() {
191
332
  deleteFrom: vi.fn().mockReturnThis(),
192
333
  with: vi.fn().mockReturnThis(),
193
334
  onConflict: vi.fn().mockReturnThis(),
335
+ doNothing: vi.fn().mockReturnThis(),
336
+ doUpdateSet: vi.fn().mockReturnThis(),
194
337
  execute: vi.fn().mockResolvedValue(undefined),
195
338
  transaction: vi.fn().mockImplementation(async (cb) => cb(createMockDb())),
196
339
  };
@@ -1 +1 @@
1
- {"version":3,"file":"kysely-mocks.js","sourceRoot":"","sources":["../../src/test-utils/kysely-mocks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kysely-mocks.js","sourceRoot":"","sources":["../../src/test-utils/kysely-mocks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=kysely-mocks.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kysely-mocks.test.d.ts","sourceRoot":"","sources":["../../src/test-utils/kysely-mocks.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,110 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { createMockSql, createExpressionBuilder, MockKysely, apiDbMocks, } from './kysely-mocks.js';
3
+ // U1 (m/REQ/49): the shared builder must cover what real API routes use, so
4
+ // consumers can delete their hand-written `vi.mock('kysely', …)`.
5
+ describe('createMockSql (U1)', () => {
6
+ it('is a template tag that captures the text and parameters', () => {
7
+ const sql = createMockSql();
8
+ const fragment = sql `count(*) = ${1} and x`;
9
+ expect(fragment.__sql).toBe('count(*) = ? and x');
10
+ expect(fragment.parameters).toEqual([1]);
11
+ });
12
+ it('exposes raw/ref/val/join/literal used by real code', () => {
13
+ const sql = createMockSql();
14
+ expect(sql.raw('platform_score').__sql).toBe('platform_score');
15
+ expect(sql.ref('usuario.id').__sql).toBe('usuario.id');
16
+ expect(sql.val(42)).toBe(42);
17
+ expect(sql.literal('foo').__sql).toBe('foo');
18
+ expect(sql.join([sql.raw('a'), sql.raw('b')]).__sql).toBe('a b');
19
+ });
20
+ });
21
+ describe('createExpressionBuilder (U1)', () => {
22
+ it('invokes the subquery callback of eb(col, in, cb)', () => {
23
+ const eb = createExpressionBuilder();
24
+ const seen = [];
25
+ eb('id', 'in', (sub) => {
26
+ seen.push(sub);
27
+ return {};
28
+ });
29
+ expect(seen).toHaveLength(1);
30
+ });
31
+ it('builds and/or/not/exists combinators', () => {
32
+ const eb = createExpressionBuilder();
33
+ expect(eb.or([{ a: 1 }]).__expr).toBe('or');
34
+ expect(eb.and([{ a: 1 }]).__expr).toBe('and');
35
+ expect(eb.not({ a: 1 }).__expr).toBe('not');
36
+ expect(eb.exists((b) => b).__expr).toBe('exists');
37
+ });
38
+ });
39
+ describe('MockKysely builder (U1)', () => {
40
+ it('exercises eb.or inside where, and a subquery as a table', () => {
41
+ const db = new MockKysely();
42
+ const eb = createExpressionBuilder();
43
+ const base = db.selectFrom('usuario').select('id').as('lb');
44
+ const exec = db
45
+ .selectFrom(base)
46
+ .selectAll()
47
+ .where((builder) => builder.or([builder('lb.id', '=', 1), builder('lb.id', '=', 2)]))
48
+ .where(eb.or([eb('a', '=', 1), eb('b', '=', 2)]));
49
+ expect(exec).toBe(db);
50
+ });
51
+ it('accepts where(sql`…`) and having', () => {
52
+ const db = new MockKysely();
53
+ const sql = createMockSql();
54
+ const q = db
55
+ .selectFrom('score')
56
+ .select('usuario_id')
57
+ .groupBy('usuario_id')
58
+ .where(sql `score > 0`)
59
+ .having(sql `count(*) > ${2}`);
60
+ expect(q).toBe(db);
61
+ });
62
+ it('supports fn aggregations by default and via select callbacks', () => {
63
+ const db = new MockKysely();
64
+ expect(db.fn.countAll().as).toBeTypeOf('function');
65
+ expect(db.fn.sum().as).toBeTypeOf('function');
66
+ const q = db.selectFrom('t').select(({ fn }) => [fn.countAll().as('n'), fn.avg('x').as('a')]);
67
+ expect(q).toBe(db);
68
+ });
69
+ it('runs transaction().execute(cb) with a fresh mock', async () => {
70
+ const db = new MockKysely({ execute: () => Promise.resolve([{ ok: true }]) });
71
+ const rows = await db.transaction().execute(async (trx) => trx.execute());
72
+ expect(rows).toEqual([{ ok: true }]);
73
+ });
74
+ it('chains onConflict(...).doNothing()', () => {
75
+ const db = new MockKysely();
76
+ const oc = db.insertInto('t').values({}).onConflict((b) => b.column('id').doNothing());
77
+ expect(oc).toBe(db);
78
+ });
79
+ it('exposes getExecutor().executeQuery through the injected sqlExecute', async () => {
80
+ const sqlExecute = (query) => Promise.resolve({ rows: [query] });
81
+ const db = new MockKysely({ sqlExecute });
82
+ const res = await db.getExecutor().executeQuery({ tag: 'x' });
83
+ expect(res.rows).toEqual([{ tag: 'x' }]);
84
+ });
85
+ });
86
+ describe('apiDbMocks (U1)', () => {
87
+ it('exports a wired eb and sql alongside the classic mocks', () => {
88
+ expect(apiDbMocks.mockEb).toBeTypeOf('function');
89
+ expect(apiDbMocks.mockSql.raw).toBeTypeOf('function');
90
+ const db = new apiDbMocks.MockKysely();
91
+ expect(db.selectFrom('x')).toBe(db);
92
+ });
93
+ // Regresión reportada por learn.tg: el tag `sql` volvió a delegar en
94
+ // `mockSqlExecute`, el patrón histórico para controlar el SQL.
95
+ it('el tag sql delega en mockSqlExecute', async () => {
96
+ apiDbMocks.mockSqlExecute.mockReset();
97
+ apiDbMocks.mockSqlExecute.mockResolvedValue({ rows: [{ total: '3' }] });
98
+ const fragment = apiDbMocks.mockSql `count(*)`;
99
+ const result = await fragment.execute({ tag: 'q' });
100
+ expect(apiDbMocks.mockSqlExecute).toHaveBeenCalledWith({ tag: 'q' });
101
+ expect(result.rows).toEqual([{ total: '3' }]);
102
+ });
103
+ it('resetMocks re-cablea el tag sql a mockSqlExecute', async () => {
104
+ apiDbMocks.resetMocks();
105
+ apiDbMocks.mockSqlExecute.mockResolvedValue({ rows: [{ ok: 1 }] });
106
+ const result = await apiDbMocks.mockSql `x`.execute({});
107
+ expect(result.rows).toEqual([{ ok: 1 }]);
108
+ });
109
+ });
110
+ //# sourceMappingURL=kysely-mocks.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kysely-mocks.test.js","sourceRoot":"","sources":["../../src/test-utils/kysely-mocks.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pasosdejesus/m",
3
- "version": "0.25.0",
3
+ "version": "0.27.0",
4
4
  "description": "Motor para crear y gestionar proyectos al estilo Pasos de Jesus.",
5
5
  "author": "",
6
6
  "license": "ISC",
@@ -48,6 +48,10 @@
48
48
  "import": "./dist/wba/index.js",
49
49
  "types": "./dist/wba/index.d.ts"
50
50
  },
51
+ "./base-model": {
52
+ "import": "./dist/base-model/index.js",
53
+ "types": "./dist/base-model/index.d.ts"
54
+ },
51
55
  "./wba/routes": {
52
56
  "import": "./dist/wba/routes/index.js",
53
57
  "types": "./dist/wba/routes/index.d.ts"
package/src/e2e/README.md CHANGED
@@ -123,6 +123,30 @@ await setupFullWalletMock(page, { privateKey: process.env.PRIVATE_KEY })
123
123
  await setupFullWalletMock(page, { privateKey: process.env.PRIVATE_KEY, rpcUrl: process.env.RPC_URL })
124
124
  ```
125
125
 
126
+ **Mock parity (`m/REQ/49` 14).** Without `rpcUrl`, `eth_getTransactionReceipt` used to return
127
+ `null`, so a spec that sends and awaits confirmation hung. Now `setupFullWalletMock` (and
128
+ `fullWalletMockCode`) accept `fakeReceipt` (`{status, blockNumber, transactionHash, logs}`),
129
+ `fakeCelo`, `fakeCallResult` and `fakeTxHash`:
130
+
131
+ ```js
132
+ await setupFullWalletMock(page, {
133
+ privateKey: process.env.PRIVATE_KEY,
134
+ fakeReceipt: { status: '0x1', blockNumber: '0x1312D01', logs: [] },
135
+ })
136
+ ```
137
+
138
+ ### In-app wallet driver (`m/REQ/49` 15)
139
+
140
+ Drives the `m/wallet/next` components by their testids, so consumers do not rewrite selectors:
141
+
142
+ ```ts
143
+ setupInAppWallet(page, { password, mnemonic?, privateKey?, timeoutMs? }): Promise<void>
144
+ unlockInAppWallet(page, { password, timeoutMs? }): Promise<void>
145
+ ```
146
+
147
+ With `mnemonic`/`privateKey` it switches to import mode; otherwise it creates a new wallet. It
148
+ selects by testid/`type` (not by localized text), so it works with any `lang`.
149
+
126
150
  ### Local EVM node (`m/REQ/14`)
127
151
 
128
152
  ```ts
@@ -167,6 +191,24 @@ Lessons that cost time here (see also learn.tg's `doc/e2e-testing.md`):
167
191
  row per spec, one column per log, marking `<-- difiere` when a spec's state changes between
168
192
  runs (environmental vs product failure).
169
193
 
194
+ ### Site warmup (`m/REQ/49` P5)
195
+
196
+ ```ts
197
+ warmup(baseUrl, { paths, mode?, filter?, sequentialTimeoutMs?, parallelTimeoutMs?,
198
+ rejectUnauthorized?, slowMs?, logger?, request? }): Promise<WarmupOutcome>
199
+ ```
200
+
201
+ Two passes: compile sequentially (a cold `next dev` dies under parallel load), then verify in
202
+ parallel. Reports routes that stay slow (>`slowMs`, default 15 s) and **does not fail on 4xx**
203
+ (only informs). `mode: 'sequential'` runs a single pass (the learn.tg local case).
204
+
205
+ ```sh
206
+ ./bin/m warmup [filter] [--sequential] # SITE_URL from env; paths from the consumer
207
+ ```
208
+
209
+ The route list lives in the consumer: `e2e/warmup-paths.json` (`["/en", "/api/x"]` or
210
+ `{"paths": […]}`) or `package.json:e2e.warmupPaths`.
211
+
170
212
  ## Environment Variables
171
213
 
172
214
  See [doc/e2e.md](../../../../doc/e2e.md) for full reference.
@@ -13,6 +13,7 @@ Each file in this directory exports a `runXxx()` function registered in `../m.ts
13
13
  | File | Commands | Purpose |
14
14
  |------|----------|---------|
15
15
  | `context.ts` | `ai:context` | Orchestrates the project context document (schema 1): detection, profiles, filters, budget and output |
16
+ | `base-model.ts` | `base-model:dump`, `base-model:verify` | Generates the base-model baseline from a reference and guards its derivation |
16
17
  | `context-workspaces.ts` | *(internal)* | Detects project types and workspace roots (`rails`, `nextjs`, `hardhat`, `monorepo`, `node`) |
17
18
  | `context-profiles.ts` | *(internal)* | Built-in task profiles plus JSON config loading, merging and validation |
18
19
  | `context-ignore.ts` | *(internal)* | Default exclusions, absolute secrets deny list and filter precedence |
@@ -284,6 +284,16 @@ beforeEach(() => {
284
284
  - Mock for `pg.Pool` of PostgreSQL
285
285
  - **Lesson learned:** The `sql.val()` method is crucial for queries using template tags
286
286
 
287
+ **Builder coverage (`m/REQ/49` U1):** `MockKysely`/`apiDbMocks` ahora cubren lo que usan las
288
+ rutas reales, así que puedes **borrar tu `GlobalMockKysely` escrito a mano**:
289
+ - `eb.or`/`eb.and`/`eb.not`/`eb.exists` y el callback `eb('col', 'in', cb => …)`. Si tienes el mock
290
+ de `kysely` a module scope, pásale `eb: apiDbMocks.mockEb` o importa `createExpressionBuilder()`.
291
+ - `where(sql`…`)`, `having`, `groupBy` y subconsulta-como-tabla (`db.selectFrom(base.as('lb'))`).
292
+ - `onConflict(b => b.column('id').doNothing())`, `transaction().execute(cb)` y `getExecutor()`.
293
+ - `fn.countAll/sum/avg/max/min` (`db.select(cb)` recibe `{ fn, eb, sql }`).
294
+ - `mockSql` (de `createMockSql()`) trae `raw`/`ref`/`val`/`literal`/`join`; `apiDbMocks.mockEb`
295
+ expone el `eb`. `GlobalMockKysely` se exporta como alias de `MockKysely`.
296
+
287
297
  ### 3. `radix-mocks.tsx` – UI Components
288
298
 
289
299
  **Purpose:** Mock Radix UI components for React component tests.
@@ -377,6 +387,24 @@ viemMocks.createPublicClient.mockReturnValue({ ... })
377
387
  - Mock chains are extensible; add new chains as needed
378
388
  - **Lesson learned:** Some functions like `privateKeyToAccount` and `formatUnits` are necessary for transaction tests
379
389
 
390
+ ### 6. `console.ts` – Silenciar ruido esperado de consola
391
+
392
+ **Purpose:** Ocultar ruido esperado en las pruebas (reintentos, navegaciones canceladas,
393
+ warnings de una dependencia simulada). Graduado de `NOISY_PATTERNS` de learn.tg (`m/REQ/49` U2).
394
+
395
+ ```typescript
396
+ import { silenceConsole } from '@pasosdejesus/m/test-utils/console'
397
+
398
+ const silence = silenceConsole(['[retry]', 'AbortError'])
399
+ // … ejercita el código …
400
+ silence.restore()
401
+ ```
402
+
403
+ - `silenceConsole(patterns, opts?)`: envuelve `console.log/warn/error` (configurable con
404
+ `opts.methods`) y suprime la llamada cuando algún argumento contiene un patrón; el resto pasa.
405
+ - Los argumentos no-cadena se comparan por su `message` (Error) o `String()`.
406
+ - Devuelve `{ restore(), suppressed }`; `suppressed` guarda los argumentos suprimidos.
407
+
380
408
  ## Complete Usage Examples
381
409
 
382
410
  ### Configuration for API Route Tests