packages feed

stack-2.1.1: src/test/Stack/Config/DockerSpec.hs

{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ViewPatterns #-}
module Stack.Config.DockerSpec (spec) where

import Test.Hspec
import Test.Hspec.QuickCheck
import Stack.Prelude
import Stack.Types.Resolver
import RIO.Time (fromGregorian)
import Stack.Config.Docker (parseLtsName, addDefaultTag)

spec :: Spec
spec = do
  prop "parseLtsName" $ \(abs -> x) (abs -> y) -> do
    case ltsSnapshotLocation x y of
      RSLUrl url _ ->
        case parseLtsName url of
          Just (x', y') -> do
            x `shouldBe` x'
            y `shouldBe` y'
          Nothing -> error "parseLtsName failed"
      loc -> error $ show loc
  describe "addDefaultTag" $ do
    it "succeeds fails no resolver" $ addDefaultTag "foo/bar" Nothing Nothing `shouldBe` Nothing
    it "succeeds on LTS" $
      addDefaultTag
        "foo/bar"
        Nothing
        (Just $ ARResolver $ ltsSnapshotLocation 1 2)
      `shouldBe` Just "foo/bar:lts-1.2"
    it "fails on nightly" $
      addDefaultTag
        "foo/bar"
        Nothing
        (Just $ ARResolver $ nightlySnapshotLocation $ fromGregorian 2018 1 1)
      `shouldBe` Nothing