2025-03-18 15:55:58 +01:00

86 lines
2.2 KiB
Nim

import pkg/chronos
import pkg/questionable
import pkg/questionable/results
import pkg/asynctest/chronos/unittest
import std/sequtils
import ../../../codexcrawler/components/chainmetrics
import ../../../codexcrawler/services/marketplace/market
import ../../../codexcrawler/types
import ../../../codexcrawler/state
import ../mocks/mockstate
import ../mocks/mockmetrics
import ../mocks/mockmarketplace
import ../helpers
suite "ChainMetrics":
var
state: MockState
metrics: MockMetrics
marketplace: MockMarketplaceService
chain: ChainMetrics
setup:
state = createMockState()
metrics = createMockMetrics()
marketplace = createMockMarketplaceService()
metrics.slotFill = -1
chain = ChainMetrics.new(state, metrics, marketplace)
(await chain.start()).tryGet()
teardown:
(await chain.stop()).tryGet()
state.checkAllUnsubscribed()
proc onStep() {.async.} =
(await state.steppers[0]()).tryGet()
test "start should start stepper for 10 minutes":
check:
state.delays.len == 1
state.delays[0] == 10.minutes
test "onStep is not activated when config.marketplaceEnable is false":
# Recreate chainMetrics, reset mockstate:
(await chain.stop()).tryGet()
state.steppers = @[]
# disable marketplace:
state.config.marketplaceEnable = false
(await chain.start()).tryGet()
check:
state.steppers.len == 0
test "step should not call setSlotFill when getRecentSlotFillEvents fails":
let testValue = -123
metrics.slotFill = testValue
marketplace.recentSlotFillEventsReturn = seq[SlotFilled].failure("testfailure")
await onStep()
check:
metrics.slotFill == testValue
test "step should setSlotFill to zero when getRecentSlotFillEvents returns empty seq":
metrics.slotFill = -123
marketplace.recentSlotFillEventsReturn = success(newSeq[SlotFilled]())
await onStep()
check:
metrics.slotFill == 0
test "step should setSlotFill to the length of seq returned from getRecentSlotFillEvents":
let fills = @[SlotFilled(), SlotFilled(), SlotFilled(), SlotFilled()]
marketplace.recentSlotFillEventsReturn = success(fills)
await onStep()
check:
metrics.slotFill == fills.len