import { shouldForceMongoReconnect, MongoReconnectState } from './mongo-reconnect-guard.util'; /** * A Mongo reconnect-guard PURE döntés-magjának unit-tesztjei. A helyesség kritikus, mert ez dönti * el, hogy egy futó service force-reconnectolja-e a Mongo-kapcsolatát (disconnect+connect → * re-resolve). Healthy connection-t SOHA nem szabad bántani; csak tartós nem-connected + grace + * cooldown letelt esetén szabad force-reconnectolni. */ describe('| mongo-reconnect-guard shouldForceMongoReconnect', () => { const base: MongoReconnectState = { readyState: 0, msSinceUnhealthy: 60_000, // 60s unhealthy (a 30s grace fölött) unhealthyGraceMs: 30_000, reconnectInFlight: false, msSinceLastReconnect: Number.POSITIVE_INFINITY, reconnectCooldownMs: 20_000, }; it('| connected (readyState=1) → SOHA nem reconnect (a healthy connection-t nem bántjuk)', () => { expect(shouldForceMongoReconnect({ ...base, readyState: 1 }).reconnect).toBe(false); }); it('| connecting (readyState=2) → nem reconnect (hagyjuk a drivert befejezni)', () => { expect(shouldForceMongoReconnect({ ...base, readyState: 2 }).reconnect).toBe(false); }); it('| disconnected + grace + cooldown letelt + nincs in-flight → RECONNECT', () => { const d = shouldForceMongoReconnect({ ...base, readyState: 0 }); expect(d.reconnect).toBe(true); expect(d.reason).toContain('re-resolve'); }); it('| disconnecting (readyState=3) ugyanígy → RECONNECT (tartós nem-connected)', () => { expect(shouldForceMongoReconnect({ ...base, readyState: 3 }).reconnect).toBe(true); }); it('| grace-en BELÜL → nem reconnect (hagyjuk a driver saját reconnect-jét előbb)', () => { expect(shouldForceMongoReconnect({ ...base, msSinceUnhealthy: 10_000 }).reconnect).toBe(false); }); it('| cooldown-on belül (frissen reconnectoltunk) → nem reconnect (anti-thrash)', () => { expect(shouldForceMongoReconnect({ ...base, msSinceLastReconnect: 5_000 }).reconnect).toBe(false); }); it('| már van in-flight reconnect → nem indítunk másikat', () => { expect(shouldForceMongoReconnect({ ...base, reconnectInFlight: true }).reconnect).toBe(false); }); it('| pontosan a grace-küszöbön (msSinceUnhealthy === grace) → RECONNECT', () => { expect(shouldForceMongoReconnect({ ...base, msSinceUnhealthy: 30_000, unhealthyGraceMs: 30_000 }).reconnect).toBe(true); }); });