packages feed

paypal-adaptive-hoops-0.8.0.0: tests/Local/Money.hs

module Local.Money (unitMoney) where

import Test.Framework
import Test.Framework.Providers.HUnit (testCase)
import Test.HUnit ((@=?), Assertion)
import Web.PayPal.Adaptive

unitMoney :: Test
unitMoney = testGroup "money"
  [ testCase "handle large negative amount correctly"        largeNegative
  , testCase "handle negative amount correctly"              negative
  , testCase "handle 0 correctly"                            zero
  , testCase "handle 1 correctly"                            oneDigit
  , testCase "handle 10 correctly"                           twoDigitsTrailingZero
  , testCase "show both decimals even if both are zero"      threeDigitsTrailingZeros
  , testCase "show both decimals even if the second is zero" threeDigitsTrailingZero
  , testCase "handles large amount correctly"                largeAmount
  ]

testM2P :: Int -> String -> Assertion
testM2P input correct =
  correct @=? m2PayPal USD { _usdCents = input }

largeNegative            :: Assertion
largeNegative            = testM2P (-98783) "-987.83"

negative                 :: Assertion
negative                 = testM2P (-1) "-0.01"

zero                     :: Assertion
zero                     = testM2P 0 "0.00"

oneDigit                 :: Assertion
oneDigit                 = testM2P 1 "0.01"

twoDigitsTrailingZero    :: Assertion
twoDigitsTrailingZero    = testM2P 10 "0.10"

threeDigitsTrailingZeros :: Assertion
threeDigitsTrailingZeros = testM2P 100 "1.00"

threeDigitsTrailingZero  :: Assertion
threeDigitsTrailingZero  = testM2P 110 "1.10"

largeAmount              :: Assertion
largeAmount              = testM2P 792874 "7928.74"