https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=40445

--- Comment #5 from Martin Renvoize (ashimema) 
<[email protected]> ---
# Test plan

## Prerequisites

1. **System Requirements:**
    - `UseCashRegisters` system preference set to 'Use' to enable cash
management
    - `EnablePointOfSale` set to enabled to expose 'Point of sale'
functionality
    - Staff user with `cash_management` permissions (specifically 'cashup'
permission)
    - At least one cash register configured for the current library

## Test Scenarios

### 1. Basic Cashup Modal Interface

**Objective:** Verify the enhanced cashup modal interface and user experience

**Steps:**

1. Navigate to Point of Sale → Register (select a specific register)
2. Perform some transactions to create outstanding amounts (e.g., process a
payment)
3. Click "Record cashup" button
4. **Verify:** Cashup modal opens with the following elements:
    - Expected amount clearly displayed (should match outstanding transactions)
    - Float amount shown
    - "Actual amount removed from register" field is **empty** (not
pre-populated)
    - Field is marked as required with proper validation
    - Reconciliation section is hidden initially
    - Note field is hidden initially
5. **Verify:** Cannot submit form with empty amount field
6. Close modal and repeat to ensure consistency

### 2. Real-time Reconciliation Calculation

**Objective:** Test the dynamic reconciliation calculation as user types

**Steps:**

1. Open cashup modal (as above)
2. Note the expected amount (e.g., £15.00)
3. **Test Case 2a - Balanced Amount:**
    - Enter the exact expected amount (e.g., 15.00)
    - **Verify:** Reconciliation text shows "Balanced - no surplus or deficit"
    - **Verify:** Text appears in green/success styling
    - **Verify:** Note field remains hidden (no discrepancy)
4. **Test Case 2b - Surplus Amount:**
    - Enter amount higher than expected (e.g., 18.50 when expecting 15.00)
    - **Verify:** Reconciliation text shows "Surplus: £3.50"
    - **Verify:** Text appears in green/success styling
    - **Verify:** Note field appears for explanation
5. **Test Case 2c - Deficit Amount:**
    - Enter amount lower than expected (e.g., 12.00 when expecting 15.00)
    - **Verify:** Reconciliation text shows "Deficit: £3.00"
    - **Verify:** Text appears in warning styling (orange/yellow)
    - **Verify:** Note field appears for explanation
6. **Test Case 2d - Invalid Input:**
    - Clear the field
    - **Verify:** Reconciliation section hides
    - **Verify:** Note field hides
    - Enter invalid values (letters, special characters)
    - **Verify:** No reconciliation calculation occurs

### 3. Balanced Cashup Processing

**Objective:** Test cashup when actual amount equals expected amount

**Steps:**

1. Create transactions totaling £10.00 (or known amount)
2. Open cashup modal
3. Enter exact expected amount (£10.00)
4. **Optional:** Add a note (should be ignored for balanced cashups)
5. Click "Confirm cashup"
6. **Verify:** Page redirects successfully (POST/REDIRECT/GET pattern)
7. **Verify:** Cashup appears in cashup history
8. **Database Verification:**

    ```sql
    -- Check cashup action created
    SELECT * FROM cash_register_actions WHERE code = 'CASHUP' ORDER BY
timestamp DESC LIMIT 1;

    -- Check NO surplus/deficit accountlines created
    SELECT * FROM accountlines WHERE register_id = [REGISTER_ID]
    AND (credit_type_code = 'CASHUP_SURPLUS' OR debit_type_code =
'CASHUP_DEFICIT');
    ```

9. **Verify:** No surplus/deficit entries in account lines

### 4. Surplus Cashup Processing

**Objective:** Test cashup when actual amount exceeds expected amount

**Steps:**

1. Create transactions totaling £15.00
2. Open cashup modal
3. Enter higher amount (£20.00 = £5.00 surplus)
4. **Verify:** Shows "Surplus: £5.00" in reconciliation
5. **Optional:** Add explanatory note: "Found extra £5 note in drawer"
6. Click "Confirm cashup"
7. **Verify:** Successful redirect
8. **Database Verification:**

    ```sql
    -- Check cashup action
    SELECT amount FROM cash_register_actions WHERE code = 'CASHUP' ORDER BY
timestamp DESC LIMIT 1;
    -- Should show 20.00

    -- Check surplus accountline
    SELECT amount, description, note FROM accountlines
    WHERE register_id = [REGISTER_ID] AND credit_type_code = 'CASHUP_SURPLUS'
    ORDER BY date DESC LIMIT 1;
    -- Amount should be -5.00 (negative for credit)
    -- Note should contain user's explanation
    ```

9. **Verify:** Surplus accountline created with correct negative amount
10. **Verify:** User note stored correctly (if provided)

### 5. Deficit Cashup Processing

**Objective:** Test cashup when actual amount is less than expected

**Steps:**

1. Create transactions totaling £25.00
2. Open cashup modal
3. Enter lower amount (£22.00 = £3.00 deficit)
4. **Verify:** Shows "Deficit: £3.00" with warning styling
5. Add explanatory note: "£3 missing - possible incorrect change given"
6. Click "Confirm cashup"
7. **Verify:** Successful redirect
8. **Database Verification:**

    ```sql
    -- Check deficit accountline
    SELECT amount, description, note FROM accountlines
    WHERE register_id = [REGISTER_ID] AND debit_type_code = 'CASHUP_DEFICIT'
    ORDER BY date DESC LIMIT 1;
    -- Amount should be 3.00 (positive for debit)
    -- Note should contain explanation
    ```

