stacker-0.0.1.0: test/TestAnalysis.hs
{-# LANGUAGE OverloadedStrings #-}
module TestAnalysis (analysisTests) where
import Data.Map.Strict qualified as Map
import Test.Tasty (TestTree)
import Test.Tasty.HUnit (testCase, (@?=))
import Analysis (determineNewSnapshot)
import Types
-- | A small, fixed snapshot database, independent of the user's state directory.
testDB :: SnapshotDB
testDB = SnapshotDB
{ dbLTS = Map.fromList
[ (LTSVersion 24 1, GHCVersion 9 10 2)
, (LTSVersion 24 5, GHCVersion 9 10 3)
]
, dbNightly = Map.fromList
[ (NightlyVersion 2025 5 9, GHCVersion 9 10 2)
, (NightlyVersion 2026 8 27, GHCVersion 9 12 4)
-- No nightly for 2026-08-28 and 2026-08-29.
, (NightlyVersion 2026 8 30, GHCVersion 9 12 4)
, (NightlyVersion 2026 10 12, GHCVersion 9 12 4)
]
, dbGHC = Map.empty
}
analysisTests :: [TestTree]
analysisTests =
[ testCase "nightly with LTS for its GHC bumps to LTS" $
determineNewSnapshot testDB "nightly-2025-05-09" @?= BumpTo "lts-24.5"
, testCase "known nightly bumps to latest nightly" $
determineNewSnapshot testDB "nightly-2026-08-27" @?= BumpTo "nightly-2026-10-12"
, testCase "nightly missing from database bumps to latest nightly" $
determineNewSnapshot testDB "nightly-2026-08-28" @?= BumpTo "nightly-2026-10-12"
, testCase "latest nightly is up to date" $
determineNewSnapshot testDB "nightly-2026-10-12" @?= UpToDate
, testCase "nightly newer than database is unknown" $
determineNewSnapshot testDB "nightly-2026-10-20" @?= Unknown
, testCase "LTS bumps to latest minor" $
determineNewSnapshot testDB "lts-24.1" @?= BumpTo "lts-24.5"
, testCase "latest LTS is up to date" $
determineNewSnapshot testDB "lts-24.5" @?= UpToDate
, testCase "LTS newer than database is unknown" $
determineNewSnapshot testDB "lts-24.9" @?= Unknown
, testCase "LTS with unknown major is unknown" $
determineNewSnapshot testDB "lts-99.1" @?= Unknown
, testCase "non-Stackage resolver is unknown" $
determineNewSnapshot testDB "ghc-9.12.4" @?= Unknown
]