Commit Graph
80 Commits
Author SHA1 Message Date
thePR0M3TH3AN 32cd6dc2a2 Merge pull request #2222 from PR0M3TH3AN/nip04-worker-tests-17203445750544777231
🧪 Add tests for NIP-04 worker client
2026-02-07 20:54:07 -05:00
google-labs-jules[bot]andPR0M3TH3AN 072be49068 test: add tests for dmDecryptWorkerClient
- Create `tests/nostr/dmDecryptWorkerClient.test.mjs` to test `decryptDmInWorker`.
- Implement `MockWorker` to simulate worker behavior in `node:test`.
- Cover scenarios: success, error response, error event, timeout, invalid input, and worker availability.
- Use dynamic imports with cache busting to reset singleton state between tests.
- Ensure `devLogger` warnings are verified by mocking `console.warn` correctly.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 01:17:49 +00:00
google-labs-jules[bot]andPR0M3TH3AN 76b385af1b Add tests for NIP-04 worker client wrapper
- Implement `MockWorker` class to simulate Web Worker behavior (postMessage, events).
- Add unit tests for `js/nostr/nip04WorkerClient.js` covering:
    - Happy path encryption.
    - Worker error responses.
    - Worker error events.
    - Timeout handling.
    - Input validation.
    - Worker unavailability/creation failure.
- Use cache-busting dynamic imports to isolate test cases and reset module state.
- Ensure global `Worker` and `console` mocks are properly restored.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 01:16:04 +00:00
thePR0M3TH3AN 018d3ee7a2 Merge pull request #2220 from PR0M3TH3AN/perf-channel-profile-scan-9174167552854109818
⚡ Optimize channel profile event lookup using author index
2026-02-07 19:42:43 -05:00
google-labs-jules[bot]andPR0M3TH3AN 67aa8ad2aa Optimize channel profile event lookup with author index
- Replaced `NostrClient.rawEvents` standard Map with `EventsMap`
- Implemented `EventsMap` to maintain an author-based index
- Updated `js/channelProfile.js` to use `getEventsByAuthor` for efficient lookup
- Added unit tests for `EventsMap`
- Added benchmark script verifying ~15x performance improvement (637ms -> 41ms for 1M events)

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 00:38:42 +00:00
thePR0M3TH3AN 15e5d7bcf5 Merge pull request #2215 from PR0M3TH3AN/testing-default-client-init-1150398572683593464
🧪 Add unit tests for default NostrClient initialization
2026-02-07 19:37:32 -05:00
google-labs-jules[bot]andPR0M3TH3AN d99a5b1dca test: verify default client initialization and configuration
Add `tests/nostr/defaultClient.test.mjs` to ensure that `nostrClient` is correctly exported as a singleton, initialized with `DEFAULT_RELAY_URLS`, and registered in the client registry.
This test handles global mocks (`WebSocket`, `localStorage`) via dynamic imports to verify the module's top-level execution.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 00:33:37 +00:00
thePR0M3TH3AN f0363ecf4c Merge branch 'unstable' into add-count-diagnostics-tests-5953252333821392151 2026-02-07 19:14:21 -05:00
thePR0M3TH3AN 6001b44c28 Merge pull request #2200 from PR0M3TH3AN/test/count-diagnostics-coverage-4678245393880204618
🧪 Add tests for count diagnostics
2026-02-07 19:12:41 -05:00
google-labs-jules[bot]andPR0M3TH3AN 1cedccbdf3 Add tests for count diagnostics
Added `tests/nostr/countDiagnostics.test.mjs` to test `js/nostr/countDiagnostics.js`.
Covered `isVerboseDiagnosticsEnabled` logic, including `window` overrides and fallback.
Covered `logRelayCountFailure` and other logging functions, verifying message content, throttling, and error suppression.
Ensured that logging respects the verbose mode flag.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 00:09:19 +00:00
google-labs-jules[bot]andPR0M3TH3AN ab75153e0b test: add tests for max listener diagnostics logic
Exports `collectCandidateStrings` and `shouldSuppressWarning` from `js/nostr/maxListenerDiagnostics.js` to enable unit testing.
Adds `tests/nostr/maxListenerDiagnostics.test.mjs` to test the warning suppression logic and verify the `process.emitWarning` patch side effect.
Fixes missing `jsdom` dependency issue by running `npm install`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-07 23:57:14 +00:00
google-labs-jules[bot]andPR0M3TH3AN 549b184861 Add unit tests for count diagnostics module
Added a new test file `tests/nostr/countDiagnostics.test.mjs` to cover:
- `isVerboseDiagnosticsEnabled` configuration flag logic.
- Logging behavior for count failures (relay, timeout, rebroadcast, view).
- Throttling logic to ensure repeated warnings are suppressed.
- Error suppression for connection failures.

