packages feed

wyvern-diagrams-0.4.3.0: src/tests/ValidatorTests.hs

module ValidatorTests where

import Blocks (Block (..))
import ID
import Test.Hspec
import Validator (categorizeId, findIncorrectGammaConnections', findIncorrectGammaConnections'')

specCategorizeId :: Spec
specCategorizeId = describe "categorizeId" $ do
  it "adds a new unique ID to the unique list" $ do
    let ids = [ID "1", ID "2"]
    let duplicatedIds = [ID "1", ID "2"]
    let (resultIds, resultDuplicatedIds) = categorizeId (ID "3") (ids, duplicatedIds)
    length resultIds `shouldBe` 3
    resultIds `shouldContain` [ID "3"]
    resultDuplicatedIds `shouldBe` duplicatedIds

  it "moves an ID to duplicated list when seen a second time" $ do
    let ids = [ID "1", ID "2"]
    let duplicatedIds = []
    let (resultIds, resultDuplicatedIds) = categorizeId (ID "1") (ids, duplicatedIds)
    length resultIds `shouldBe` 2
    length resultDuplicatedIds `shouldBe` 1
    resultDuplicatedIds `shouldContain` [ID "1"]

  it "leaves an ID unchanged if already in duplicated list" $ do
    let ids = [ID "1", ID "2"]
    let duplicatedIds = [ID "1"]
    let (resultIds, resultDuplicatedIds) = categorizeId (ID "1") (ids, duplicatedIds)
    length resultIds `shouldBe` 2
    length resultDuplicatedIds `shouldBe` 1
    resultDuplicatedIds `shouldBe` [ID "1"]

  it "adds a new ID to unique list with empty starting lists" $ do
    let ids = []
    let duplicatedIds = []
    let (resultIds, resultDuplicatedIds) = categorizeId (ID "1") (ids, duplicatedIds)
    length resultIds `shouldBe` 1
    length resultDuplicatedIds `shouldBe` 0
    resultIds `shouldContain` [ID "1"]

specFindIncorrectGammaConnections'' :: Spec
specFindIncorrectGammaConnections'' = describe "findIncorrectGammaConnections''" $ do
  it "detects a fork's gamma connection id is correct" $ do
    let fork = Fork Nothing "" [] [] (Just (ID "1"))
    let result = findIncorrectGammaConnections'' fork [] [ID "1", ID "2"]
    length result `shouldBe` 0

  it "detects a fork's gamma connection id is incorrect" $ do
    let fork = Fork Nothing "" [] [] (Just (ID "3"))
    let result = findIncorrectGammaConnections'' fork [] [ID "1", ID "2"]
    length result `shouldBe` 1
    result `shouldContain` [ID "3"]

specFindIncorrectGammaConnections' :: Spec
specFindIncorrectGammaConnections' = describe "findIncorrectGammaConnections'" $ do
  it "combines all incorrect ids found in a list of blocks" $ do
    let fork = Fork Nothing "" [] [] (Just (ID "3"))
    let action = Action Nothing ""
    let result = findIncorrectGammaConnections' [fork, action] [] [ID "1", ID "2"]
    length result `shouldBe` 1
    result `shouldContain` [ID "3"]