@pasosdejesus/m 0.27.2 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/CHANGELOG.md +126 -0
- package/dist/compose/derive.d.ts +53 -0
- package/dist/compose/derive.d.ts.map +1 -0
- package/dist/compose/derive.js +128 -0
- package/dist/compose/derive.js.map +1 -0
- package/dist/compose/discover.d.ts +32 -0
- package/dist/compose/discover.d.ts.map +1 -0
- package/dist/compose/discover.js +96 -0
- package/dist/compose/discover.js.map +1 -0
- package/dist/compose/index.d.ts +17 -0
- package/dist/compose/index.d.ts.map +1 -0
- package/dist/compose/index.js +16 -0
- package/dist/compose/index.js.map +1 -0
- package/dist/compose/manifest.d.ts +89 -0
- package/dist/compose/manifest.d.ts.map +1 -0
- package/dist/compose/manifest.js +16 -0
- package/dist/compose/manifest.js.map +1 -0
- package/dist/compose/sync.d.ts +12 -0
- package/dist/compose/sync.d.ts.map +1 -0
- package/dist/compose/sync.js +27 -0
- package/dist/compose/sync.js.map +1 -0
- package/dist/compose/usage.d.ts +54 -0
- package/dist/compose/usage.d.ts.map +1 -0
- package/dist/compose/usage.js +167 -0
- package/dist/compose/usage.js.map +1 -0
- package/dist/compose/vendor.d.ts +45 -0
- package/dist/compose/vendor.d.ts.map +1 -0
- package/dist/compose/vendor.js +147 -0
- package/dist/compose/vendor.js.map +1 -0
- package/dist/compose/verify.d.ts +11 -0
- package/dist/compose/verify.d.ts.map +1 -0
- package/dist/compose/verify.js +74 -0
- package/dist/compose/verify.js.map +1 -0
- package/dist/e2e/env.d.ts +1 -1
- package/dist/e2e/env.js +3 -3
- package/dist/e2e/env.js.map +1 -1
- package/dist/e2e/local-node.js +1 -1
- package/dist/e2e/local-node.js.map +1 -1
- package/dist/e2e/wallet-mock.js +1 -1
- package/dist/e2e/wallet-mock.js.map +1 -1
- package/dist/e2e/warmup.js +1 -1
- package/dist/e2e/warmup.js.map +1 -1
- package/dist/engine.d.ts +3 -16
- package/dist/engine.d.ts.map +1 -1
- package/dist/i18n/locales/cli.d.ts.map +1 -1
- package/dist/i18n/locales/cli.js +16 -10
- package/dist/i18n/locales/cli.js.map +1 -1
- package/dist/m.js +13 -10
- package/dist/m.js.map +1 -1
- package/dist/shadcn_components/ui/button.d.ts +1 -1
- package/dist/tasks/create.d.ts +1 -1
- package/dist/tasks/create.d.ts.map +1 -1
- package/dist/tasks/create.js +5 -13
- package/dist/tasks/create.js.map +1 -1
- package/dist/tasks/db.d.ts +2 -1
- package/dist/tasks/db.d.ts.map +1 -1
- package/dist/tasks/db.js +14 -11
- package/dist/tasks/db.js.map +1 -1
- package/dist/tasks/e2e-summary.js +1 -1
- package/dist/tasks/e2e-summary.js.map +1 -1
- package/dist/tasks/e2e.js +1 -1
- package/dist/tasks/e2e.js.map +1 -1
- package/dist/tasks/engine.d.ts.map +1 -1
- package/dist/tasks/engine.js +246 -17
- package/dist/tasks/engine.js.map +1 -1
- package/dist/tasks/msip.d.ts +11 -0
- package/dist/tasks/msip.d.ts.map +1 -0
- package/dist/tasks/{base-model.js → msip.js} +161 -25
- package/dist/tasks/msip.js.map +1 -0
- package/dist/tasks/warmup.js +1 -1
- package/dist/tasks/warmup.js.map +1 -1
- package/dist/templates/apps/hardhat/README.md +0 -8
- package/dist/templates/apps/nextjs/bin/m +3 -0
- package/dist/templates/apps/nextjs/tests/global-setup.ts +28 -0
- package/dist/templates/apps/nextjs/vitest.config.ts +3 -0
- package/dist/test-utils/console.d.ts +1 -1
- package/dist/test-utils/console.js +1 -1
- package/dist/test-utils/kysely-mocks.d.ts +1 -1
- package/dist/test-utils/kysely-mocks.js +1 -1
- package/dist/test-utils/wallet-mocks.js +1 -1
- package/dist/test-utils/wallet-setup.js +1 -1
- package/dist/util/engines.d.ts +4 -6
- package/dist/util/engines.d.ts.map +1 -1
- package/dist/util/engines.js +5 -38
- package/dist/util/engines.js.map +1 -1
- package/dist/util/msip.d.ts +17 -0
- package/dist/util/msip.d.ts.map +1 -0
- package/dist/util/msip.js +86 -0
- package/dist/util/msip.js.map +1 -0
- package/dist/wallet/index.js +1 -1
- package/dist/wallet/index.js.map +1 -1
- package/dist/wallet/next/i18n.d.ts +1 -1
- package/dist/wallet/next/i18n.js +1 -1
- package/dist/wallet/next/index.js +1 -1
- package/dist/wallet/next/index.js.map +1 -1
- package/dist/wallet/next/namespaces.d.ts +1 -1
- package/dist/wallet/next/namespaces.js +1 -1
- package/dist/wallet/storage/idb.d.ts +1 -1
- package/dist/wallet/storage/idb.js +1 -1
- package/package.json +4 -6
- package/src/e2e/README.md +6 -6
- package/src/tasks/README.md +3 -3
- package/src/test-utils/README.md +2 -2
- package/src/wallet/README.md +4 -4
- package/dist/base-model/baseline.generated.d.ts +0 -48
- package/dist/base-model/baseline.generated.d.ts.map +0 -1
- package/dist/base-model/baseline.generated.js +0 -930
- package/dist/base-model/baseline.generated.js.map +0 -1
- package/dist/base-model/check.d.ts +0 -6
- package/dist/base-model/check.d.ts.map +0 -1
- package/dist/base-model/check.js +0 -195
- package/dist/base-model/check.js.map +0 -1
- package/dist/base-model/forward/baseline_1_0_0.d.ts +0 -3
- package/dist/base-model/forward/baseline_1_0_0.d.ts.map +0 -1
- package/dist/base-model/forward/baseline_1_0_0.js +0 -23
- package/dist/base-model/forward/baseline_1_0_0.js.map +0 -1
- package/dist/base-model/forward/index.d.ts +0 -28
- package/dist/base-model/forward/index.d.ts.map +0 -1
- package/dist/base-model/forward/index.js +0 -126
- package/dist/base-model/forward/index.js.map +0 -1
- package/dist/base-model/forward/index.test.d.ts +0 -2
- package/dist/base-model/forward/index.test.d.ts.map +0 -1
- package/dist/base-model/forward/index.test.js +0 -65
- package/dist/base-model/forward/index.test.js.map +0 -1
- package/dist/base-model/forward/policy.d.ts +0 -16
- package/dist/base-model/forward/policy.d.ts.map +0 -1
- package/dist/base-model/forward/policy.js +0 -37
- package/dist/base-model/forward/policy.js.map +0 -1
- package/dist/base-model/forward/policy.test.d.ts +0 -2
- package/dist/base-model/forward/policy.test.d.ts.map +0 -1
- package/dist/base-model/forward/policy.test.js +0 -40
- package/dist/base-model/forward/policy.test.js.map +0 -1
- package/dist/base-model/forward/types.d.ts +0 -21
- package/dist/base-model/forward/types.d.ts.map +0 -1
- package/dist/base-model/forward/types.js +0 -2
- package/dist/base-model/forward/types.js.map +0 -1
- package/dist/base-model/generate.d.ts +0 -42
- package/dist/base-model/generate.d.ts.map +0 -1
- package/dist/base-model/generate.js +0 -241
- package/dist/base-model/generate.js.map +0 -1
- package/dist/base-model/guidelines.d.ts +0 -13
- package/dist/base-model/guidelines.d.ts.map +0 -1
- package/dist/base-model/guidelines.js +0 -61
- package/dist/base-model/guidelines.js.map +0 -1
- package/dist/base-model/index.d.ts +0 -24
- package/dist/base-model/index.d.ts.map +0 -1
- package/dist/base-model/index.js +0 -29
- package/dist/base-model/index.js.map +0 -1
- package/dist/base-model/parse-structure.d.ts +0 -4
- package/dist/base-model/parse-structure.d.ts.map +0 -1
- package/dist/base-model/parse-structure.js +0 -170
- package/dist/base-model/parse-structure.js.map +0 -1
- package/dist/base-model/queries.d.ts +0 -34
- package/dist/base-model/queries.d.ts.map +0 -1
- package/dist/base-model/queries.js +0 -118
- package/dist/base-model/queries.js.map +0 -1
- package/dist/base-model/references/learn-tg.d.ts +0 -21
- package/dist/base-model/references/learn-tg.d.ts.map +0 -1
- package/dist/base-model/references/learn-tg.js +0 -65
- package/dist/base-model/references/learn-tg.js.map +0 -1
- package/dist/base-model/references/msip.d.ts +0 -29
- package/dist/base-model/references/msip.d.ts.map +0 -1
- package/dist/base-model/references/msip.js +0 -33
- package/dist/base-model/references/msip.js.map +0 -1
- package/dist/base-model/types.d.ts +0 -207
- package/dist/base-model/types.d.ts.map +0 -1
- package/dist/base-model/types.js +0 -10
- package/dist/base-model/types.js.map +0 -1
- package/dist/base-model/version.d.ts +0 -19
- package/dist/base-model/version.d.ts.map +0 -1
- package/dist/base-model/version.js +0 -26
- package/dist/base-model/version.js.map +0 -1
- package/dist/base-model/wallet-link.d.ts +0 -69
- package/dist/base-model/wallet-link.d.ts.map +0 -1
- package/dist/base-model/wallet-link.js +0 -220
- package/dist/base-model/wallet-link.js.map +0 -1
- package/dist/base-model/wallet-link.test.d.ts +0 -2
- package/dist/base-model/wallet-link.test.d.ts.map +0 -1
- package/dist/base-model/wallet-link.test.js +0 -147
- package/dist/base-model/wallet-link.test.js.map +0 -1
- package/dist/e2e/env.test.d.ts +0 -2
- package/dist/e2e/env.test.d.ts.map +0 -1
- package/dist/e2e/env.test.js +0 -72
- package/dist/e2e/env.test.js.map +0 -1
- package/dist/e2e/full-wallet.test.d.ts +0 -2
- package/dist/e2e/full-wallet.test.d.ts.map +0 -1
- package/dist/e2e/full-wallet.test.js +0 -63
- package/dist/e2e/full-wallet.test.js.map +0 -1
- package/dist/e2e/in-app-wallet.test.d.ts +0 -2
- package/dist/e2e/in-app-wallet.test.d.ts.map +0 -1
- package/dist/e2e/in-app-wallet.test.js +0 -52
- package/dist/e2e/in-app-wallet.test.js.map +0 -1
- package/dist/e2e/local-node.test.d.ts +0 -2
- package/dist/e2e/local-node.test.d.ts.map +0 -1
- package/dist/e2e/local-node.test.js +0 -43
- package/dist/e2e/local-node.test.js.map +0 -1
- package/dist/e2e/retry.test.d.ts +0 -2
- package/dist/e2e/retry.test.d.ts.map +0 -1
- package/dist/e2e/retry.test.js +0 -43
- package/dist/e2e/retry.test.js.map +0 -1
- package/dist/e2e/signer.test.d.ts +0 -2
- package/dist/e2e/signer.test.d.ts.map +0 -1
- package/dist/e2e/signer.test.js +0 -57
- package/dist/e2e/signer.test.js.map +0 -1
- package/dist/e2e/siwe-optional.test.d.ts +0 -2
- package/dist/e2e/siwe-optional.test.d.ts.map +0 -1
- package/dist/e2e/siwe-optional.test.js +0 -13
- package/dist/e2e/siwe-optional.test.js.map +0 -1
- package/dist/e2e/wallet-mock.test.d.ts +0 -2
- package/dist/e2e/wallet-mock.test.d.ts.map +0 -1
- package/dist/e2e/wallet-mock.test.js +0 -28
- package/dist/e2e/wallet-mock.test.js.map +0 -1
- package/dist/e2e/warmup.test.d.ts +0 -2
- package/dist/e2e/warmup.test.d.ts.map +0 -1
- package/dist/e2e/warmup.test.js +0 -67
- package/dist/e2e/warmup.test.js.map +0 -1
- package/dist/engine.test.d.ts +0 -2
- package/dist/engine.test.d.ts.map +0 -1
- package/dist/engine.test.js +0 -35
- package/dist/engine.test.js.map +0 -1
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/index.test.js +0 -11
- package/dist/index.test.js.map +0 -1
- package/dist/tasks/base-model.d.ts +0 -5
- package/dist/tasks/base-model.d.ts.map +0 -1
- package/dist/tasks/base-model.js.map +0 -1
- package/dist/tasks/create.test.d.ts +0 -2
- package/dist/tasks/create.test.d.ts.map +0 -1
- package/dist/tasks/create.test.js +0 -41
- package/dist/tasks/create.test.js.map +0 -1
- package/dist/tasks/e2e.test.d.ts +0 -2
- package/dist/tasks/e2e.test.d.ts.map +0 -1
- package/dist/tasks/e2e.test.js +0 -108
- package/dist/tasks/e2e.test.js.map +0 -1
- package/dist/tasks/update.test.d.ts +0 -2
- package/dist/tasks/update.test.d.ts.map +0 -1
- package/dist/tasks/update.test.js +0 -79
- package/dist/tasks/update.test.js.map +0 -1
- package/dist/tasks/warmup.test.d.ts +0 -2
- package/dist/tasks/warmup.test.d.ts.map +0 -1
- package/dist/tasks/warmup.test.js +0 -40
- package/dist/tasks/warmup.test.js.map +0 -1
- package/dist/templates/apps/nextjs/tests/index.test.ts +0 -7
- package/dist/templates/apps/nextjs/tests/test-utils.example.test.ts +0 -169
- package/dist/templates/apps/nextjs/tsconfig.test.json +0 -38
- package/dist/test-utils/console.test.d.ts +0 -2
- package/dist/test-utils/console.test.d.ts.map +0 -1
- package/dist/test-utils/console.test.js +0 -70
- package/dist/test-utils/console.test.js.map +0 -1
- package/dist/test-utils/kysely-mocks.test.d.ts +0 -2
- package/dist/test-utils/kysely-mocks.test.d.ts.map +0 -1
- package/dist/test-utils/kysely-mocks.test.js +0 -126
- package/dist/test-utils/kysely-mocks.test.js.map +0 -1
- package/dist/test-utils/wallet-mocks.test.d.ts +0 -2
- package/dist/test-utils/wallet-mocks.test.d.ts.map +0 -1
- package/dist/test-utils/wallet-mocks.test.js +0 -55
- package/dist/test-utils/wallet-mocks.test.js.map +0 -1
- package/dist/test-utils/wallet-setup.test.d.ts +0 -2
- package/dist/test-utils/wallet-setup.test.d.ts.map +0 -1
- package/dist/test-utils/wallet-setup.test.js +0 -18
- package/dist/test-utils/wallet-setup.test.js.map +0 -1
- package/dist/util/engines.test.d.ts +0 -2
- package/dist/util/engines.test.d.ts.map +0 -1
- package/dist/util/engines.test.js +0 -79
- package/dist/util/engines.test.js.map +0 -1
- package/dist/wallet/biometric.test.d.ts +0 -2
- package/dist/wallet/biometric.test.d.ts.map +0 -1
- package/dist/wallet/biometric.test.js +0 -44
- package/dist/wallet/biometric.test.js.map +0 -1
- package/dist/wallet/crypto.test.d.ts +0 -2
- package/dist/wallet/crypto.test.d.ts.map +0 -1
- package/dist/wallet/crypto.test.js +0 -34
- package/dist/wallet/crypto.test.js.map +0 -1
- package/dist/wallet/destinations.test.d.ts +0 -2
- package/dist/wallet/destinations.test.d.ts.map +0 -1
- package/dist/wallet/destinations.test.js +0 -34
- package/dist/wallet/destinations.test.js.map +0 -1
- package/dist/wallet/external-provider.test.d.ts +0 -2
- package/dist/wallet/external-provider.test.d.ts.map +0 -1
- package/dist/wallet/external-provider.test.js +0 -44
- package/dist/wallet/external-provider.test.js.map +0 -1
- package/dist/wallet/indexeddb.test.d.ts +0 -2
- package/dist/wallet/indexeddb.test.d.ts.map +0 -1
- package/dist/wallet/indexeddb.test.js +0 -28
- package/dist/wallet/indexeddb.test.js.map +0 -1
- package/dist/wallet/kdf.test.d.ts +0 -2
- package/dist/wallet/kdf.test.d.ts.map +0 -1
- package/dist/wallet/kdf.test.js +0 -54
- package/dist/wallet/kdf.test.js.map +0 -1
- package/dist/wallet/next/components.test.d.ts +0 -2
- package/dist/wallet/next/components.test.d.ts.map +0 -1
- package/dist/wallet/next/components.test.js +0 -122
- package/dist/wallet/next/components.test.js.map +0 -1
- package/dist/wallet/next/useInAppWallet.test.d.ts +0 -2
- package/dist/wallet/next/useInAppWallet.test.d.ts.map +0 -1
- package/dist/wallet/next/useInAppWallet.test.js +0 -261
- package/dist/wallet/next/useInAppWallet.test.js.map +0 -1
- package/dist/wallet/provider.test.d.ts +0 -2
- package/dist/wallet/provider.test.d.ts.map +0 -1
- package/dist/wallet/provider.test.js +0 -170
- package/dist/wallet/provider.test.js.map +0 -1
- package/dist/wallet/signer.test.d.ts +0 -2
- package/dist/wallet/signer.test.d.ts.map +0 -1
- package/dist/wallet/signer.test.js +0 -62
- package/dist/wallet/signer.test.js.map +0 -1
- package/dist/wallet/storage.test.d.ts +0 -2
- package/dist/wallet/storage.test.d.ts.map +0 -1
- package/dist/wallet/storage.test.js +0 -103
- package/dist/wallet/storage.test.js.map +0 -1
- package/dist/wallet/wallet.test.d.ts +0 -2
- package/dist/wallet/wallet.test.d.ts.map +0 -1
- package/dist/wallet/wallet.test.js +0 -150
- package/dist/wallet/wallet.test.js.map +0 -1
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Example test file demonstrating how to use @pasosdejesus/m test-utils
|
|
3
|
-
*
|
|
4
|
-
* This file shows practical examples of mocking different parts of a Next.js + Hardhat application.
|
|
5
|
-
* Include it in your project as a reference when writing tests.
|
|
6
|
-
*
|
|
7
|
-
* "Y todo lo que hagáis, hacedlo de corazón, como para el Señor y no para los hombres" (Colosenses 3:23)
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { describe, it, expect, beforeEach, beforeAll, afterAll, vi } from 'vitest';
|
|
11
|
-
import { createFsMocks } from '@pasosdejesus/m/test-utils/fs-mocks';
|
|
12
|
-
import { createMockKysely } from '@pasosdejesus/m/test-utils/kysely-mocks';
|
|
13
|
-
import { createAuthMocks } from '@pasosdejesus/m/test-utils/rainbowkit-mocks';
|
|
14
|
-
import { viemMocks } from '@pasosdejesus/m/test-utils/viem-mocks';
|
|
15
|
-
// radix-mocks is a side-effect import that mocks radix-ui components globally
|
|
16
|
-
import '@pasosdejesus/m/test-utils/radix-mocks';
|
|
17
|
-
|
|
18
|
-
describe('Example: Using test-utils in your project', () => {
|
|
19
|
-
// Example 1: Mocking filesystem operations
|
|
20
|
-
describe('fs-mocks: Mocking filesystem', () => {
|
|
21
|
-
let fsMocks;
|
|
22
|
-
|
|
23
|
-
beforeAll(() => {
|
|
24
|
-
fsMocks = createFsMocks();
|
|
25
|
-
fsMocks.setupFsMocks();
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
afterAll(() => {
|
|
29
|
-
vi.clearAllMocks();
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
it('should mock readFile operations', () => {
|
|
33
|
-
// Setup mock to return specific content
|
|
34
|
-
fsMocks.mockReadFile.mockResolvedValue('{"data": "test"}');
|
|
35
|
-
|
|
36
|
-
// In your actual code, this would be called by the function you're testing
|
|
37
|
-
// Example: await readFile('/config.json', 'utf-8')
|
|
38
|
-
// The mock will return the content we set above
|
|
39
|
-
expect(fsMocks.mockReadFile).toBeDefined();
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
it('should mock readFile with custom content', () => {
|
|
43
|
-
const customFsMocks = createFsMocks({
|
|
44
|
-
readFileContent: '# Custom content',
|
|
45
|
-
});
|
|
46
|
-
// The mock is already configured with the custom content
|
|
47
|
-
expect(customFsMocks.mockReadFile).toBeDefined();
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
// Example 2: Mocking database operations with Kysely
|
|
52
|
-
describe('kysely-mocks: Mocking database queries', () => {
|
|
53
|
-
let dbMocks;
|
|
54
|
-
|
|
55
|
-
beforeAll(() => {
|
|
56
|
-
dbMocks = createMockKysely();
|
|
57
|
-
// setupMocks() is deprecated (no-op): declare vi.mock('kysely'|'pg')
|
|
58
|
-
// at module scope in your vitest.setup.ts (see README §8).
|
|
59
|
-
dbMocks.setupCommonResponses();
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
it('should mock SELECT queries', () => {
|
|
63
|
-
// Configure mock to return specific data
|
|
64
|
-
dbMocks.mockExecuteTakeFirst.mockResolvedValue({ id: 1, name: 'John' });
|
|
65
|
-
|
|
66
|
-
// In your actual code, when a Kysely query executes, it will use the mock
|
|
67
|
-
// Example: await db.selectFrom('users').selectAll().executeTakeFirst()
|
|
68
|
-
// The mock will return { id: 1, name: 'John' }
|
|
69
|
-
expect(dbMocks.mockExecuteTakeFirst).toBeDefined();
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
it('should mock INSERT queries', () => {
|
|
73
|
-
dbMocks.mockExecute.mockResolvedValue([{ id: 3, name: 'Bob' }]);
|
|
74
|
-
expect(dbMocks.mockExecute).toBeDefined();
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
// Example 3: Mocking authentication and wallet state
|
|
79
|
-
describe('rainbowkit-mocks: Mocking authentication', () => {
|
|
80
|
-
let authMocks;
|
|
81
|
-
|
|
82
|
-
beforeAll(() => {
|
|
83
|
-
authMocks = createAuthMocks({
|
|
84
|
-
address: '0x1234567890123456789012345678901234567890',
|
|
85
|
-
isConnected: true,
|
|
86
|
-
chainId: 1,
|
|
87
|
-
});
|
|
88
|
-
authMocks.setupMocks();
|
|
89
|
-
authMocks.setupDefaultImplementations();
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
it('should mock useAccount hook', () => {
|
|
93
|
-
// The mock is already configured with the address above
|
|
94
|
-
// In your React component test, useAccount() will return the mocked data
|
|
95
|
-
expect(authMocks.mocks.mockUseAccount).toBeDefined();
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
it('should mock useSession hook', () => {
|
|
99
|
-
expect(authMocks.mocks.mockUseSession).toBeDefined();
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
it('should update configuration dynamically', () => {
|
|
103
|
-
authMocks.updateConfig({ isConnected: false });
|
|
104
|
-
// Now useAccount() will return isConnected: false
|
|
105
|
-
expect(authMocks.updateConfig).toBeDefined();
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
// Example 4: Mocking blockchain interactions
|
|
110
|
-
describe('viem-mocks: Mocking blockchain', () => {
|
|
111
|
-
beforeAll(() => {
|
|
112
|
-
// viemMocks are already defined, no setup needed
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
it('should mock public client', () => {
|
|
116
|
-
// Configure the mock
|
|
117
|
-
viemMocks.createPublicClient.mockReturnValue({
|
|
118
|
-
getBlockNumber: vi.fn().mockResolvedValue(123456n),
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
const client = viemMocks.createPublicClient();
|
|
122
|
-
expect(client.getBlockNumber).toBeDefined();
|
|
123
|
-
expect(viemMocks.createPublicClient).toHaveBeenCalled();
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
it('should mock wallet client', () => {
|
|
127
|
-
viemMocks.createWalletClient.mockReturnValue({
|
|
128
|
-
sendTransaction: vi.fn().mockResolvedValue('0xabc...'),
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
const client = viemMocks.createWalletClient();
|
|
132
|
-
expect(client.sendTransaction).toBeDefined();
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
// Example 5: Cleanup and teardown
|
|
137
|
-
describe('Setup and teardown patterns', () => {
|
|
138
|
-
let fsMocks;
|
|
139
|
-
|
|
140
|
-
beforeEach(() => {
|
|
141
|
-
fsMocks = createFsMocks();
|
|
142
|
-
fsMocks.setupFsMocks();
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
afterEach(() => {
|
|
146
|
-
vi.clearAllMocks();
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
it('should demonstrate proper mock cleanup', () => {
|
|
150
|
-
fsMocks.mockReadFile.mockResolvedValue('test');
|
|
151
|
-
// Test that mock can be called
|
|
152
|
-
expect(fsMocks.mockReadFile).toBeDefined();
|
|
153
|
-
});
|
|
154
|
-
});
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
// Helper: TypeScript types for the mocks (for reference)
|
|
158
|
-
/**
|
|
159
|
-
* Type imports for reference (not executed):
|
|
160
|
-
*
|
|
161
|
-
* import type {
|
|
162
|
-
* FsMocks,
|
|
163
|
-
* MockKysely,
|
|
164
|
-
* AuthMocks,
|
|
165
|
-
* ViemMocks
|
|
166
|
-
* } from '@pasosdejesus/m/test-utils';
|
|
167
|
-
*
|
|
168
|
-
* These types are automatically available when you import the mocks.
|
|
169
|
-
*/
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2020",
|
|
4
|
-
"lib": ["dom", "dom.iterable", "esnext"],
|
|
5
|
-
"allowJs": true,
|
|
6
|
-
"skipLibCheck": true,
|
|
7
|
-
"strict": true,
|
|
8
|
-
"noEmit": true,
|
|
9
|
-
"esModuleInterop": true,
|
|
10
|
-
"module": "esnext",
|
|
11
|
-
"moduleResolution": "bundler",
|
|
12
|
-
"resolveJsonModule": true,
|
|
13
|
-
"isolatedModules": true,
|
|
14
|
-
"jsx": "react-jsx",
|
|
15
|
-
"incremental": true,
|
|
16
|
-
"plugins": [
|
|
17
|
-
{
|
|
18
|
-
"name": "next"
|
|
19
|
-
}
|
|
20
|
-
],
|
|
21
|
-
"paths": {
|
|
22
|
-
"@/*": ["./*"]
|
|
23
|
-
},
|
|
24
|
-
"types": ["@testing-library/jest-dom", "vitest", "vitest/globals"]
|
|
25
|
-
},
|
|
26
|
-
"include": [
|
|
27
|
-
"next-env.d.ts",
|
|
28
|
-
"**/*.ts",
|
|
29
|
-
"**/*.tsx",
|
|
30
|
-
"types/**/*.d.ts",
|
|
31
|
-
"**/*.test.ts",
|
|
32
|
-
"**/*.test.tsx",
|
|
33
|
-
"vitest.setup.ts"
|
|
34
|
-
],
|
|
35
|
-
"exclude": [
|
|
36
|
-
"node_modules"
|
|
37
|
-
]
|
|
38
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"console.test.d.ts","sourceRoot":"","sources":["../../src/test-utils/console.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
-
import { silenceConsole } from './console.js';
|
|
3
|
-
// U2 (m/REQ/49): silencing expected console noise, graduated from learn.tg's
|
|
4
|
-
// `NOISY_PATTERNS` wrapper.
|
|
5
|
-
function fakeConsole() {
|
|
6
|
-
const calls = {
|
|
7
|
-
log: [], warn: [], error: [], info: [], debug: [],
|
|
8
|
-
};
|
|
9
|
-
const target = {
|
|
10
|
-
log: (...args) => calls.log.push(args),
|
|
11
|
-
warn: (...args) => calls.warn.push(args),
|
|
12
|
-
error: (...args) => calls.error.push(args),
|
|
13
|
-
info: (...args) => calls.info.push(args),
|
|
14
|
-
debug: (...args) => calls.debug.push(args),
|
|
15
|
-
};
|
|
16
|
-
return { target, calls };
|
|
17
|
-
}
|
|
18
|
-
afterEach(() => vi.restoreAllMocks());
|
|
19
|
-
describe('silenceConsole (U2)', () => {
|
|
20
|
-
it('suppresses a suppressed log and lets the rest through', () => {
|
|
21
|
-
const { target, calls } = fakeConsole();
|
|
22
|
-
const handle = silenceConsole(['[retry]'], { console: target });
|
|
23
|
-
target.log('[retry] intento 1 falló');
|
|
24
|
-
target.log('resultado útil');
|
|
25
|
-
expect(calls.log).toEqual([['resultado útil']]);
|
|
26
|
-
expect(handle.suppressed).toEqual([['[retry] intento 1 falló']]);
|
|
27
|
-
handle.restore();
|
|
28
|
-
});
|
|
29
|
-
it('matches when any argument contains the pattern', () => {
|
|
30
|
-
const { target, calls } = fakeConsole();
|
|
31
|
-
const handle = silenceConsole(['AbortError'], { console: target });
|
|
32
|
-
target.warn('navegación cancelada', new Error('AbortError: aborted'));
|
|
33
|
-
expect(calls.warn).toHaveLength(0);
|
|
34
|
-
handle.restore();
|
|
35
|
-
});
|
|
36
|
-
it('wraps log, warn and error by default', () => {
|
|
37
|
-
const { target, calls } = fakeConsole();
|
|
38
|
-
const handle = silenceConsole(['ruido'], { console: target });
|
|
39
|
-
target.log('ruido A');
|
|
40
|
-
target.warn('ruido B');
|
|
41
|
-
target.error('ruido C');
|
|
42
|
-
target.info('ruido D'); // not wrapped by default
|
|
43
|
-
expect(calls.log).toHaveLength(0);
|
|
44
|
-
expect(calls.warn).toHaveLength(0);
|
|
45
|
-
expect(calls.error).toHaveLength(0);
|
|
46
|
-
expect(calls.info).toHaveLength(1);
|
|
47
|
-
handle.restore();
|
|
48
|
-
});
|
|
49
|
-
it('restores the original methods', () => {
|
|
50
|
-
const { target, calls } = fakeConsole();
|
|
51
|
-
const handle = silenceConsole(['ruido'], { console: target });
|
|
52
|
-
handle.restore();
|
|
53
|
-
target.log('ruido A');
|
|
54
|
-
expect(calls.log).toHaveLength(1);
|
|
55
|
-
});
|
|
56
|
-
// Defecto reportado por learn.tg: un namespace de módulo (objeto sin
|
|
57
|
-
// Symbol.toPrimitive) revienta con `String()`; no debe tumbar el log.
|
|
58
|
-
it('no revienta con objetos que no se pueden convertir a primitivo', () => {
|
|
59
|
-
const { target, calls } = fakeConsole();
|
|
60
|
-
const handle = silenceConsole(['[retry]'], { console: target });
|
|
61
|
-
const notPrimitive = Object.create(null);
|
|
62
|
-
expect(() => target.log('Module imported:', notPrimitive)).not.toThrow();
|
|
63
|
-
expect(() => target.warn(notPrimitive)).not.toThrow();
|
|
64
|
-
// No coincide con el patrón: pasa tal cual.
|
|
65
|
-
expect(calls.log).toHaveLength(1);
|
|
66
|
-
expect(handle.suppressed).toHaveLength(0);
|
|
67
|
-
handle.restore();
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
//# sourceMappingURL=console.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"console.test.js","sourceRoot":"","sources":["../../src/test-utils/console.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kysely-mocks.test.d.ts","sourceRoot":"","sources":["../../src/test-utils/kysely-mocks.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,126 +0,0 @@
|
|
|
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
|
-
// Regresión reportada por sivel3: el callback de `eb(col, in, cb)` debe traer
|
|
32
|
-
// un builder con `selectFrom` (subconsulta), como el `eb` real de Kysely.
|
|
33
|
-
it('el callback de eb(col, in, cb) arma subconsultas con selectFrom', () => {
|
|
34
|
-
const eb = createExpressionBuilder();
|
|
35
|
-
let inner;
|
|
36
|
-
eb('c.id', 'in', (sub) => {
|
|
37
|
-
inner = sub.selectFrom('sivel2_gen_acto as a').select('a.caso_id').where('a.x', '=', 1);
|
|
38
|
-
});
|
|
39
|
-
expect(inner).toBeTruthy();
|
|
40
|
-
expect(typeof inner.selectFrom).toBe('function');
|
|
41
|
-
});
|
|
42
|
-
it('eb.exists(cb) también recibe el builder de subconsulta', () => {
|
|
43
|
-
const eb = createExpressionBuilder();
|
|
44
|
-
const expr = eb.exists((sub) => sub.selectFrom('t').select('id'));
|
|
45
|
-
expect(expr.__expr).toBe('exists');
|
|
46
|
-
});
|
|
47
|
-
it('builds and/or/not/exists combinators', () => {
|
|
48
|
-
const eb = createExpressionBuilder();
|
|
49
|
-
expect(eb.or([{ a: 1 }]).__expr).toBe('or');
|
|
50
|
-
expect(eb.and([{ a: 1 }]).__expr).toBe('and');
|
|
51
|
-
expect(eb.not({ a: 1 }).__expr).toBe('not');
|
|
52
|
-
expect(eb.exists((b) => b).__expr).toBe('exists');
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
describe('MockKysely builder (U1)', () => {
|
|
56
|
-
it('exercises eb.or inside where, and a subquery as a table', () => {
|
|
57
|
-
const db = new MockKysely();
|
|
58
|
-
const eb = createExpressionBuilder();
|
|
59
|
-
const base = db.selectFrom('usuario').select('id').as('lb');
|
|
60
|
-
const exec = db
|
|
61
|
-
.selectFrom(base)
|
|
62
|
-
.selectAll()
|
|
63
|
-
.where((builder) => builder.or([builder('lb.id', '=', 1), builder('lb.id', '=', 2)]))
|
|
64
|
-
.where(eb.or([eb('a', '=', 1), eb('b', '=', 2)]));
|
|
65
|
-
expect(exec).toBe(db);
|
|
66
|
-
});
|
|
67
|
-
it('accepts where(sql`…`) and having', () => {
|
|
68
|
-
const db = new MockKysely();
|
|
69
|
-
const sql = createMockSql();
|
|
70
|
-
const q = db
|
|
71
|
-
.selectFrom('score')
|
|
72
|
-
.select('usuario_id')
|
|
73
|
-
.groupBy('usuario_id')
|
|
74
|
-
.where(sql `score > 0`)
|
|
75
|
-
.having(sql `count(*) > ${2}`);
|
|
76
|
-
expect(q).toBe(db);
|
|
77
|
-
});
|
|
78
|
-
it('supports fn aggregations by default and via select callbacks', () => {
|
|
79
|
-
const db = new MockKysely();
|
|
80
|
-
expect(db.fn.countAll().as).toBeTypeOf('function');
|
|
81
|
-
expect(db.fn.sum().as).toBeTypeOf('function');
|
|
82
|
-
const q = db.selectFrom('t').select(({ fn }) => [fn.countAll().as('n'), fn.avg('x').as('a')]);
|
|
83
|
-
expect(q).toBe(db);
|
|
84
|
-
});
|
|
85
|
-
it('runs transaction().execute(cb) with a fresh mock', async () => {
|
|
86
|
-
const db = new MockKysely({ execute: () => Promise.resolve([{ ok: true }]) });
|
|
87
|
-
const rows = await db.transaction().execute(async (trx) => trx.execute());
|
|
88
|
-
expect(rows).toEqual([{ ok: true }]);
|
|
89
|
-
});
|
|
90
|
-
it('chains onConflict(...).doNothing()', () => {
|
|
91
|
-
const db = new MockKysely();
|
|
92
|
-
const oc = db.insertInto('t').values({}).onConflict((b) => b.column('id').doNothing());
|
|
93
|
-
expect(oc).toBe(db);
|
|
94
|
-
});
|
|
95
|
-
it('exposes getExecutor().executeQuery through the injected sqlExecute', async () => {
|
|
96
|
-
const sqlExecute = (query) => Promise.resolve({ rows: [query] });
|
|
97
|
-
const db = new MockKysely({ sqlExecute });
|
|
98
|
-
const res = await db.getExecutor().executeQuery({ tag: 'x' });
|
|
99
|
-
expect(res.rows).toEqual([{ tag: 'x' }]);
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
describe('apiDbMocks (U1)', () => {
|
|
103
|
-
it('exports a wired eb and sql alongside the classic mocks', () => {
|
|
104
|
-
expect(apiDbMocks.mockEb).toBeTypeOf('function');
|
|
105
|
-
expect(apiDbMocks.mockSql.raw).toBeTypeOf('function');
|
|
106
|
-
const db = new apiDbMocks.MockKysely();
|
|
107
|
-
expect(db.selectFrom('x')).toBe(db);
|
|
108
|
-
});
|
|
109
|
-
// Regresión reportada por learn.tg: el tag `sql` volvió a delegar en
|
|
110
|
-
// `mockSqlExecute`, el patrón histórico para controlar el SQL.
|
|
111
|
-
it('el tag sql delega en mockSqlExecute', async () => {
|
|
112
|
-
apiDbMocks.mockSqlExecute.mockReset();
|
|
113
|
-
apiDbMocks.mockSqlExecute.mockResolvedValue({ rows: [{ total: '3' }] });
|
|
114
|
-
const fragment = apiDbMocks.mockSql `count(*)`;
|
|
115
|
-
const result = await fragment.execute({ tag: 'q' });
|
|
116
|
-
expect(apiDbMocks.mockSqlExecute).toHaveBeenCalledWith({ tag: 'q' });
|
|
117
|
-
expect(result.rows).toEqual([{ total: '3' }]);
|
|
118
|
-
});
|
|
119
|
-
it('resetMocks re-cablea el tag sql a mockSqlExecute', async () => {
|
|
120
|
-
apiDbMocks.resetMocks();
|
|
121
|
-
apiDbMocks.mockSqlExecute.mockResolvedValue({ rows: [{ ok: 1 }] });
|
|
122
|
-
const result = await apiDbMocks.mockSql `x`.execute({});
|
|
123
|
-
expect(result.rows).toEqual([{ ok: 1 }]);
|
|
124
|
-
});
|
|
125
|
-
});
|
|
126
|
-
//# sourceMappingURL=kysely-mocks.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kysely-mocks.test.js","sourceRoot":"","sources":["../../src/test-utils/kysely-mocks.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-mocks.test.d.ts","sourceRoot":"","sources":["../../src/test-utils/wallet-mocks.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { afterEach, describe, expect, it } from 'vitest';
|
|
2
|
-
import { assertUserVerification, createPrfCredential, detectPlatformSupport, evaluatePrf, hasRecentUserVerification, } from '../wallet/web-authn.js';
|
|
3
|
-
import { clearDestinations, isKnownDestination, rememberDestination, setDestinationsPrefix, } from '../wallet/destinations.js';
|
|
4
|
-
import { installLocalStorage, mockWebAuthn } from './wallet-mocks.js';
|
|
5
|
-
afterEach(() => {
|
|
6
|
-
clearDestinations();
|
|
7
|
-
});
|
|
8
|
-
describe('installLocalStorage', () => {
|
|
9
|
-
it('provides a working in-memory localStorage on globalThis', () => {
|
|
10
|
-
const storage = installLocalStorage();
|
|
11
|
-
storage.setItem('a', '1');
|
|
12
|
-
expect(globalThis.localStorage.getItem('a')).toBe('1');
|
|
13
|
-
expect(storage.length).toBe(1);
|
|
14
|
-
expect(storage.key(0)).toBe('a');
|
|
15
|
-
storage.removeItem('a');
|
|
16
|
-
expect(storage.getItem('a')).toBeNull();
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
describe('destinations with mocked localStorage', () => {
|
|
20
|
-
it('remembers and reports known destinations', () => {
|
|
21
|
-
installLocalStorage();
|
|
22
|
-
setDestinationsPrefix('test.destinations.');
|
|
23
|
-
const wallet = '0xABC';
|
|
24
|
-
const dest = '0xDeF';
|
|
25
|
-
expect(isKnownDestination(wallet, dest)).toBe(false);
|
|
26
|
-
rememberDestination(wallet, dest);
|
|
27
|
-
expect(isKnownDestination(wallet, dest)).toBe(true);
|
|
28
|
-
expect(globalThis.localStorage.getItem('test.destinations.0xabc')).toContain('0xdef');
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
describe('mockWebAuthn', () => {
|
|
32
|
-
it('reports platform support and creates a PRF credential', async () => {
|
|
33
|
-
const mock = mockWebAuthn();
|
|
34
|
-
const support = await detectPlatformSupport();
|
|
35
|
-
expect(support).toEqual({ webauthn: true, userVerifying: true, prf: true });
|
|
36
|
-
const credential = await createPrfCredential('alice');
|
|
37
|
-
expect(credential.prfEnabled).toBe(true);
|
|
38
|
-
expect(credential.credentialId).toBe(mock.credentialId);
|
|
39
|
-
});
|
|
40
|
-
it('evaluates the PRF and marks the user verified', async () => {
|
|
41
|
-
const secret = new Uint8Array(32).fill(9);
|
|
42
|
-
mockWebAuthn({ prfSecret: secret });
|
|
43
|
-
const result = await evaluatePrf('AQIDBA==', new Uint8Array(32));
|
|
44
|
-
expect(Array.from(result ?? [])).toEqual(Array.from(secret));
|
|
45
|
-
await assertUserVerification('AQIDBA==');
|
|
46
|
-
expect(hasRecentUserVerification()).toBe(true);
|
|
47
|
-
});
|
|
48
|
-
it('surfaces a cancellation as NotAllowedError', async () => {
|
|
49
|
-
mockWebAuthn({ cancelNext: true });
|
|
50
|
-
await expect(evaluatePrf('AQIDBA==', new Uint8Array(32))).rejects.toMatchObject({
|
|
51
|
-
name: 'NotAllowedError',
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
//# sourceMappingURL=wallet-mocks.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-mocks.test.js","sourceRoot":"","sources":["../../src/test-utils/wallet-mocks.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-setup.test.d.ts","sourceRoot":"","sources":["../../src/test-utils/wallet-setup.test.ts"],"names":[],"mappings":"AAGA,OAAO,mBAAmB,CAAA"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
// @vitest-environment jsdom
|
|
2
|
-
import { describe, expect, it } from 'vitest';
|
|
3
|
-
// Side effect: installs localStorage, fake-indexeddb and a WebAuthn mock.
|
|
4
|
-
import './wallet-setup.js';
|
|
5
|
-
import { createPrfCredential, detectPlatformSupport } from '../wallet/web-authn.js';
|
|
6
|
-
describe('wallet-setup preset (jsdom)', () => {
|
|
7
|
-
it('provides a DOM, a localStorage and a WebAuthn mock', async () => {
|
|
8
|
-
expect(typeof document).toBe('object');
|
|
9
|
-
expect(document.createElement('div')).toBeTruthy();
|
|
10
|
-
globalThis.localStorage.setItem('k', 'v');
|
|
11
|
-
expect(globalThis.localStorage.getItem('k')).toBe('v');
|
|
12
|
-
const support = await detectPlatformSupport();
|
|
13
|
-
expect(support).toEqual({ webauthn: true, userVerifying: true, prf: true });
|
|
14
|
-
const credential = await createPrfCredential('alice');
|
|
15
|
-
expect(credential.prfEnabled).toBe(true);
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
//# sourceMappingURL=wallet-setup.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-setup.test.js","sourceRoot":"","sources":["../../src/test-utils/wallet-setup.test.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,0EAA0E;AAC1E,OAAO,mBAAmB,CAAA;AAC1B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAEnF,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,CAAC,OAAO,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAElD,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACzC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAEtD,MAAM,OAAO,GAAG,MAAM,qBAAqB,EAAE,CAAA;QAC7C,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;QAE3E,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAA;QACrD,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"engines.test.d.ts","sourceRoot":"","sources":["../../src/util/engines.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { mkdtemp, mkdir, writeFile, rm } from 'node:fs/promises';
|
|
3
|
-
import { tmpdir } from 'node:os';
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
-
import { discoverEngines, discoverEnginesUpward, findPackagesDir, isEnginePackage } from './engines.js';
|
|
6
|
-
async function tmpRoot() {
|
|
7
|
-
return mkdtemp(join(tmpdir(), 'm-engines-'));
|
|
8
|
-
}
|
|
9
|
-
describe('discoverEngines', () => {
|
|
10
|
-
it('returns manifests from packages/*/engine.json', async () => {
|
|
11
|
-
const root = await tmpRoot();
|
|
12
|
-
try {
|
|
13
|
-
await mkdir(join(root, 'packages', 'foo'), { recursive: true });
|
|
14
|
-
await writeFile(join(root, 'packages', 'foo', 'engine.json'), JSON.stringify({ name: 'foo', version: '1.0.0', stage: 'local' }));
|
|
15
|
-
const engines = await discoverEngines(root);
|
|
16
|
-
expect(engines).toHaveLength(1);
|
|
17
|
-
expect(engines[0].name).toBe('foo');
|
|
18
|
-
}
|
|
19
|
-
finally {
|
|
20
|
-
await rm(root, { recursive: true, force: true });
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
it('returns [] when there is no packages dir', async () => {
|
|
24
|
-
const root = await tmpRoot();
|
|
25
|
-
try {
|
|
26
|
-
expect(await discoverEngines(root)).toEqual([]);
|
|
27
|
-
}
|
|
28
|
-
finally {
|
|
29
|
-
await rm(root, { recursive: true, force: true });
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
describe('findPackagesDir', () => {
|
|
34
|
-
it('finds packages dir upward from a nested cwd', async () => {
|
|
35
|
-
const root = await tmpRoot();
|
|
36
|
-
try {
|
|
37
|
-
await mkdir(join(root, 'packages'), { recursive: true });
|
|
38
|
-
const nested = join(root, 'apps', 'nextjs');
|
|
39
|
-
await mkdir(nested, { recursive: true });
|
|
40
|
-
expect(await findPackagesDir(nested)).toBe(join(root, 'packages'));
|
|
41
|
-
}
|
|
42
|
-
finally {
|
|
43
|
-
await rm(root, { recursive: true, force: true });
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
it('returns null when not found', async () => {
|
|
47
|
-
const root = await tmpRoot();
|
|
48
|
-
try {
|
|
49
|
-
expect(await findPackagesDir(root)).toBeNull();
|
|
50
|
-
}
|
|
51
|
-
finally {
|
|
52
|
-
await rm(root, { recursive: true, force: true });
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
describe('discoverEnginesUpward', () => {
|
|
57
|
-
it('discovers engines from a nested cwd', async () => {
|
|
58
|
-
const root = await tmpRoot();
|
|
59
|
-
try {
|
|
60
|
-
await mkdir(join(root, 'packages', 'foo'), { recursive: true });
|
|
61
|
-
await writeFile(join(root, 'packages', 'foo', 'engine.json'), JSON.stringify({ name: 'foo', version: '1.0.0', stage: 'local' }));
|
|
62
|
-
const nested = join(root, 'apps', 'nextjs');
|
|
63
|
-
await mkdir(nested, { recursive: true });
|
|
64
|
-
const engines = await discoverEnginesUpward(nested);
|
|
65
|
-
expect(engines.map(e => e.name)).toEqual(['foo']);
|
|
66
|
-
}
|
|
67
|
-
finally {
|
|
68
|
-
await rm(root, { recursive: true, force: true });
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
describe('isEnginePackage', () => {
|
|
73
|
-
it('detects @pasosdejesus/m-* packages by convention', () => {
|
|
74
|
-
expect(isEnginePackage('@pasosdejesus/mpdj', '/nonexistent')).toBe(true);
|
|
75
|
-
expect(isEnginePackage('@pasosdejesus/m', '/nonexistent')).toBe(false);
|
|
76
|
-
expect(isEnginePackage('lodash', '/nonexistent')).toBe(false);
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
//# sourceMappingURL=engines.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"engines.test.js","sourceRoot":"","sources":["../../src/util/engines.test.ts"],"names":[],"mappings":"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"}
|