The tests use module reloading with cache busting to ensure isolation between test cases, as the module maintains internal state (`seenWarningKeys`).
Mocks `console.warn` to verify logging output without polluting stdout.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-07 23:51:47 +00:00
google-labs-jules[bot]andPR0M3TH3AN aefd6308a2 🧪 Add tests for DM decrypt diagnostics
- Added unit tests for `summarizeDmEventForLog` covering null/invalid inputs, valid events, and edge cases.
- Added unit tests for `sanitizeDecryptError` covering null/invalid inputs, string errors, and error objects.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-07 23:11:47 +00:00
google-labs-jules[bot]andPR0M3TH3AN 1e53070717 perf: batch video updates in subscribeVideos to reduce UI thrashing
Updates `NostrClient.subscribeVideos` to buffer incoming events and invoke the `onVideo` callback once per flush cycle with an array of updates, instead of once per video. This significantly reduces redundant sorting, filtering, and persistence operations in `NostrService`.

Also optimizes `populateNip71MetadataForVideos` to run as a single batched request per flush cycle.

BREAKING CHANGE: `subscribeVideos` callback now receives `Video[]` instead of `Video`. All internal consumers have been updated.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-02 17:04:55 +00:00
google-labs-jules[bot]andPR0M3TH3AN 2f33992192 Fix dependencies (jsdom/nostr-tools conflict) and WebTorrent regression
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 13:32:00 +00:00
google-labs-jules[bot]andPR0M3TH3AN ffd8f0e23c fix: Sync package-lock.json and fix tests for nostr-tools v2
- Synced `package-lock.json` with `package.json` to resolve `npm ci` failures.
- Updated `nostr-tools` dependencies to resolve conflicts.
- Fixed `SyntaxError` in `tests/nostr-login-permissions.test.mjs` caused by duplicate code.
- Updated `js/nostr/client.js`, `js/nostr/publishHelpers.js`, `js/nostr/adapters/nsecAdapter.js`, `js/nostr/nip46Client.js` to use `hexToBytes` helper when calling `nostr-tools` functions, as v2+ expects `Uint8Array` instead of hex strings.
- Added `hexToBytes` helper in `js/utils/hex.js`.
- Updated tests (`tests/nostr/dm-direct-message-flow.test.mjs`, `tests/nostr-send-direct-message.test.mjs`, `tests/nostr-private-key-signer.test.mjs`, `tests/nostr/nip46Client.test.js`) to use `Uint8Array` for keys where required.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 19:56:44 +00:00
google-labs-jules[bot]andPR0M3TH3AN 14dfedc98d Fix NIP-07 adapter race condition and CI test crashes
- Modified `js/nostr/adapters/nip07Adapter.js` to use dynamic getters for capabilities.
- Updated `js/nostr/client.js` to respect getter descriptors on signers.
- Fixed `tests/nostr-login-permissions.test.mjs` and `tests/nostr/adapters.test.mjs` to safely handle read-only global properties in CI.
- Added hardened regression test `tests/nostr/nip07Adapter-race-condition.test.mjs`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 19:04:55 +00:00
google-labs-jules[bot]andPR0M3TH3AN d38585f376 Fix NIP-07 adapter race condition with lazy encryption capability injection
- Modified `js/nostr/adapters/nip07Adapter.js` to use dynamic getters for `capabilities` (nip04/nip44) and unconditionally expose encryption methods.
- Updated `js/nostr/client.js` to use `Object.getOwnPropertyDescriptor` when handling `signer.capabilities`.
- Added `tests/nostr/nip07Adapter-race-condition.test.mjs` to verify the fix.
- Fixed test environment issues in `tests/nostr/adapters.test.mjs` and `tests/nostr-login-permissions.test.mjs`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 18:47:08 +00:00
google-labs-jules[bot]andPR0M3TH3AN 959082d327 test(ai): add unit tests for attachmentService, syncMetadataStore, s3Service, dmSignalEvents (agent)
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-28 11:31:13 +00:00
google-labs-jules[bot]andPR0M3TH3AN 82b9c4ae0b fix(tests): update watchHistory mocks and storage tests
- Update mock pool objects in `tests/nostr/watchHistory.test.js` to include `async list() { return []; }` to prevent `TypeError: pool.list is not a function`.
- Update storage pruning tests to use `profileCache` semantics (per-user storage) by setting active profile and using correct storage keys.
- Ensure `profileCache.activePubkey` is set in tests that rely on persistence.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 03:32:33 +00:00
google-labs-jules[bot]andPR0M3TH3AN 4d94b5030f Fix failing integration-remote-flow test due to removed login() method
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 03:13:14 +00:00
google-labs-jules[bot]andPR0M3TH3AN ddcc777561 fix(test): resolve DM flow test timeouts and hangs
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-27 02:42:31 +00:00
google-labs-jules[bot]andPR0M3TH3AN 6a2432dd4c fix(nostr): anchor hashtag preferences fetch to local state
- Updated `NostrClient.fetchListIncrementally` to accept a `since` override.
- Updated `HashtagPreferencesService.load` to pass `since` based on local cache timestamp.
- Ensures preferences are refreshed if local state is stale or missing, overriding potentially incorrect `SyncMetadataStore` state.
- Added regression tests for `fetchListIncrementally` since parameter logic.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-26 19:21:38 +00:00
google-labs-jules[bot] 603b0b1a69 test(ai): add unit tests for NostrClient and NostrService (agent) 2026-01-26 14:09:53 +00:00
thePR0M3TH3AN 88ac663f18 Merge branch 'unstable' into ai/tests-nostr-state-20250522-1996916389475353061 2026-01-26 06:52:38 -05:00
google-labs-jules[bot] 9cdc91a186 test(ai): fix sessionActor tests and enhance profileCache coverage
- Fixed `tests/nostr/sessionActor.test.js` to remove outdated plain-text storage test and use encrypted payload for cleanup test.
- Enhanced `tests/state/profile-cache.test.mjs` with tests for:
    - Event emission (`profileChanged`)
    - TTL expiration (using `watchHistory`)
    - XSS sanitization in `setProfile`
