@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.
- package/dist/CHANGELOG.md +85 -0
- package/dist/base-model/baseline.generated.d.ts +48 -0
- package/dist/base-model/baseline.generated.d.ts.map +1 -0
- package/dist/base-model/baseline.generated.js +930 -0
- package/dist/base-model/baseline.generated.js.map +1 -0
- package/dist/base-model/check.d.ts +6 -0
- package/dist/base-model/check.d.ts.map +1 -0
- package/dist/base-model/check.js +195 -0
- package/dist/base-model/check.js.map +1 -0
- package/dist/base-model/forward/baseline_1_0_0.d.ts +3 -0
- package/dist/base-model/forward/baseline_1_0_0.d.ts.map +1 -0
- package/dist/base-model/forward/baseline_1_0_0.js +23 -0
- package/dist/base-model/forward/baseline_1_0_0.js.map +1 -0
- package/dist/base-model/forward/index.d.ts +28 -0
- package/dist/base-model/forward/index.d.ts.map +1 -0
- package/dist/base-model/forward/index.js +126 -0
- package/dist/base-model/forward/index.js.map +1 -0
- package/dist/base-model/forward/index.test.d.ts +2 -0
- package/dist/base-model/forward/index.test.d.ts.map +1 -0
- package/dist/base-model/forward/index.test.js +65 -0
- package/dist/base-model/forward/index.test.js.map +1 -0
- package/dist/base-model/forward/policy.d.ts +16 -0
- package/dist/base-model/forward/policy.d.ts.map +1 -0
- package/dist/base-model/forward/policy.js +37 -0
- package/dist/base-model/forward/policy.js.map +1 -0
- package/dist/base-model/forward/policy.test.d.ts +2 -0
- package/dist/base-model/forward/policy.test.d.ts.map +1 -0
- package/dist/base-model/forward/policy.test.js +40 -0
- package/dist/base-model/forward/policy.test.js.map +1 -0
- package/dist/base-model/forward/types.d.ts +21 -0
- package/dist/base-model/forward/types.d.ts.map +1 -0
- package/dist/base-model/forward/types.js +2 -0
- package/dist/base-model/forward/types.js.map +1 -0
- package/dist/base-model/generate.d.ts +42 -0
- package/dist/base-model/generate.d.ts.map +1 -0
- package/dist/base-model/generate.js +241 -0
- package/dist/base-model/generate.js.map +1 -0
- package/dist/base-model/guidelines.d.ts +13 -0
- package/dist/base-model/guidelines.d.ts.map +1 -0
- package/dist/base-model/guidelines.js +61 -0
- package/dist/base-model/guidelines.js.map +1 -0
- package/dist/base-model/index.d.ts +24 -0
- package/dist/base-model/index.d.ts.map +1 -0
- package/dist/base-model/index.js +29 -0
- package/dist/base-model/index.js.map +1 -0
- package/dist/base-model/parse-structure.d.ts +4 -0
- package/dist/base-model/parse-structure.d.ts.map +1 -0
- package/dist/base-model/parse-structure.js +170 -0
- package/dist/base-model/parse-structure.js.map +1 -0
- package/dist/base-model/queries.d.ts +34 -0
- package/dist/base-model/queries.d.ts.map +1 -0
- package/dist/base-model/queries.js +118 -0
- package/dist/base-model/queries.js.map +1 -0
- package/dist/base-model/references/learn-tg.d.ts +21 -0
- package/dist/base-model/references/learn-tg.d.ts.map +1 -0
- package/dist/base-model/references/learn-tg.js +65 -0
- package/dist/base-model/references/learn-tg.js.map +1 -0
- package/dist/base-model/references/msip.d.ts +29 -0
- package/dist/base-model/references/msip.d.ts.map +1 -0
- package/dist/base-model/references/msip.js +33 -0
- package/dist/base-model/references/msip.js.map +1 -0
- package/dist/base-model/types.d.ts +207 -0
- package/dist/base-model/types.d.ts.map +1 -0
- package/dist/base-model/types.js +10 -0
- package/dist/base-model/types.js.map +1 -0
- package/dist/base-model/version.d.ts +19 -0
- package/dist/base-model/version.d.ts.map +1 -0
- package/dist/base-model/version.js +26 -0
- package/dist/base-model/version.js.map +1 -0
- package/dist/base-model/wallet-link.d.ts +69 -0
- package/dist/base-model/wallet-link.d.ts.map +1 -0
- package/dist/base-model/wallet-link.js +220 -0
- package/dist/base-model/wallet-link.js.map +1 -0
- package/dist/base-model/wallet-link.test.d.ts +2 -0
- package/dist/base-model/wallet-link.test.d.ts.map +1 -0
- package/dist/base-model/wallet-link.test.js +147 -0
- package/dist/base-model/wallet-link.test.js.map +1 -0
- package/dist/e2e/full-wallet.d.ts +19 -0
- package/dist/e2e/full-wallet.d.ts.map +1 -1
- package/dist/e2e/full-wallet.js +12 -4
- package/dist/e2e/full-wallet.js.map +1 -1
- package/dist/e2e/full-wallet.test.js +26 -0
- package/dist/e2e/full-wallet.test.js.map +1 -1
- package/dist/e2e/in-app-wallet.d.ts +23 -0
- package/dist/e2e/in-app-wallet.d.ts.map +1 -0
- package/dist/e2e/in-app-wallet.js +40 -0
- package/dist/e2e/in-app-wallet.js.map +1 -0
- package/dist/e2e/in-app-wallet.test.d.ts +2 -0
- package/dist/e2e/in-app-wallet.test.d.ts.map +1 -0
- package/dist/e2e/in-app-wallet.test.js +52 -0
- package/dist/e2e/in-app-wallet.test.js.map +1 -0
- package/dist/e2e/index.d.ts +5 -1
- package/dist/e2e/index.d.ts.map +1 -1
- package/dist/e2e/index.js +2 -0
- package/dist/e2e/index.js.map +1 -1
- package/dist/e2e/siwe-optional.test.d.ts +2 -0
- package/dist/e2e/siwe-optional.test.d.ts.map +1 -0
- package/dist/e2e/siwe-optional.test.js +13 -0
- package/dist/e2e/siwe-optional.test.js.map +1 -0
- package/dist/e2e/siwe.d.ts.map +1 -1
- package/dist/e2e/siwe.js +1 -3
- package/dist/e2e/siwe.js.map +1 -1
- package/dist/e2e/warmup.d.ts +38 -0
- package/dist/e2e/warmup.d.ts.map +1 -0
- package/dist/e2e/warmup.js +84 -0
- package/dist/e2e/warmup.js.map +1 -0
- package/dist/e2e/warmup.test.d.ts +2 -0
- package/dist/e2e/warmup.test.d.ts.map +1 -0
- package/dist/e2e/warmup.test.js +67 -0
- package/dist/e2e/warmup.test.js.map +1 -0
- package/dist/i18n/locales/cli.d.ts.map +1 -1
- package/dist/i18n/locales/cli.js +10 -0
- package/dist/i18n/locales/cli.js.map +1 -1
- package/dist/m.js +14 -1
- package/dist/m.js.map +1 -1
- package/dist/tasks/base-model.d.ts +5 -0
- package/dist/tasks/base-model.d.ts.map +1 -0
- package/dist/tasks/base-model.js +310 -0
- package/dist/tasks/base-model.js.map +1 -0
- package/dist/tasks/db.d.ts.map +1 -1
- package/dist/tasks/db.js +27 -0
- package/dist/tasks/db.js.map +1 -1
- package/dist/tasks/warmup.d.ts +4 -0
- package/dist/tasks/warmup.d.ts.map +1 -0
- package/dist/tasks/warmup.js +67 -0
- package/dist/tasks/warmup.js.map +1 -0
- package/dist/tasks/warmup.test.d.ts +2 -0
- package/dist/tasks/warmup.test.d.ts.map +1 -0
- package/dist/tasks/warmup.test.js +40 -0
- package/dist/tasks/warmup.test.js.map +1 -0
- package/dist/templates/apps/nextjs/package.json.hbs +1 -1
- package/dist/test-utils/console.d.ts +37 -0
- package/dist/test-utils/console.d.ts.map +1 -0
- package/dist/test-utils/console.js +65 -0
- package/dist/test-utils/console.js.map +1 -0
- package/dist/test-utils/console.test.d.ts +2 -0
- package/dist/test-utils/console.test.d.ts.map +1 -0
- package/dist/test-utils/console.test.js +70 -0
- package/dist/test-utils/console.test.js.map +1 -0
- package/dist/test-utils/index.d.ts +1 -0
- package/dist/test-utils/index.d.ts.map +1 -1
- package/dist/test-utils/index.js +1 -0
- package/dist/test-utils/index.js.map +1 -1
- package/dist/test-utils/kysely-mocks.d.ts +244 -103
- package/dist/test-utils/kysely-mocks.d.ts.map +1 -1
- package/dist/test-utils/kysely-mocks.js +161 -18
- package/dist/test-utils/kysely-mocks.js.map +1 -1
- package/dist/test-utils/kysely-mocks.test.d.ts +2 -0
- package/dist/test-utils/kysely-mocks.test.d.ts.map +1 -0
- package/dist/test-utils/kysely-mocks.test.js +110 -0
- package/dist/test-utils/kysely-mocks.test.js.map +1 -0
- package/package.json +5 -1
- package/src/e2e/README.md +42 -0
- package/src/tasks/README.md +1 -0
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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 @@
|
|
|
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.
|
|
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.
|
package/src/tasks/README.md
CHANGED
|
@@ -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 |
|
package/src/test-utils/README.md
CHANGED
|
@@ -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
|