Files
integreat/todos/004-pending-p2-extract-test-helpers.md
Bryce 791e41cf34 feat(ssr): add test suite for admin account management and document test improvements
- Added comprehensive test suite for account creation, validation, and grid views
- Documented Datomic entity reference handling patterns in test comments
- Created 5 test improvement todo documents addressing common test anti-patterns
- Todo items cover: removing debug statements, fixing test nesting, strengthening assertions, extracting helpers, and removing doc-only tests
2026-02-06 22:12:23 -08:00

163 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
status: pending
priority: p2
issue_id: 004
tags: [test-fix, important, code-duplication]
---
# Problem Statement
**Test helper functions need to be extracted to eliminate 50% code duplication**
The test file has significant code duplication with 9 instances of identical `with-redefs [auto-ap.solr/impl ...]` blocks repeated throughout. This violates DRY principles and increases maintenance burden.
**Impact**: Repetitive code is harder to maintain, increases file size, makes test modifications more error-prone, and violates fundamental coding best practices.
## Findings
- **Location**: Lines 20, 47, 65, 77, 92, 106, 122, 133, 146 (9 instances)
- **Duplication pattern**:
```clojure
(with-redefs [auto-ap.solr/impl (auto-ap.solr/->InMemSolrClient (atom {}))]
...
```
- **Example of duplicated code** (appears 9 times):
```clojure
(with-redefs [auto-ap.solr/impl (auto-ap.solr/->InMemSolrClient (atom {}))]
(let [admin-identity (admin-token)
result (sut/account-save {:form-params {:account/numeric-code 12345 ...
:account/name "New Cash Account"
:account/type :account-type/asset
:account/location "B"}
:request-method :post
:identity admin-identity})
db (dc/db conn)]
...
))
```
- **Additional duplication**: Account creation pattern repeated in 7 tests (lines 49, 67, 81, 94-96, 106, 122, 133, 146)
- **Evidence**: Pattern-recognition-specialist identified this as 50% code duplication
## Proposed Solutions
### Option 1: Extract Solr mock helper (RECOMMENDED FIRST)
**Pros**:
- Reduces LOC by ~18 lines (2 lines per test × 9 tests)
- Simple implementation
- No changes to test logic
- Consistent mocking across all tests
**Cons**:
- None
**Effort**: Small
**Risk**: None
```clojure
;; Helper function to add to test namespace
(defn with-solr-mock [f]
(with-redefs [auto-ap.solr/impl (auto-ap.solr/->InMemSolrClient (atom {}))]
(f)))
;; Usage in tests:
(with-solr-mock
(let [...])
)
```
### Option 2: Extract account creation helper
**Pros**:
- Reduces LOC by ~20 lines
- Makes test data creation consistent
**Cons**:
- Requires changing test signatures
**Effort**: Medium
**Risk**: Medium
```clojure
;; Helper function
(defn create-account [{:keys [numeric-code name location type]}
& {:keys [account-type account-location]
:or {account-type :account-type/asset
account-location "A"}}]
(sut/account-save {:form-params {:account/numeric-code numeric-code
:account/name name
:account/type account-type
:account/location account-location}
:request-method :post
:identity (admin-token)}))
;; Usage:
(create-account {:numeric-code 12345 :name "New Account" :location "B"})
```
### Option 3: Extract full account save helper with all common params
**Pros**:
- Most concise approach
**Cons**:
- Less flexible for test variations
- Requires changing many test signatures
**Effort**: Medium
**Risk**: Medium
### Option 4: Leave as-is
**Pros**:
- No changes needed
**Cons**:
- Maintains duplication
- Violates DRY principle
- Future changes require 9 updates
**Effort**: None
**Risk**: None
## Recommended Action
**Extract Solr mock helper function to eliminate duplication.**
This is the lowest-risk, highest-impact first step. Once implemented, proceed to extract account creation helper if time permits.
## Technical Details
**Affected Component**: Test utilities and helpers
**Affected Files**:
- `test/clj/auto_ap/ssr/admin/accounts_test.clj` (lines 10-8)
**Helper Function Location**: Should be added after the fixture setup at the top of the file, before the first test.
**Database Changes**: None
**API Changes**: None
**Related Code**: `auto-ap.solr/impl` for mocking
## Acceptance Criteria
- [ ] `with-solr-mock` helper function added to test namespace
- [ ] All 9 occurrences of `with-redefs` replaced with helper call
- [ ] All tests still pass after refactoring
- [ ] No duplicate code remains (50% reduction achieved)
## Work Log
- **2026-02-06**: Finding documented through code review agents (pattern-recognition-specialist, code-simplicity-reviewer)
## Resources
- **Review Agents**:
- pattern-recognition-specialist (task ses_3c9578ae3ffejQg4Wl4GT1ZSAk)
- code-simplicity-reviewer (task ses_3c958304dffeVRAAPfMSv583Ik)