- Removed redundant/competing `tests/state/profileCache.test.mjs`.
- Verified tests pass with `scripts/run-targeted-tests.mjs`.
2026-01-26 11:35:18 +00:00
google-labs-jules[bot] 0077f0c25d docs(ai): improve onboarding steps (agent)
- Update CONTRIBUTING.md and README.md to clarify npm run format scope and recommend test shards
- Fix broken unit tests in sessionActor and tagPreferenceMenu to unblock shards
2026-01-26 09:09:40 +00:00
google-labs-jules[bot] b980f3a9ba Fix NIP-07 login by waiting for extension injection
Implemented `waitForNip07Extension` polling in `js/nostr/client.js` to address race conditions where `window.nostr` is not immediately available.
Updated `js/nostr/nip07Permissions.js` with the polling logic and added unit tests.
2026-01-25 16:34:07 +00:00
google-labs-jules[bot] cf92269468 fix(tests): resolve unit test failures in comment-events.test.mjs
- Update `publishComment` to return standardized string error codes (e.g., `session-actor-publish-blocked`, `auth-required`) instead of raw Error objects, ensuring consistency with test expectations.
- Introduce `resolveActiveSigner` dependency injection in `publishComment` to allow tests to supply mock signers, resolving failures where `getActiveSigner()` returned null.
- Expose `commentCache` via `__testExports` in `js/nostr/commentEvents.js` and clear it in `tests/nostr/comment-events.test.mjs` via `afterEach` to prevent test state pollution.
- Update test assertions to match the standardized error codes.

