packages feed

relocant-1.0.0: test/Relocant/MergeSpec.hs

{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE PackageImports #-}
{-# LANGUAGE TypeApplications #-}
module Relocant.MergeSpec (spec) where

import Test.Hspec

import Relocant.Applied (Applied(..))
import Relocant.At (epoch)
import Relocant.Merge (Merged(..), ContentMismatch(..), merge)
import Relocant.Script (Script(..))


spec :: Spec
spec = do
  let
    a1 = Applied
      { id = "01"
      , name = "01-m1"
      , content = "m1"
      , appliedAt = epoch
      , durationS = mempty
      }
    a2 = Applied
      { id = "02"
      , name = "02-m2"
      , content = "m2"
      , appliedAt = epoch
      , durationS = mempty
      }
    s0 = Script
      { id = "000"
      , name = "000-m0"
      , content = "m0"
      }
    s1 = Script
      { id = "01"
      , name = "01-s1"
      , content = "s1"
      }
    s3 = Script
      { id = "03"
      , name = "03-s3"
      , content = "s3"
      }

  it "merges unapplied and applied migrations" $ do
    let
      result =
        merge [a1, a2] [s0, s1, s3]
    result `shouldBe` Merged
      { unrecorded = [s0]
      , scriptMissing = [a2]
      , contentMismatch = [ContentMismatch a1 s1]
      , unapplied = [s3]
      }