- 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
163 lines
4.6 KiB
Markdown
163 lines
4.6 KiB
Markdown
---
|
||
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)
|