---
status: pending
priority: p3
issue_id: "011"
tags: [testing, readability, agents, vendors, assertions]
dependencies: []
---

# Add Assertion Messages to Improve Agent-Readable Test Output

## Problem Statement

Most assertions in vendors_test.clj lack custom messages, making failures hard for automated agents to interpret and debug. Adding messages would:
- Improve automated failure analysis
- Make test output self-documenting
- Help future developers understand failures

## Findings

**From agent-native-reviewer:**

**Current assertions without messages:**
```clojure
(is (seq? vendors))
(is (number? matching-count))
(is (= 0 (count vendors)))
(is (contains? result :ids))
```

**Better with messages:**
```clojure
(is (seq? vendors) "Expected vendors to be a sequence")
(is (number? matching-count) "Expected matching-count to be a number, got: %s" (type matching-count))
(is (= 0 (count vendors)) "Expected empty vendor list when database is empty, found %d vendors" (count vendors))
```

**Benefits:**
- Agents can understand what went wrong without reading code
- Self-documenting test output
- Easier debugging when tests fail

## Proposed Solutions

### Option A: Add Messages to All Assertions (Recommended)
**Effort:** Small (20 minutes)
**Risk:** Low

Add descriptive messages to all `is` assertions:
```clojure
;; Before:
(is (= 200 (:status result)))

;; After:
(is (= 200 (:status result))
    "Expected 200 status, got %d" (:status result))
```

**Pros:**
- Maximum clarity for agents and humans
- Self-documenting failures

**Cons:**
- Adds verbosity
- More code to maintain

### Option B: Add Messages to Complex Assertions Only
**Effort:** Small (10 minutes)
**Risk:** Low

Only add messages to non-obvious assertions:
```clojure
;; Keep simple assertions as-is:
(is (= 200 (:status result)))

;; Add messages to complex ones:
(is (>= (:count result) 3)
    "Expected at least 3 vendors (2 new + 1 from setup), got %d"
    (:count result))
```

**Pros:**
- Less verbose
- Focus on non-obvious assertions

**Cons:**
- Inconsistent coverage
- Agents still can't understand simple failures

## Recommended Action

**Go with Option B** - add messages to complex/value-checking assertions first. This provides the most value with less overhead.

Priority assertions to enhance:
1. Lines 53, 64: Magic number assertions with `>=`
2. Lines 110, 117: Status code and count assertions
3. Lines 176-177: Field value assertions

## Technical Details

**High-Priority Assertions:**
- Line 53: `(is (>= (:count result) 3))`
- Line 64: `(is (>= matching-count 3))`
- Line 110: `(is (= 200 (:status result)))`
- Line 117: `(is (= 0 (count remaining-sources)))`

**Message format:**
```clojure
(is assertion "Expected X, got Y: %s" value)
```

**Verification:**
```bash
lein test auto-ap.ssr.admin.vendors-test  # Test failure messages
```

## Acceptance Criteria

- [ ] Complex assertions have descriptive messages
- [ ] Messages explain expected vs actual values
- [ ] Tests still pass
- [ ] Code formatted with lein cljfmt

## Work Log

### 2026-02-07 - Initial Creation

**By:** Agent-Native Reviewer Agent

**Actions:**
- Identified lack of assertion messages
- Documented benefits for automated agents
- Prioritized which assertions need messages most

**Learnings:**
- Assertion messages critical for agent-based development
- Most assertions in file lack messages
- Focus on complex/value-checking assertions first