9. **Verify:** Deficit accountline created with correct positive amount
10. **Verify:** User note stored correctly

### 6. Note Field Validation

**Objective:** Test note field behavior and validation

**Steps:**

1. Create discrepancy situation (surplus or deficit)
2. **Test Case 6a - Valid Note:**
    - Enter meaningful note (under 1000 characters)
    - **Verify:** Note saves correctly with cashup
3. **Test Case 6b - Empty/Whitespace Note:**
    - Leave note field empty OR enter only spaces/tabs
    - Submit cashup
    - **Verify:** No note stored in database (should be NULL/undef)
4. **Test Case 6c - Long Note:**
    - Enter note approaching 1000 character limit
    - **Verify:** Submission works correctly
    - Enter note exceeding 1000 characters
    - **Verify:** Note is truncated to 1000 characters
5. **Test Case 6d - Special Characters:**
    - Enter note with quotes, apostrophes, newlines
    - **Verify:** Special characters handled properly

### 7. Cashup Summary Modal Enhancement

**Objective:** Test the enhanced cashup summary display

**Steps:**

1. Perform various cashups (balanced, surplus, deficit)
2. Navigate to cashup history or click "Summary" link for completed cashups
3. **Verify:** Summary modal displays:
    - All regular transactions grouped properly
    - Reconciliation information displayed separately in footer
    - Surplus/deficit amounts highlighted distinctly
    - Clean separation between regular transactions and reconciliation data
4. **Test different scenarios:**
    - Summary of balanced cashup (no reconciliation footer)
    - Summary of surplus cashup (highlighted surplus in footer)
    - Summary of deficit cashup (highlighted deficit in footer)

### 8. Outstanding Accountlines Filtering

**Objective:** Verify surplus/deficit entries don't affect subsequent cashups

**Steps:**

1. Perform cashup with surplus/deficit (creates reconciliation accountlines)
2. Add new regular transactions
3. **Verify:** Outstanding accountlines total excludes previous reconciliation
entries
4. Perform another cashup
5. **Verify:** Expected amount calculation is correct (not inflated by
reconciliation entries)

### 9. Transaction Integrity and Error Handling

**Objective:** Test system behavior under error conditions

**Steps:**

1. **Database Transaction Test:**
    - Monitor database during cashup process
    - **Verify:** All changes (cashup action + reconciliation accountline) are
atomic
2. **Permission Test:**
    - Test with user lacking 'cashup' permission
    - **Verify:** Appropriate error message displayed
3. **Invalid Amount Test:**
    - Try submitting with invalid amounts (negative, non-numeric)
    - **Verify:** Client-side validation prevents submission
    - **Verify:** Server-side validation as backup
4. **Network Interruption:**
    - Submit cashup and simulate network issue
    - **Verify:** No partial/duplicate cashup records created

### 10. Multi-Register Environment

**Objective:** Test functionality with multiple cash registers

**Steps:**

1. Configure multiple cash registers for same library
2. Perform cashups on different registers
3. **Verify:** Reconciliation entries are correctly associated with specific
registers
4. **Verify:** Outstanding amounts are calculated per register
5. Test "Cashup All" functionality if available
6. **Verify:** Individual register reconciliation works correctly

## Expected Results Summary

**After successful testing, the system should demonstrate:**

1. **User Experience:**

    - Intuitive modal interface requiring conscious amount entry
    - Real-time feedback on discrepancies
    - Conditional note fields appearing only when needed
    - Clear visual distinction between different reconciliation states

2. **Data Integrity:**

    - Accurate cashup amounts recorded
    - Proper creation of surplus/deficit accountlines when needed
    - Correct mathematical relationships (credits negative, debits positive)
    - User notes preserved exactly as entered (or NULL if empty)

3. **System Behavior:**

    - Atomic database transactions ensuring consistency
    - Proper filtering of reconciliation entries from outstanding calculations
    - Successful POST/REDIRECT/GET pattern preventing duplicate submissions
    - Enhanced summary displays showing reconciliation data appropriately

4. **Audit Trail:**
    - Complete timestamp records for all actions
    - Manager ID linkage for accountability
    - Detailed descriptions for reconciliation entries
    - Preserved user explanations for discrepancies

## Automated Test Verification

**Run the test suite:**

```bash
docker exec --user kohadev-koha --workdir /kohadevbox/koha -i kohadev-koha-1
bash -c 'prove t/db_dependent/Koha/Cash/Register.t'
```

**Expected:** All tests pass, covering balanced cashup, surplus handling,
deficit handling, note management, and transaction integrity.

---

**Note:** This test plan assumes the CASHUP_SURPLUS and CASHUP_DEFICIT account
types are properly installed via the mandatory data files or database updates.
If these are missing, the functionality will not work correctly.

-- 
You are receiving this mail because:
You are watching all bug changes.
_______________________________________________
Koha-bugs mailing list
[email protected]
https://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-bugs
website : http://www.koha-community.org/
git : http://git.koha-community.org/
bugs : http://bugs.koha-community.org/

Reply via email to