packages feed

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

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

import Data.Default (def)
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.HUnit (testCase, (@?=))

import Tricorder.Session.Config (Config (..))

import Tricorder.Session.Target qualified as Target
import Tricorder.Session.TestTarget qualified as TestTarget


test_TestTarget :: TestTree
test_TestTarget =
    testGroup
        "TestTarget"
        [ testGroup "resolveTestTargets" testResolveTestTargets
        ]


testResolveTestTargets :: [TestTree]
testResolveTestTargets =
    [ testCase "infers test: components from targets when testTargets is absent" do
        let cfg = def :: Config
        TestTarget.resolve cfg (mkTargets ["lib:mylib", "test:mylib-test"])
            @?= TestTarget.parse ["test:mylib-test"]
    , testCase "returns empty list when no test: components in targets" do
        let cfg = def :: Config
        TestTarget.resolve cfg (mkTargets ["lib:mylib", "exe:myapp"])
            @?= TestTarget.parse []
    , testCase "uses explicit testTargets list when set" do
        let cfg = def {testTargets = Just ["test:b-test"]} :: Config
        TestTarget.resolve cfg (mkTargets ["lib:a", "test:a-test", "test:b-test"])
            @?= TestTarget.parse ["test:b-test"]
    , testCase "returns empty list when testTargets is explicitly empty" do
        let cfg = def {testTargets = Just []} :: Config
        TestTarget.resolve cfg (mkTargets ["lib:a", "test:a-test"])
            @?= TestTarget.parse []
    , testCase "infers multiple test: components" do
        let cfg = def :: Config
        TestTarget.resolve cfg (mkTargets ["lib:a", "test:a-test", "test:b-test"])
            @?= TestTarget.parse ["test:a-test", "test:b-test"]
    ]
  where
    mkTargets = fmap Target.parse