[AZ-189] [AZ-190] [AZ-191] [AZ-192] [AZ-193] [AZ-194] [AZ-195] Add e2e blackbox test suite

Made-with: Cursor
This commit is contained in:
Oleksandr Bezdieniezhnykh
2026-04-16 06:25:36 +03:00
parent 1b38e888e1
commit d320d6dd59
98 changed files with 6883 additions and 1 deletions
@@ -0,0 +1,41 @@
# Module: Azaion.Services.Cache
## Purpose
In-memory caching abstraction using LazyCache, providing get-or-add and invalidation operations.
## Public Interface
### ICache
| Method | Signature | Description |
|--------|-----------|-------------|
| `GetFromCacheAsync<T>` | `Task<T> GetFromCacheAsync<T>(string key, Func<Task<T>> fetchFunc, TimeSpan? expiration = null)` | Returns cached value or fetches and caches it |
| `Invalidate` | `void Invalidate(string key)` | Removes a key from the cache |
### MemoryCache (implementation)
Default expiration: 4 hours (`TimeSpan.FromHours(4)`).
## Internal Logic
Wraps `LazyCache.CachingService`. `GetFromCacheAsync` uses `GetOrAddAsync` with absolute expiration relative to now. `Invalidate` calls `Remove`.
## Dependencies
- LazyCache (`IAppCache`, `CachingService`)
## Consumers
- `UserService.GetByEmail` — caches user lookups by `User.GetCacheKey(email)`
- `UserService.UpdateHardware`, `UserService.UpdateQueueOffsets`, `UserService.CheckHardwareHash` — invalidate cache after writes
- Registered as `Scoped` in DI (`Program.cs`): `AddScoped<ICache, MemoryCache>`
## Data Models
None.
## Configuration
None — default 4-hour expiration is hardcoded.
## External Integrations
None.
## Security
None.
## Tests
`MemoryCache` is instantiated directly in `UserServiceTest`.