packages feed

exchangerates-0.0.0.0: test/ExchangeRates/TypesSpec.hs

{-# LANGUAGE TypeApplications #-}

module ExchangeRates.TypesSpec
    ( spec
    ) where

import TestImport

import Data.Ratio

import ExchangeRates.Types

import ExchangeRates.Types.Gen ()

spec :: Spec
spec = do
    eqSpec @Rate
    genValidSpec @Rate
    jsonSpecOnValid @Rate
    describe "Rate" $ do
        describe "oneRate" $ it "is a valid rate" $ shouldBeValid oneRate
        specify "0 % x is an invalid rate" $
            forAllValid $ \n -> Rate (0 % (n + 1)) `shouldNotSatisfy` isValid
        describe "normaliseRate" $
            it "produces valid rates" $ producesValidsOnValids normaliseRate
        describe "mulRate" $
            it "produces valid rates" $ producesValidsOnValids2 mulRate
        describe "divRate" $
            it "produces valid rates" $ producesValidsOnValids2 divRate
    eqSpec @Currency
    genValidSpec @Currency
    jsonSpecOnValid @Currency
    eqSpec @Symbols
    genValidSpec @Symbols
    eqSpec @Rates
    genValidSpec @Rates