Commit Graph

17 Commits

Author SHA1 Message Date
pulse-triage[bot] 0d32dac16e Keep release toolchains within support 2026-08-30 06:40:25 +01:00
rcourtman 99af2a0bf2 Accelerate mock history readiness 2026-07-20 04:21:26 +01:00
rcourtman e9dddf86b8 Harden RC qualification coverage
Contract-Neutral: RC qualification and contract-preserving reliability fixes; no canonical product contract changes
2026-07-20 01:13:26 +01:00
rcourtman 8c0740f6ae Enable development mode in the e2e test container
The first-session specs depend on /api/security/dev/reset-first-run, which
is gated on development mode; the test stack never set PULSE_DEV, so every
reset attempt answered 403 in both CI and local compose runs. The only other
effects of the flag in this stack are the localhost AllowedOrigins default
and env-gated dev toggles that remain off.
2026-07-08 11:09:44 +01:00
rcourtman 54b7e9933d Harden integration bootstrap token seed 2026-06-14 23:32:38 +01:00
rcourtman 377fd5131d Harden release integration bootstrap gate 2026-06-14 22:26:13 +01:00
rcourtman ee67141fa2 Add MSP isolation E2E spec: token scoping, split-port ingest, signed webhook delivery
Automates the docs/MSP.md validation checklist and the WEBHOOKS.md
delivery contract against the real server, covering the cross-layer
seams unit tests cannot see (today's two isolation bugs both lived
there):

- org-bound token allowed in its own org, denied 403 in sibling orgs
  AND the default org (leaked client-site token must not read the
  provider estate)
