@hackage assert4hs-tasty0.1.0

Provider for tasty runner to run assert4hs tests

assert4hs-tasty

assert4hs provider for tasty

Example


data Foo = Foo {name :: String, age :: Int} deriving (Show, Eq)

isSuitableForEmployment :: Assertion Foo
isSuitableForEmployment =
  simpleAssertion (\a -> age a > 17) (\a -> "new employee must be 18 years or older, but it has " <> show (age a))
    . simpleAssertion (\a -> age a < 70) (\a -> "must be younger than 70 years old, but it has " <> show (age a))

unitTests :: TestTree
unitTests =
  testGroup
    "Unit tests"
    [ 
      fluentTestCase "chaining assertions" $ do
        let result = 4
        assertThat result $
          isGreaterThan 5
            . isLowerThan 20,
      fluentTestCase "focusing on part of data structure" $ do
        assertThat (Foo "someName" 15) $
          isEqualTo (Foo "someName" 15)
            . focus age
            . isGreaterThan 20
            . isLowerEqualThan 5,
      fluentTestCase "Changing subject uder test" $ do
        assertThat (Foo "someName" 15) $
          inside age (isGreaterThan 20 . isLowerEqualThan 5)
            . focus name
            . isEqualTo "someName1",
      fluentTestCase "Tagging assertions" $ do
        assertThat (Foo "someName" 15) $
          inside age (tag "age" . isGreaterThan 20 . isLowerEqualThan 5)
            . tag "name"
            . focus name
            . isEqualTo "someName1"
            . tag "should not be equal"
            . isNotEqualTo "someName",
      fluentTestCase "Custom assertions" $ do
        assertThat (Foo "someName" 15) isSuitableForEmployment,
        fluentTestCase "Custom assertions" $ do
        assertThat (Foo "someName" 76) isSuitableForEmployment
    ]

>>> Progress 1/2: assert4hsTests
>>>   Unit tests
>>>     chaining assertions:                FAIL
>>>       (test/Spec.hs:46): 
>>>       given 4 should be greater than 5
>>>     passed: 1, failed: 1, total: 2
>>>     focusing on part of data structure: FAIL
>>>       (test/Spec.hs:52): 
>>>       given 15 should be greater than 20
>>>       
>>>       (test/Spec.hs:53): 
>>>       given 15 should be lower or equal to 5
>>>     passed: 1, failed: 2, total: 3
>>>     Changing subject uder test:         FAIL
>>>       (test/Spec.hs:56): 
>>>       given 15 should be greater than 20
>>>       
>>>       (test/Spec.hs:56): 
>>>       given 15 should be lower or equal to 5
>>>       
>>>       (test/Spec.hs:58): 
>>>       given "someName" should be equal to "someName1"
>>>       "someName"
>>>       ╷
>>>       │
>>>       ╵
>>>       "someName1"
>>>                ▲
>>>     passed: 0, failed: 3, total: 3
>>>     Tagging assertions:                 FAIL
>>>       (test/Spec.hs:61): 
>>>       [age] given 15 should be greater than 20
>>>       
>>>       (test/Spec.hs:61): 
>>>       [age] given 15 should be lower or equal to 5
>>>       
>>>       (test/Spec.hs:64): 
>>>       [name] given "someName" should be equal to "someName1"
>>>       "someName"
>>>       ╷
>>>       │
>>>       ╵
>>>       "someName1"
>>>                ▲
>>>       (test/Spec.hs:66): 
>>>       [name.should not be equal] given "someName" should be not equal to "someName"
>>>     passed: 0, failed: 4, total: 4
>>>     Custom assertions:                  FAIL
>>>       (test/Spec.hs:35): 
>>>       new employee must be 18 years or older, but it has 15
>>>     passed: 1, failed: 1, total: 2
>>>     Custom assertions:                  FAIL
>>>       (test/Spec.hs:36): 
>>>       must be younger than 70 years old, but it has 76
>>>     passed: 1, failed: 1, total: 2
>>> 
>>> 6 out of 6 tests failed (0.01s)