mirror of
https://github.com/s-frick/effigenix.git
synced 2026-03-28 10:29:35 +01:00
- Move Java backend to backend/ directory - Create frontend/ directory for TypeScript TUI and future WebUI - Update .gitignore for Node.js and worktrees - Update README.md with new repository structure - Copy documentation to backend/
15 KiB
15 KiB
Unit Test Files Index
Complete List of Test Files Created
Domain Layer Tests
/home/sebi/git/effigenix/src/test/java/com/effigenix/domain/usermanagement/UserIdTest.java
- Class Under Test:
UserId - Type: Value Object Test
- Test Count: 11 test cases
- Key Tests:
- Valid ID creation
- Null/empty/blank string rejection
- Unique ID generation via
UserId.generate() - Static factory method
UserId.of(String value) - Record immutability
- Equality and hash code consistency
- Parameterized tests for invalid inputs
/home/sebi/git/effigenix/src/test/java/com/effigenix/domain/usermanagement/RoleIdTest.java
- Class Under Test:
RoleId - Type: Value Object Test
- Test Count: 11 test cases
- Key Tests:
- Similar to UserIdTest but for Role identifiers
- UUID generation uniqueness
- Factory methods testing
- Immutability verification
/home/sebi/git/effigenix/src/test/java/com/effigenix/domain/usermanagement/PasswordHashTest.java
- Class Under Test:
PasswordHash - Type: Value Object Test (Cryptographic)
- Test Count: 16 test cases
- Key Tests:
- BCrypt hash creation acceptance (
2a,2b,2yversions) - 60-character length validation
- Invalid format rejection (non-BCrypt, wrong length)
- Static factory
PasswordHash.of(String bcryptHash) - Immutability and equality
- Comprehensive format validation with parameterized tests
- BCrypt hash creation acceptance (
/home/sebi/git/effigenix/src/test/java/com/effigenix/domain/usermanagement/UserTest.java
- Class Under Test:
User(Entity) - Type: Entity Business Logic Test
- Test Count: 35+ test cases
- Key Tests:
- Construction & Validation (5+ tests)
- Valid user creation
- Null validation for UserId, username, email, passwordHash, status
- Email format validation
- Default createdAt timestamp
- Factory method
User.create()
- Status Management (8+ tests)
lock()/unlock()state transitionsactivate()/deactivate()state transitions- Status verification methods:
isActive(),isLocked()
- Password Management (3+ tests)
changePassword()with hash replacement- Null hash rejection
- Email & Branch Updates (3+ tests)
updateEmail()with validationupdateBranch()assignment
- Role Management (6+ tests)
assignRole()/removeRole()- Null role rejection
- Unmodifiable role set
- Permission Logic (4+ tests)
getAllPermissions()aggregates from all roleshasPermission()checks existence- Empty set for users without roles
- Login Tracking (1+ tests)
updateLastLogin()timestamp
- Equality & Immutability (4+ tests)
- ID-based equality
- Unmodifiable collections
- Construction & Validation (5+ tests)
/home/sebi/git/effigenix/src/test/java/com/effigenix/domain/usermanagement/RoleTest.java
- Class Under Test:
Role(Entity) - Type: Entity Business Logic Test
- Test Count: 25+ test cases
- Key Tests:
- Construction & Validation (4+ tests)
- Valid role creation
- Null RoleId/RoleName rejection
- Null permissions defaulting to empty set
- Permission Management (8+ tests)
addPermission()/removePermission()- Duplicate permission handling
- Null permission rejection
- Multiple permission operations
hasPermission()verification
- Description Management (2+ tests)
updateDescription()updates- Null description handling
- Equality & Immutability (4+ tests)
- ID-based equality
- Unmodifiable permission set
- Hash code consistency
- Multi-Role Support (3+ tests)
- Different RoleNames support
- Different permission sets
- Large permission sets
- Construction & Validation (4+ tests)
Application Layer Tests
/home/sebi/git/effigenix/src/test/java/com/effigenix/application/usermanagement/CreateUserTest.java
- Use Case Under Test:
CreateUser - Type: Application Layer / Use Case Test
- Test Count: 16 test cases
- Mocked Dependencies: UserRepository, RoleRepository, PasswordHasher, AuditLogger
- Key Tests:
- Success Path (3+ tests)
- Valid user creation with all checks
- Password hashing via PasswordHasher
- Role loading and assignment
- UserDTO returned correctly
- Password Validation (1+ tests)
- Weak password rejection
- Uniqueness Checks (2+ tests)
- Duplicate username detection
- Duplicate email detection
- Validation ordering verification
- Role Loading (2+ tests)
- Multiple role loading
- Role not found exception
- User Status (1+ tests)
- New users created as ACTIVE
- Persistence & Audit (3+ tests)
- Repository save verification
- AuditEvent.USER_CREATED logging
- Audit contains correct ActorId
- Error Handling (3+ tests)
- Result<Error, DTO> pattern verification
- No persistence on failure
- No audit on failure
- Success Path (3+ tests)
/home/sebi/git/effigenix/src/test/java/com/effigenix/application/usermanagement/AuthenticateUserTest.java
- Use Case Under Test:
AuthenticateUser - Type: Application Layer / Use Case Test
- Test Count: 15 test cases
- Mocked Dependencies: UserRepository, PasswordHasher, SessionManager, AuditLogger
- Key Tests:
- Success Path (2+ tests)
- Credentials verified
- SessionToken created
- Last login updated
- AuditEvent.LOGIN_SUCCESS logged
- Username Validation (1+ tests)
- User not found error
- Status Checks (3+ tests)
- LOCKED status blocks login
- INACTIVE status blocks login
- ACTIVE status allows login
- Password Verification (2+ tests)
- Incorrect password failure
- Correct password success
- Session Management (2+ tests)
- SessionManager invoked
- SessionToken returned
- Last Login Update (1+ tests)
- Timestamp set and persisted
- Audit Trail (3+ tests)
- Success and failure logging
- Correct context and ActorId
- Success Path (2+ tests)
/home/sebi/git/effigenix/src/test/java/com/effigenix/application/usermanagement/ChangePasswordTest.java
- Use Case Under Test:
ChangePassword - Type: Application Layer / Use Case Test
- Test Count: 14 test cases
- Mocked Dependencies: UserRepository, PasswordHasher, AuditLogger
- Key Tests:
- Success Path (1+ tests)
- Password changed successfully
- User Lookup (1+ tests)
- User not found error
- Current Password Verification (2+ tests)
- Incorrect current password rejection
- Verification ordering
- New Password Validation (2+ tests)
- Weak password rejection
- Validation ordering
- Password Hashing (1+ tests)
- New hash created and assigned
- Verification Ordering (1+ tests)
- Current password verified before new password validated
- Persistence (1+ tests)
- Updated user saved
- Audit Trail (4+ tests)
- Success logging
- Failure logging with context
- Success Path (1+ tests)
Infrastructure Layer Tests
/home/sebi/git/effigenix/src/test/java/com/effigenix/infrastructure/security/BCryptPasswordHasherTest.java
- Class Under Test:
BCryptPasswordHasher - Type: Implementation / Cryptography Test
- Test Count: 26+ test cases
- Key Tests:
- Hashing (6+ tests)
- Valid password hashing
- BCrypt format validation
- Hash uniqueness (salt randomness)
- Null/empty/blank rejection
- Weak password rejection
- Verification (5+ tests)
- Correct password verification
- Incorrect password failure
- Null safety (returns false)
- Malformed hash handling
- Password Validation (10+ tests)
- Minimum 8 characters
- Uppercase letter requirement
- Lowercase letter requirement
- Digit requirement
- Special character requirement
- All requirements together
- Long password acceptance
- Null password handling
- Similar password rejection
- Security Properties (3+ tests)
- Strength 12 format verification
- Constant-time comparison (timing attack resistance)
- Error graceful handling
- Hashing (6+ tests)
/home/sebi/git/effigenix/src/test/java/com/effigenix/infrastructure/persistence/usermanagement/mapper/UserMapperTest.java
- Class Under Test:
UserMapper - Type: Hexagonal Port / Mapper Test
- Test Count: 16 test cases
- Key Tests:
- Domain → JPA Entity (4+ tests)
- All fields mapped correctly
- Value object extraction
- Timestamps preserved
- Status preserved
- JPA Entity → Domain (4+ tests)
- All fields mapped correctly
- Value object creation
- Timestamps preserved
- Status preserved
- Null Handling (3+ tests)
- Null user → null entity
- Null entity → null domain
- Null role set → empty set
- Bidirectional Mapping (2+ tests)
- User → Entity → User preservation
- Field consistency round-trip
- Collection Independence (2+ tests)
- Set copied (not referenced)
- Role set independence
- Status Mapping (1+ tests)
- All user statuses preserved
- Domain → JPA Entity (4+ tests)
/home/sebi/git/effigenix/src/test/java/com/effigenix/infrastructure/persistence/usermanagement/mapper/RoleMapperTest.java
- Class Under Test:
RoleMapper - Type: Hexagonal Port / Mapper Test
- Test Count: 16 test cases
- Key Tests:
- Domain → JPA Entity (4+ tests)
- All fields mapped
- Value object extraction
- Description preserved
- JPA Entity → Domain (4+ tests)
- All fields mapped
- Value object creation
- Description preserved
- Null Handling (3+ tests)
- Null role → null entity
- Null entity → null domain
- Null permissions → empty set
- Bidirectional Mapping (2+ tests)
- Role → Entity → Role preservation
- Full round-trip consistency
- Collection Independence (2+ tests)
- Permission set copied
- No shared references
- Role Name Mapping (1+ tests)
- All RoleNames preserved
- Domain → JPA Entity (4+ tests)
Test Statistics by File
| File | Tests | LOC | Focus |
|---|---|---|---|
| UserIdTest.java | 11 | 125 | Value object |
| RoleIdTest.java | 11 | 112 | Value object |
| PasswordHashTest.java | 16 | 232 | Cryptographic validation |
| UserTest.java | 35+ | 520 | Entity logic |
| RoleTest.java | 25+ | 420 | Entity logic |
| CreateUserTest.java | 16 | 285 | Use case flow |
| AuthenticateUserTest.java | 15 | 310 | Authentication |
| ChangePasswordTest.java | 14 | 280 | Password change |
| BCryptPasswordHasherTest.java | 26+ | 395 | Cryptography |
| UserMapperTest.java | 16 | 315 | Entity mapping |
| RoleMapperTest.java | 16 | 315 | Entity mapping |
| TOTAL | 170+ | 3,309 | Full coverage |
How to Find Tests
By Component
- UserId:
UserIdTest.java - RoleId:
RoleIdTest.java - PasswordHash:
PasswordHashTest.java - User Entity:
UserTest.java - Role Entity:
RoleTest.java - CreateUser Use Case:
CreateUserTest.java - AuthenticateUser Use Case:
AuthenticateUserTest.java - ChangePassword Use Case:
ChangePasswordTest.java - BCryptPasswordHasher:
BCryptPasswordHasherTest.java - UserMapper:
UserMapperTest.java - RoleMapper:
RoleMapperTest.java
By Layer
-
Domain Tests:
/src/test/java/com/effigenix/domain/usermanagement/- 5 test classes
- 98 test cases
- Value objects and entity logic
-
Application Tests:
/src/test/java/com/effigenix/application/usermanagement/- 3 test classes
- 45 test cases
- Use cases with mocked dependencies
-
Infrastructure Tests:
/src/test/java/com/effigenix/infrastructure/- 3 test classes (security, mappers)
- 58+ test cases
- Implementations and adapters
By Topic
- Value Objects: UserIdTest, RoleIdTest, PasswordHashTest
- Entity Logic: UserTest, RoleTest
- Use Cases: CreateUserTest, AuthenticateUserTest, ChangePasswordTest
- Cryptography: BCryptPasswordHasherTest
- Mapping: UserMapperTest, RoleMapperTest
Running Specific Tests
Run a single test class:
mvn test -Dtest=UserIdTest
mvn test -Dtest=UserTest
mvn test -Dtest=CreateUserTest
mvn test -Dtest=BCryptPasswordHasherTest
mvn test -Dtest=UserMapperTest
Run all tests in a package:
mvn test -Dtest=com.effigenix.domain.usermanagement.*
mvn test -Dtest=com.effigenix.application.usermanagement.*
mvn test -Dtest=com.effigenix.infrastructure.security.*
mvn test -Dtest=com.effigenix.infrastructure.persistence.usermanagement.mapper.*
Run a single test method:
mvn test -Dtest=UserTest#should_CreateUser_When_ValidDataProvided
mvn test -Dtest=BCryptPasswordHasherTest#should_HashPassword_When_ValidPasswordProvided
Test Dependencies
JUnit 5 Annotations Used
@Test- Marks a test method@DisplayName("description")- Human-readable test name@BeforeEach- Setup before each test@ParameterizedTest- Parameterized tests@ValueSource- Parameter source for parameterized tests@ExtendWith(MockitoExtension.class)- Mockito support
Mockito Annotations Used
@Mock- Creates a mock object@InjectMocks- Injects mocks into system under testwhen(...).thenReturn(...)- Stubbingwhen(...).thenAnswer(...)- Complex stubbingverify(...)- Verification of method callsArgumentMatchers- Flexible matching
AssertJ Methods Used
assertThat(value).isEqualTo(expected)assertThat(value).isNotNull()assertThat(value).isInstanceOf(Type.class)assertThat(set).contains(item)assertThat(value).matches(regex)assertThatThrownBy(() -> code()).isInstanceOf(Exception.class)assertThat(list).hasSize(n)
Test Maintenance
Adding new tests to existing class:
- Follow existing test naming pattern:
should_X_When_Y() - Add
@Testand@DisplayName("description") - Use Arrange-Act-Assert pattern
- Group related tests together
- Update this index if adding new test class
Updating tests after code changes:
- Run affected test class:
mvn test -Dtest=ClassName - Fix assertion expectations if behavior changed
- Add new test case if new behavior added
- Verify coverage still meets 80% target
Coverage Report
Generate coverage report:
mvn clean test jacoco:report
# Report at: target/site/jacoco/index.html
View in browser:
open target/site/jacoco/index.html
Expected coverage:
- Domain Layer: 90-95%
- Application Layer: 85-90%
- Infrastructure Layer: 88-95%
- Overall: 80%+
Notes
All test files are located in /home/sebi/git/effigenix/src/test/java/ directory structure mirroring the main source code at /home/sebi/git/effigenix/src/main/java/.
Test files follow the naming convention: {ClassName}Test.java
Each test class is independent and can run in any order.