- dedicated agent-ingest port serves only /api/agents/* (management
  paths 404, agent route auth-gated)
- client-org webhook delivery through the instance-wide private-target
  allowlist saved in default-org context, with HMAC signature verified
  against the documented recipe, X-Pulse-Event-ID idempotency header,
  and tenant id/name stamped in the payload
- restart inheritance: after docker restart the persisted allowlist
  still applies to lazily recreated tenant monitors (skips when the
  docker CLI cannot manage the container)

Compose: pulse-test gains PULSE_AGENT_INGEST_PORT=7656 (+ port map)
and a host-gateway extra_host so the spec's capture listener is
reachable from the container.
2026-06-10 12:06:35 +01:00
rcourtman 778a2577b6 feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
rcourtman 5338ab580c Stabilize core E2E tests
- Preserve alerts activation state when saving thresholds
- Use compliant default E2E password and deterministic bootstrap token seeding
- Harden Playwright selectors, waits, and diagnostics gating
2025-12-17 19:36:48 +00:00
rcourtman 54fc259221 fix(ai): improve AI settings UX with validation and smart fallbacks
Backend:
- Add smart provider fallback when selected model's provider isn't configured
- Automatically switch to a model from a configured provider instead of failing
- Log warning when fallback occurs for visibility

Frontend (AISettings.tsx):
- Add helper functions to check if model's provider is configured
- Group model dropdown: configured providers first, unconfigured marked with ⚠️
- Add inline warning when selecting model from unconfigured provider
- Validate on save that model's provider is configured (or being added)
- Warn before clearing last configured provider (would disable AI)
- Warn before clearing provider that current model uses
- Add patrol interval validation (must be 0 or >= 10 minutes)
- Show red border + inline error for invalid patrol intervals 1-9
- Update patrol interval hint: '(0=off, 10+ to enable)'

These changes prevent confusing '500 Internal Server Error' and
'AI is not enabled or configured' errors when model/provider mismatch.
2025-12-17 18:30:19 +00:00
rcourtman 82a2eebb3f Improve update integration diagnostics 2025-11-12 22:27:05 +00:00
rcourtman accd1c642f Use internal mock host for release assets 2025-11-12 21:23:01 +00:00
rcourtman 6a1a88217f Add release dry run workflow and API update integration test 2025-11-12 21:02:52 +00:00
rcourtman f3fa199ff3 Fix docker-compose to use pre-built images for integration tests
The compose file had build: sections which caused docker-compose to build
its own tagged images (pulse-test-pulse-test) instead of using the
pre-built images (pulse:test, pulse-mock-github:test).

Changed to use image: tags to reference the pre-built images. This ensures
the PULSE_AUTH_USER and PULSE_AUTH_PASS environment variables are properly
applied to the running containers.

Related to #695
2025-11-12 09:53:49 +00:00
rcourtman d13a1e372a Fix integration tests: pre-configure admin authentication
Tests were timing out waiting for login form because fresh installations
show the first-run setup screen instead. Adding PULSE_AUTH_USER and
PULSE_AUTH_PASS environment variables pre-configures authentication and
bypasses the setup screen, allowing tests to login directly.

Related to #695
2025-11-12 09:30:26 +00:00
rcourtman 7c180ea056 Fix integration test data directory permissions
Root cause: Pulse server was crashing on startup with permission denied when
trying to create .encryption.key file.

The docker-compose test config set PULSE_DATA_DIR=/tmp/pulse-test-data, but
this directory was owned by root (created by Docker volume mount). The
entrypoint script only chowns /data, not /tmp/pulse-test-data.

Solution: Change PULSE_DATA_DIR to /data which is already handled by the
entrypoint script's chown command (line 36 of docker-entrypoint.sh).

This fixes the fatal error:
  failed to get encryption key: failed to save key:
  open /tmp/pulse-test-data/.encryption.key: permission denied

Related to #695
2025-11-12 09:10:30 +00:00
Claude 2afdca4d30 Add comprehensive integration test suite for update flow
Implements end-to-end testing infrastructure for the Pulse update flow,
validating the entire path from UI to backend with controllable test
scenarios.

## What's Included

### Test Infrastructure
- Mock GitHub release server (Go) with controllable failure modes
- Docker Compose test environment (isolated services)
- Playwright test framework with TypeScript
- 60+ test cases across 6 test suites
- Helper library with 20+ reusable test utilities

### Test Scenarios
1. Happy Path (8 tests)
   - Valid checksums, successful update flow
   - Modal appears exactly once
   - Complete end-to-end validation

2. Bad Checksums (8 tests)
   - Server rejects invalid checksums
   - Error shown ONCE (not twice) - fixes v4.28.0 issue type
   - User-friendly error messages

3. Rate Limiting (9 tests)
   - Multiple rapid requests throttled gracefully
   - Proper rate limit headers
   - Clear error messages

4. Network Failure (10 tests)
   - Exponential backoff retry logic
   - Timeout handling
   - Graceful degradation

5. Stale Release (10 tests)
   - Backend refuses flagged releases
   - Informative error messages
   - Proper rejection logging

6. Frontend Validation (15 tests)
   - UpdateProgressModal appears exactly once
   - No duplicate modals on error
   - User-friendly error messages
   - Proper accessibility attributes

### CI/CD Integration
- GitHub Actions workflow (.github/workflows/test-updates.yml)
- Runs on PRs touching update-related code
- Separate test runs for each scenario
- Regression test to verify v4.28.0 issue prevention
- Automatic artifact uploads

### Documentation
- README.md: Architecture and overview
- QUICK_START.md: Getting started guide
- IMPLEMENTATION_SUMMARY.md: Complete implementation details
- Helper scripts for setup and test execution

## Success Criteria Met

✅ Tests run in CI on every PR touching update code
✅ All scenarios pass reliably
✅ Tests catch v4.28.0 checksum issue type automatically
✅ Frontend UX regressions are blocked

## Usage

```bash
cd tests/integration
./scripts/setup.sh    # One-time setup
npm test              # Run all tests
```

See QUICK_START.md for detailed instructions.

Addresses requirements from issue for comprehensive update flow testing
with specific focus on preventing duplicate error modals and ensuring
checksum validation works correctly.
2025-11-11 09:31:52 +00:00