packages feed

yamlscript-0.2.1.0: test/Test.hs

-- Copyright 2022-2025 Ingy döt Net
-- This code is licensed under MIT license (See License for details)

{-# LANGUAGE OverloadedStrings #-}

module Main where

import Test.Hspec
import qualified Data.Text as T
import qualified Data.Aeson as Aeson
import qualified Data.Aeson.Key as Key
import qualified Data.Aeson.KeyMap as KeyMap
import YAMLScript
import YAMLScript.Tests

main :: IO ()
main = hspec $ do
  describe "YAMLScript" $ do
    it "loads simple YAML" $ do
      result <- loadYAMLScript "foo: bar"
      result `shouldBe` Aeson.object
        [("data", Aeson.object [("foo", Aeson.String "bar")])]

    it "evaluates YAMLScript function call" $ do
      result <- loadYAMLScript "!yamlscript/v0\nadd(40, 2)"
      result `shouldBe` Aeson.object [("data", Aeson.Number 42)]

    it "loads from file" $ do
      result <- loadYAMLScriptFile "test/data/simple.ys"
      result `shouldBe` Aeson.object
        [("data", Aeson.object [("test", Aeson.String "value")])]

    it "handles errors gracefully" $ do
      result <- loadYAMLScript "!yamlscript/v0\ninvalid: syntax"
      case result of
        Aeson.Object obj -> case KeyMap.lookup (Key.fromString "error") obj of
          Just _ -> return () -- Error present, test passes
          Nothing -> expectationFailure "Expected error response"
        _ -> expectationFailure "Expected JSON object"