This resolves CI failures related to mismatched error messages and shared state in comment event tests.
2026-01-23 17:05:02 +00:00
google-labs-jules[bot] c3770828c0 test(ai): add unit tests for nostr, services, and state (agent) 2026-01-21 11:23:58 +00:00
thePR0M3TH3AN facad9dd80 Merge pull request #1438 from PR0M3TH3AN/ai/ci-health-20250120-14890971644498739041
CI Health: Fix flaky DM tests
2026-01-20 08:01:42 -05:00
google-labs-jules[bot] 6e55c37d50 chore(ai): CI health fixes (flaky tests)
- Fix `tests/dm-normalization.test.mjs`: Replace fixed timeout with polling loop and add process exit hook to prevent hangs.
- Fix `tests/nostr/dm-direct-message-flow.test.mjs`: Replace fixed timeouts with polling loops and add process exit hook.
- Fix `detect_flakiness.mjs` path resolution.
2026-01-20 12:39:19 +00:00
google-labs-jules[bot] 684f93f6ed test(ai): add unit tests for LinkPreviewService and SessionActor
- Add `tests/services/link-preview-service.test.mjs`: Tests for caching, fetching, and TTL logic using `fake-indexeddb` and `jsdom`.
- Add `tests/nostr/session-actor.test.mjs`: Tests for encryption/decryption and persistence of session actor.
- Refactor `tests/app/similar-content.test.mjs`: Update to test `SimilarContentController` directly, fixing regression caused by architectural changes.
- Ensure tests are self-contained with necessary polyfills (IndexedDB, LocalStorage).
2026-01-20 11:34:30 +00:00
thePR0M3TH3AN 89e82778d6 Add DM test suites and headless e2e CI 2026-01-19 13:43:13 -05:00
google-labs-jules[bot] b285819145 fix(storage): resolve db connection leaks and patch test environment
- Added `db.close()` to exported functions in `js/storage/dmDb.js` to ensure IndexedDB connections are released.
- Patched `tests/test-helpers/setup-localstorage.mjs` to include a `structuredClone` polyfill required by `fake-indexeddb` in Node.js environments.
- Updated `tests/dm-normalization.test.mjs`, `tests/dm-db.test.mjs`, and `tests/nostr/dm-direct-message-flow.test.mjs` to conditionally initialize `fake-indexeddb` to prevent global conflicts.
- Verified fixes by running unit tests and the `scripts/agent/interop-test.mjs` E2E suite.
2026-01-19 16:24:07 +00:00
thePR0M3TH3AN 2b79021184 Merge pull request #1385 from PR0M3TH3AN/codex/add-tests-for-normalization-and-integration
Add DM normalization, DB persistence, and integration tests for direct messages
2026-01-19 09:32:35 -05:00
thePR0M3TH3AN 8f04692165 Add DM normalization and integration tests 2026-01-19 09:32:14 -05:00
google-labs-jules[bot] 41da0a8361 test(ai): add unit tests for cache, sessionActor, and r2Service (agent)
- Added `tests/state/cache.test.mjs` to test profile persistence and URL health caching.
- Added `tests/nostr/sessionActor.test.mjs` to test session key encryption/decryption and storage.
- Added `tests/services/r2Service.test.mjs` to test R2 settings management and bucket configuration.
- Exposed `__testExports` in `js/nostr/sessionActor.js` to allow testing of private helper functions.
- Used `tests/test-helpers/setup-localstorage.mjs` to mock browser environments in all new tests.
2026-01-19 11:31:46 +00:00
thePR0M3TH3AN 84e9dcd2c1 Add nostr adapter and registry tests 2026-01-18 11:25:22 -05:00
google-labs-jules[bot] 86ffb8cb2a Define centralized cache policies and wire them into fetchers 2026-01-17 19:12:09 +00:00
google-labs-jules[bot] b059d66d80 Fix watch history mobile layout and sort order
- Updated CSS for `.watch-history-card` to use `flex-col` on mobile for stacked layout, switching to `sm:flex-row` on larger screens.
- Added `w-full` to `.watch-history-card__thumbnail` on mobile to constrain image width.
- Fixed a bug in `js/nostr/watchHistory.js` where `computeWatchHistoryFingerprintForItems` was sorting the live history array in-place by ID, causing the UI to display an incorrect (non-chronological) order. The fix involves creating a shallow copy before sorting.
- Updated `tests/nostr/watchHistory.test.js` to verify behavior against the current storage version (`v5`).
2026-01-17 13:35:37 +00:00
google-labs-jules[bot] 6735eb0dea Fix comment event validation test case
Added missing root kind (K) and root author (P) tags to the mock event in `tests/nostr/comment-events.test.mjs`. This fixes a test failure where the event was being rejected by strict validation logic in `isVideoCommentEvent` because the tags derived from the definition address were not present in the event itself.

