78 lines
2.0 KiB
Markdown
78 lines
2.0 KiB
Markdown
# Test Evidence: Attendance policy defaults and boundaries
|
|
|
|
- **Test type:** Unit
|
|
- **Requirement IDs:** `ATT-001`, `ATT-002`, `ATT-003`, `ATT-004`
|
|
- **Scenario IDs:** `AC-ATT-001`
|
|
- **Test class/method:** `com.lab.labtimesheet.feature.attendance.model.AttendancePolicyTest`
|
|
- **Implementation commit:** `71901d1670f633a1b594bdce3348efebe73fc175`
|
|
|
|
## Protected behavior
|
|
|
|
The seeded policy applies from 1970-01-01 with the required timezone, schedule,
|
|
workdays, grace values, leave quota, and penalty. Grace outside 0..720 or a
|
|
checkout cutoff at midnight is rejected.
|
|
|
|
## Test method
|
|
|
|
Plain JUnit constructs the immutable policy and timeline directly, resolves two
|
|
dates, and exercises the validation boundary without Spring or persistence.
|
|
|
|
## Hand-derived expected result
|
|
|
|
08:30 plus 30 minutes makes the inclusive on-time boundary 09:00. 15:30 plus
|
|
30 minutes makes the inclusive checkout boundary 16:00. A 23:30 end plus 30
|
|
minutes reaches midnight and is invalid.
|
|
|
|
## RED
|
|
|
|
**Command**
|
|
|
|
```text
|
|
export JAVA_HOME=/opt/homebrew/opt/openjdk@25
|
|
export PATH="$JAVA_HOME/bin:$PATH"
|
|
./mvnw -Dtest=AttendancePolicyTest test
|
|
```
|
|
|
|
**Observed result**
|
|
|
|
```text
|
|
[ERROR] AttendancePolicyTest.java:[51,20] cannot find symbol
|
|
symbol: class AttendancePolicy
|
|
[INFO] BUILD FAILURE
|
|
Process exited 1. The test reached compilation and failed because the required policy domain did not exist.
|
|
```
|
|
|
|
## GREEN
|
|
|
|
**Command**
|
|
|
|
```text
|
|
export JAVA_HOME=/opt/homebrew/opt/openjdk@25
|
|
export PATH="$JAVA_HOME/bin:$PATH"
|
|
./mvnw -Dtest=AttendancePolicyTest test
|
|
```
|
|
|
|
**Observed result**
|
|
|
|
```text
|
|
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
|
|
BUILD SUCCESS
|
|
Process exited 0.
|
|
```
|
|
|
|
## Affected suite
|
|
|
|
**Command and result**
|
|
|
|
```text
|
|
./mvnw -Dtest='*Attendance*Test' test
|
|
Tests run: 32, Failures: 0, Errors: 0, Skipped: 0
|
|
BUILD SUCCESS
|
|
Process exited 0.
|
|
```
|
|
|
|
## External-test boundaries
|
|
|
|
This unit test does not prove the platform-owned Flyway seed, PostgreSQL policy
|
|
loading, policy-management authorization, or web rendering.
|