about summary refs log tree commit diff
path: root/users/grfn/xanthous/test/Xanthous/Entities/CommonSpec.hs
diff options
context:
space:
mode:
authorGriffin Smith <grfn@gws.fyi>2021-11-21T14·54-0500
committergrfn <grfn@gws.fyi>2021-11-22T19·12+0000
commit95ee86225b7b858ae6c2438211e934ee4db66222 (patch)
tree3c594e16cc44dae7e4b67ac38ae481e3305d6962 /users/grfn/xanthous/test/Xanthous/Entities/CommonSpec.hs
parent3a01398672d50aa768f926776cb04ef6f5f6f75e (diff)
refactor(gs/xanthous): Break out inventory into a common module r/3081
Creatures are going to have an inventory too now in addition to
characters, so all the data types and lenses and stuff that define
inventory need to be broken out into a separate module so the Creature
entity can use them.

Change-Id: I83f1c70d316afaaf2e75901f9dc28f79fd2cd31f
Reviewed-on: https://cl.tvl.fyi/c/depot/+/3901
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
Diffstat (limited to 'users/grfn/xanthous/test/Xanthous/Entities/CommonSpec.hs')
-rw-r--r--users/grfn/xanthous/test/Xanthous/Entities/CommonSpec.hs32
1 files changed, 32 insertions, 0 deletions
diff --git a/users/grfn/xanthous/test/Xanthous/Entities/CommonSpec.hs b/users/grfn/xanthous/test/Xanthous/Entities/CommonSpec.hs
new file mode 100644
index 000000000000..ba27e3cbca4e
--- /dev/null
+++ b/users/grfn/xanthous/test/Xanthous/Entities/CommonSpec.hs
@@ -0,0 +1,32 @@
+--------------------------------------------------------------------------------
+module Xanthous.Entities.CommonSpec (main, test) where
+--------------------------------------------------------------------------------
+import           Test.Prelude
+import           Data.Vector.Lens (toVectorOf)
+--------------------------------------------------------------------------------
+import           Xanthous.Entities.Common
+--------------------------------------------------------------------------------
+
+main :: IO ()
+main = defaultMain test
+
+test :: TestTree
+test = testGroup "Xanthous.Entities.CommonSpec"
+  [ testGroup "Inventory"
+    [ testProperty "items === itemsWithPosition . _2" $ \inv ->
+        inv ^.. items === inv ^.. itemsWithPosition . _2
+    , testGroup "removeItemFromPosition" $
+      let rewield w inv =
+            let (old, inv') = inv & wielded <<.~ w
+            in inv' & backpack <>~ toVectorOf (wieldedItems . wieldedItem) old
+      in [ (Backpack, \item -> backpack %~ (item ^. wieldedItem <|))
+         , (LeftHand, rewield . inLeftHand)
+         , (RightHand, rewield . inRightHand)
+         , (BothHands, rewield . review doubleHanded)
+         ] <&> \(pos, addItem) ->
+           testProperty (show pos) $ \inv item ->
+             let inv' = addItem item inv
+                 inv'' = removeItemFromPosition pos (item ^. wieldedItem) inv'
+             in inv'' ^.. items === inv ^.. items
+    ]
+  ]