import testutils/unittests import ../ratelimit/store/sqlite import ../ratelimit/store/store import chronos import db_connector/db_sqlite import ../chat_sdk/migration import std/[options, os] suite "SqliteRateLimitStore Tests": setup: let db = open("test-ratelimit.db", "", "", "") runMigrations(db) teardown: if db != nil: db.close() if fileExists("test-ratelimit.db"): removeFile("test-ratelimit.db") asyncTest "newSqliteRateLimitStore - empty state": ## Given let store = newSqliteRateLimitStore(db) ## When let loadedState = await store.loadBucketState() ## Then check loadedState.isNone() asyncTest "saveBucketState and loadBucketState - state persistence": ## Given let store = newSqliteRateLimitStore(db) let now = Moment.now() echo "now: ", now.epochSeconds() let newBucketState = BucketState(budget: 5, budgetCap: 20, lastTimeFull: now) ## When let saveResult = await store.saveBucketState(newBucketState) let loadedState = await store.loadBucketState() ## Then check saveResult == true check loadedState.isSome() check loadedState.get().budget == newBucketState.budget check loadedState.get().budgetCap == newBucketState.budgetCap check loadedState.get().lastTimeFull.epochSeconds() == newBucketState.lastTimeFull.epochSeconds()