packages feed

eve-0.1.6: test/Eve/Internal/StatesSpec.hs

{-# language TemplateHaskell #-}
module Eve.Internal.StatesSpec where

import Test.Hspec
import Fixtures
import Eve

import Control.Lens
import Data.Default

data SimpleState = SimpleState
  { _myString :: String
  }
makeLenses ''SimpleState

instance Default SimpleState where
  def = SimpleState "default"

myStringStateLens :: HasStates s => Lens' s String
myStringStateLens = makeStateLens myString

makeStateLensTest :: AppT AppState Identity String
makeStateLensTest = do
  myStringStateLens .= "new"
  use (stateLens.myString)

spec :: Spec
spec = do
  describe "makeStateLens" $ do
    it "creates a lens which accesses state from States" $
      let (makeStateLensResult, _) = noIOTest makeStateLensTest
       in makeStateLensResult `shouldBe` "new"