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:
2026-02-06 22:12:23 -08:00
parent 2df1f71a29
commit 791e41cf34
6 changed files with 799 additions and 0 deletions

View 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)