2025-02-11 15:03:56 +01:00

60 lines
1.4 KiB
Nim

import pkg/chronos
import pkg/questionable/results
import pkg/asynctest/chronos/unittest
import ../../../codexcrawler/components/todolist
import ../../../codexcrawler/utils/asyncdataevent
import ../../../codexcrawler/types
import ../../../codexcrawler/state
import ../mockstate
import ../helpers
suite "TodoList":
var
nid: Nid
state: MockState
todo: TodoList
setup:
nid = genNid()
state = createMockState()
todo = TodoList.new(state)
(await todo.start()).tryGet()
teardown:
(await todo.stop()).tryGet()
state.checkAllUnsubscribed()
proc fireNewNodesDiscoveredEvent(nids: seq[Nid]) {.async.} =
(await state.events.newNodesDiscovered.fire(nids)).tryGet()
proc fireNodesExpiredEvent(nids: seq[Nid]) {.async.} =
(await state.events.nodesExpired.fire(nids)).tryGet()
test "discovered nodes are added to todo list":
await fireNewNodesDiscoveredEvent(@[nid])
let item = (await todo.pop).tryGet()
check:
item == nid
test "expired nodes are added to todo list":
await fireNodesExpiredEvent(@[nid])
let item = (await todo.pop).tryGet()
check:
item == nid
test "pop on empty todo list waits until item is added":
let popFuture = todo.pop()
check:
not popFuture.finished
await fireNewNodesDiscoveredEvent(@[nid])
check:
popFuture.finished
popFuture.value.tryGet() == nid