packages feed

stackage-0.2.1.3: test/Stackage/BuildPlanSpec.hs

{-# LANGUAGE OverloadedStrings, NoImplicitPrelude #-}
module Stackage.BuildPlanSpec (spec) where

import Stackage.BuildPlan
import Stackage.Prelude
import Stackage.BuildConstraints
import Stackage.UpdateBuildPlan
import Test.Hspec
import qualified Data.Yaml as Y
import Distribution.Version (anyVersion)
import qualified Data.Map as Map
import Network.HTTP.Client (withManager)
import Network.HTTP.Client.TLS (tlsManagerSettings)

spec :: Spec
spec = it "works" $ withManager tlsManagerSettings $ \man -> do
    bc <- defaultBuildConstraints man
    bp <- newBuildPlan bc
    let bs = Y.encode bp
        ebp' = Y.decodeEither bs

    bp' <- either error return ebp'

    let allPackages = Map.keysSet (bpPackages bp) ++ Map.keysSet (bpPackages bp')
    forM_ allPackages $ \name ->
        (name, lookup name (bpPackages bp')) `shouldBe`
        (name, lookup name (bpPackages bp))

    bpGithubUsers bp' `shouldBe` bpGithubUsers bp
    when (bp' /= bp) $ error "bp' /= bp"
    bp2 <- updateBuildPlan bp
    when (dropVersionRanges bp2 /= dropVersionRanges bp) $ error "bp2 /= bp"
  where
    dropVersionRanges bp =
        bp { bpPackages = map go $ bpPackages bp }
      where
        go pb = pb { ppConstraints = go' $ ppConstraints pb }
        go' pc = pc { pcVersionRange = anyVersion }