packages feed

cloud-seeder-0.1.0.0: test-suite/Network/CloudSeeder/TemplateSpec.hs

module Network.CloudSeeder.TemplateSpec (spec) where

import Data.ByteString.Char8 (pack)
import Data.Yaml (decode)
import Test.Hspec

import Network.CloudSeeder.Template
import Network.CloudSeeder.Types

spec :: Spec
spec = do
  describe "template parsing" $ do
    it "parses a template with required parameters" $ do
      let template
             = "Parameters:\n"
            ++ "  Env:\n"
            ++ "    Type: blah\n"
            ++ "  Foo:\n"
            ++ "    Type: blah\n"
          expected = Template $ ParameterSpecs [Required "Env", Required "Foo"]
          parsed = decode $ pack template
      parsed `shouldBe` Just expected

    it "parses a template with optional parameters" $ do
      let template
             = "Parameters:\n"
            ++ "  Env:\n"
            ++ "    Type: boop\n"
            ++ "    Default: test\n"
            ++ "  Foo:\n"
            ++ "    Type: boop\n"
            ++ "    Default: bar\n"
          expected = Template $ ParameterSpecs [Optional "Env" "test", Optional "Foo" "bar"]
          parsed = decode $ pack template
      parsed `shouldBe` Just expected

    it "parses default values that are numbers" $ do
      let template
             = "Parameters:\n"
            ++ "  Port:\n"
            ++ "    Type: Number\n"
            ++ "    Default: 42\n"
          expected = Template $ ParameterSpecs [Optional "Port" "42.0"]
          parsed = decode $ pack template
      parsed `shouldBe` Just expected