--------------------------------------------------------------------------------
module Xanthous.Game.StateSpec (main, test) where
--------------------------------------------------------------------------------
import           Test.Prelude
--------------------------------------------------------------------------------
import           Xanthous.Game.State
import           Xanthous.Entities.Raws (raws)
import           Xanthous.Generators.Level.LevelContents (entityFromRaw)
import           Control.Monad.Random (evalRandT)
import           System.Random (getStdGen)
--------------------------------------------------------------------------------

main :: IO ()
main = defaultMain test

test :: TestTree
test = testGroup "Xanthous.Game.StateSpec"
  [ testGroup "entityTypeName"
    [ testCase "for a creature" $ do
        let gormlakRaw = raws ^?! ix "gormlak"
        creature <- runRand $ entityFromRaw gormlakRaw
        entityTypeName creature @?= "Creature"
    , testCase "for an item" $ do
        let stickRaw = raws ^?! ix "stick"
        item <- runRand $ entityFromRaw stickRaw
        entityTypeName item @?= "Item"
    ]
  ]
  where
    runRand x = evalRandT x =<< getStdGen
