packages feed

taffybar-7.2.7: test/unit/System/Taffybar/Widget/BatterySpec.hs

{-# LANGUAGE OverloadedStrings #-}

module System.Taffybar.Widget.BatterySpec (spec) where

import DBus (toVariant)
import Data.Map qualified as M
import Data.Word (Word32)
import System.Taffybar.Information.Battery
import System.Taffybar.Widget.Battery
import Test.Hspec

spec :: Spec
spec = do
  describe "formatBatteryInfo" $ do
    it "formats the current energy rate in watts" $ do
      let info =
            infoMapToBatteryInfo $
              M.fromList
                [ ("Percentage", toVariant (96.0 :: Double)),
                  ("EnergyRate", toVariant (19.966 :: Double))
                ]
      formatBatteryInfo info "$percentage$% $watts$W"
        `shouldBe` "96% 20.0W"

    it "uses positive watts for charging and negative watts for discharging" $ do
      let info state rate =
            infoMapToBatteryInfo $
              M.fromList
                [ ("State", toVariant (state :: Word32)),
                  ("EnergyRate", toVariant (rate :: Double))
                ]
      formatBatteryInfo (info 1 19.966) "$signedWatts$W"
        `shouldBe` "+20.0W"
      formatBatteryInfo (info 2 12.34) "$signedWatts$W"
        `shouldBe` "-12.3W"

  describe "defaultMonitorDisplayBatteryProperties" $
    it "refreshes on UPower sampling updates" $
      defaultMonitorDisplayBatteryProperties
        `shouldContain` ["EnergyRate", "UpdateTime"]