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
This commit is contained in:
162
todos/004-pending-p2-extract-test-helpers.md
Normal file
162
todos/004-pending-p2-extract-test-helpers.md
Normal file
@@ -0,0 +1,162 @@
|
||||
---
|
||||
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)
|
||||
Reference in New Issue
Block a user