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

4.6 KiB
Raw Blame History

status, priority, issue_id, tags
status priority issue_id tags
pending p2 004
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:

    (with-redefs [auto-ap.solr/impl (auto-ap.solr/->InMemSolrClient (atom {}))]
      ...
    
  • Example of duplicated code (appears 9 times):

    (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

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

;; 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

;; 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

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)