nim-chat-sdk/tests/test_sqlite_store.nim

49 lines
1.3 KiB
Nim
Raw Normal View History

2025-07-14 11:14:36 +03:00
import testutils/unittests
import ../ratelimit/store/sqlite
import ../ratelimit/store/store
import chronos
2025-07-16 10:05:47 +03:00
import db_connector/db_sqlite
import ../chat_sdk/migration
import std/[options, os]
2025-07-14 11:14:36 +03:00
suite "SqliteRateLimitStore Tests":
2025-07-16 10:05:47 +03:00
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()
2025-07-14 11:14:36 +03:00
## Then
2025-07-16 10:05:47 +03:00
check loadedState.isNone()
2025-07-14 11:14:36 +03:00
asyncTest "saveBucketState and loadBucketState - state persistence":
## Given
2025-07-16 10:05:47 +03:00
let store = newSqliteRateLimitStore(db)
2025-07-14 11:14:36 +03:00
2025-07-16 10:05:47 +03:00
let now = Moment.now()
echo "now: ", now.epochSeconds()
2025-07-14 11:14:36 +03:00
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
2025-07-16 10:05:47 +03:00
check loadedState.isSome()
check loadedState.get().budget == newBucketState.budget
check loadedState.get().budgetCap == newBucketState.budgetCap
check loadedState.get().lastTimeFull.epochSeconds() ==
2025-07-14 11:14:36 +03:00
newBucketState.lastTimeFull.epochSeconds()