packages feed

language-docker-2.0.0: test/Language/Docker/EDSL/QuasiSpec.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes       #-}
module Language.Docker.EDSL.QuasiSpec
  where

import           Language.Docker.EDSL
import           Language.Docker.EDSL.Quasi
import           Language.Docker.Syntax
import           Test.Hspec

spec :: Spec
spec = do
    describe "dockerfile" $
        it "parses a dockerfile and returns its ast" $ do
            let df = map instruction [dockerfile|
                                                FROM node
                                                RUN apt-get update
                                                CMD node something.js
                                                |]
            df `shouldBe` [ From (UntaggedImage "node" Nothing)
                          , Run ["apt-get", "update"]
                          , Cmd ["node", "something.js"]
                          ]

    describe "edockerfile" $
        it "lets us use parsed dockerfiles seamlessly in our DSL" $ do
            let d = do
                    from ("node" `aliased` "node-build")
                    expose (ports [tcpPort 8080, variablePort "PORT"])
                    [edockerfile|
                                RUN apt-get update
                                CMD node something.js
                                |]
                df = map instruction (toDockerfile d)
            df `shouldBe` [ From (UntaggedImage "node" (Just $ ImageAlias "node-build"))
                          , Expose (Ports [Port 8080 TCP, PortStr "$PORT"])
                          , Run ["apt-get", "update"]
                          , Cmd ["node", "something.js"]
                          ]