packages feed

tricorder-0.2.0.0: test/Unit/Tricorder/Session/TestTargetSpec.hs

module Unit.Tricorder.Session.TestTargetSpec (spec_TestTarget) where

import Data.Default (def)
import Test.Hspec (Spec, describe, it, shouldBe)

import Tricorder.Session.Config (Config (..))
import Tricorder.Session.Target (parseTarget)
import Tricorder.Session.TestTarget (parseTestTargets, resolveTestTargets)


spec_TestTarget :: Spec
spec_TestTarget = do
    describe "resolveTestTargets" testResolveTestTargets


testResolveTestTargets :: Spec
testResolveTestTargets = do
    it "infers test: components from targets when testTargets is absent" do
        let cfg = def :: Config
        resolveTestTargets cfg (mkTargets ["lib:mylib", "test:mylib-test"])
            `shouldBe` parseTestTargets ["test:mylib-test"]

    it "returns empty list when no test: components in targets" do
        let cfg = def :: Config
        resolveTestTargets cfg (mkTargets ["lib:mylib", "exe:myapp"])
            `shouldBe` parseTestTargets []

    it "uses explicit testTargets list when set" do
        let cfg = def {testTargets = Just ["test:b-test"]} :: Config
        resolveTestTargets cfg (mkTargets ["lib:a", "test:a-test", "test:b-test"])
            `shouldBe` parseTestTargets ["test:b-test"]

    it "returns empty list when testTargets is explicitly empty" do
        let cfg = def {testTargets = Just []} :: Config
        resolveTestTargets cfg (mkTargets ["lib:a", "test:a-test"])
            `shouldBe` parseTestTargets []

    it "infers multiple test: components" do
        let cfg = def :: Config
        resolveTestTargets cfg (mkTargets ["lib:a", "test:a-test", "test:b-test"])
            `shouldBe` parseTestTargets ["test:a-test", "test:b-test"]
  where
    mkTargets = fmap parseTarget