Skip to main content
BuildingBlocks.Time, sistem saatini soyutlar. Kodun her yerinde DateTime.UtcNow çağırmak yerine IClock (veya statik Time fasadı) kullanılır; böylece zamana bağlı mantık (OTP süresi, TOTP pencere hesabı, token expiry) deterministik şekilde test edilebilir olur.

Neden zaman soyutlanır?

DateTime.UtcNow global ve kontrol edilemez bir bağımlılıktır. Soyutlama olmadan şu testler kararsız (flaky) olur:
  • OTP’nin 3 dakika sonra süresinin dolması
  • TOTP’nin ±1 zaman penceresinde doğrulanması
  • Refresh token’ın geçerlilik kontrolü
IClock/FakeClock ile zaman sabitlenir ve “tam sınırda ne olur?” senaryoları net biçimde sınanır.

Arayüz ve implementasyonlar

Statik Time fasadı

DI gerektirmeyen, async-flow güvenli statik bir giriş noktası da vardır. AsyncLocal tabanlı scoped override ile testte zamanı geçici olarak değiştirir; ayrıca Türkiye yerel saatini sağlar.

DI kaydı

IClock singleton olarak kaydedilir (prod’da SystemClock).

Test — sabit zaman

FakeClock ile “şimdi”yi sabitleyip sınır koşullarını deterministik test edin:
Statik Time kullanan kod için scoped override:
FakeClock salt-okunur sabit zaman tutar (mutable “advance” yoktur); ilerleyen zaman gerektiren senaryolarda farklı FakeClock instance’ları geçirin ya da Time.Override’ı yeni bir saatle tekrar sarın.
Time fasadı yerel saat için Europe/Istanbul’u (yoksa “Turkey Standard Time”) çözer. Kalıcı veriyi daima UTC saklayın; yerelleştirmeyi yalnızca görüntüleme katmanında yapın.

İlgili

OTP

Kod süresi ve throttle hesapları.

Authenticator (TOTP)

RFC6238 zaman penceresi doğrulaması.

JWT

Token expiry ve clock skew.

Domain

Aggregate’lerde zamana bağlı kurallar.