Files
attune/work-summary/features/e2e-test-schema-issues.md
2026-02-04 17:46:30 -06:00

145 lines
3.6 KiB
Markdown

# E2E Test Schema Mismatch Issues
**Date:** 2026-01-23
**Status:** 🔴 BLOCKING - E2E tests cannot run due to API schema mismatches
**Priority:** P0 - Must fix before tests can be used
---
## Overview
The E2E test suite was written based on an expected/older API schema, but the actual Attune API implementation uses different field names and structures. This causes widespread test failures across all tiers.
**Root Cause:** Tests were developed before/alongside the API, and the schemas diverged during implementation.
---
## Issues Discovered
### 1. Pack Registration Endpoint ✅ FIXED
**Problem:**
- Tests called `client.register_pack(pack_dir)`
- Method sent to `POST /api/v1/packs` (wrong endpoint)
- Actual endpoint is `POST /api/v1/packs/register`
**API Schema:**
```json
{
"path": "/path/to/pack",
"skip_tests": true,
"force": false
}
```
**Fix Applied:**
- Updated `client.register_pack()` to use `/api/v1/packs/register`
- Added `skip_tests` (default: `True`) and `force` (default: `False`) parameters
- Updated `create_test_pack()` to get existing pack before registering
**Status:** ✅ RESOLVED
---
### 2. Trigger Field Names ✅ FIXED (partially)
**Problem:**
- Tests expect: `name`, `type`, `parameters`
- API expects: `ref`, `label`, `description`, `param_schema`, `out_schema`, `enabled`
**Expected by Tests:**
```python
{
"name": "my_timer",
"type": "interval_timer",
"parameters": {"interval_seconds": 5}
}
```
**Actual API Schema (CreateTriggerRequest):**
```json
{
"ref": "pack.trigger_name",
"pack_ref": "pack",
"label": "My Timer",
"description": "Timer description",
"param_schema": {...},
"out_schema": {...},
"enabled": true
}
```
**API Response:**
```json
{
"id": 34,
"ref": "test_pack.interval_5s_12345",
"label": "interval_5s_12345",
"pack": 11,
"pack_ref": "test_pack",
"enabled": true,
"webhook_enabled": false,
...
}
```
**Fix Applied:**
- Updated `client.create_trigger()` to accept both legacy and new parameters
- Maps `name``label`
- Generates `ref` from `pack_ref.name` if not provided
- Ignores `trigger_type` and `parameters` (not used by API)
**Remaining Issues:**
- Tests still reference `trigger['name']` in assertions
- Tests expect timer configuration in `parameters` field
- **Timer triggers don't actually store interval/cron/date config in trigger table**
**Status:** ⚠️ PARTIAL - Client fixed, tests need updates
---
### 3. Timer Architecture Misunderstanding 🔴 CRITICAL
**Problem:**
Tests assume timers work like this:
```
Trigger (with timer config) → Rule → Action
```
Actual Attune architecture:
```
Trigger (event type) ← Sensor (monitors & fires) → Event → Rule → Action
```
**Implications:**
- Creating a trigger alone doesn't create a timer
- Need to create **both** trigger AND sensor for timers to work
- Sensor contains the actual timer configuration (interval_seconds, cron expression, etc.)
- Tests don't create sensors at all
**Example:**
```python
# What tests do:
trigger = client.create_trigger(
name="interval_timer",
type="interval_timer",
parameters={"interval_seconds": 5}
)
# ❌ This creates a trigger but NO sensor → timer never fires
# What's actually needed:
trigger = client.create_trigger(ref="pack.timer", label="Timer")
sensor = client.create_sensor(
trigger_id=trigger["id"],
entrypoint="sensors/timer.py",
runtime="python3",
config={"interval_seconds": 5}
)
# ✅ Now the sensor will fire events every 5 seconds
```
**Status:** 🔴 BLOCKING - Tests cannot work without sensor creation
---
### 4. Action Field Names 🔴 NEEDS