The added tags use whitespace and mixed casing to preserve the test's intent of verifying robust tag parsing.
2026-01-14 03:42:53 +00:00
google-labs-jules[bot] f3075b8929 Fix unit tests for comment events and improve target normalization logic
- Updated `subscribeVideoComments` test to expect `#A` filter keys (uppercase), matching the implementation and other tests.
- Improved `normalizeCommentTarget` in `js/nostr/commentEvents.js` to correctly derive `parentKind` and `parentAuthorPubkey` from the `parentCommentEvent` object if available.
- Enhanced `parentAuthorRelay` resolution to look up the specific `p` tag for the author pubkey instead of defaulting to the first found `p` tag.
- Updated `publishComment` test expectations to remove duplicate tags (implementation correctly deduplicates) and reflect improved metadata derivation (correct `K` tag and `P` relay).
- Added async wait to `subscribeVideoComments` test to prevent race condition in unsubscribe assertion.
2026-01-14 03:22:25 +00:00
google-labs-jules[bot] d6882fb5bb Fix CI, environment, linting, and unit test issues
- Fix circular dependency in `js/adminListStore.js` by importing from `js/nostrClientRegistry.js`.
- Update `js/services/hashtagPreferencesService.js` to include legacy kind 30005 in filters.
- Fix JSDOM mocking in `tests/modal-accessibility.test.mjs` (navigator getter) and `UploadModal` selectors.
- Add `getRoot()` to `js/ui/components/UploadModal.js` for API consistency.
- Update `tests/magnet-utils.test.mjs` expectations to reflect removed default tracker.
- Mock `ensureActiveSignerForPubkey` in `tests/moderation/submit-report.test.mjs`.
- Fix mock loader path in `tests/moderation/trust-seeds.test.mjs` to target `trustBootstrap.js`.
- Fix duplicate pointer tags in `js/nostrEventSchemas.js`'s `buildCommentEvent`.
- Update `tests/nostr/comment-events.test.mjs` and `tests/comment-event-builder.test.mjs` to match current code behavior (legacy kinds, unique tags).
2026-01-13 20:32:06 +00:00
thePR0M3TH3AN 891226697d Simplify watch history pipeline 2026-01-06 18:53:27 -05:00
thePR0M3TH3AN 5979d4e25f Use uppercase tags for comment events 2026-01-06 16:22:49 -05:00
thePR0M3TH3AN 3996986e63 Remove nostr shim and retarget imports 2026-01-06 15:32:21 -05:00
thePR0M3TH3AN ba666bdaba Refactor watch history payload building 2026-01-03 13:57:46 -05:00
thePR0M3TH3AN 8a111d8ee8 Handle lowercase root identifiers when fetching comments 2025-11-12 20:56:15 -05:00
thePR0M3TH3AN c882139e90 Fix comment event matching for uppercase addresses 2025-11-04 16:52:12 -05:00