Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/pod.git
<?php
require_once '../Money.php';
require_once '../Currency.php';

class TestMoney {
  /**
   * Executes all test methods via callback.
   *
   * @param callable $callback Function to execute test methods
   */
  public function run( $callback ) {
    $callback( [
      'test_Money_ConstructZeroAmount_Succeeds',
      'test_Money_ConstructLargeAmount_Succeeds',
      'test_Money_ConstructNegativeAmount_Succeeds',
      'test_Money_ConstructManyDecimals_Succeeds',
      'test_Money_IsAmountWithinTolerance_ReturnsTrue',
      'test_Money_IsAmountOutsideTolerance_ReturnsFalse'
    ] );
  }

  public function test_Money_ConstructZeroAmount_Succeeds(): bool {
    $money = new Money( 0.0, Currency::CAD );
    return $money->isAmount( 0.0 ) && $money->isCurrency( Currency::CAD );
  }

  public function test_Money_ConstructLargeAmount_Succeeds(): bool {
    $money = new Money( 999999999.99, Currency::CAD );
    return $money->isAmount( 999999999.99 );
  }

  public function test_Money_ConstructNegativeAmount_Succeeds(): bool {
    $money = new Money( -250.75, Currency::EUR );
    return $money->isAmount( -250.75 ) && $money->isCurrency( Currency::EUR );
  }

  public function test_Money_ConstructManyDecimals_Succeeds(): bool {
    $money = new Money( 123.4567, Currency::AUD );
    return $money->isAmount( 123.4567 ) && $money->isCurrency( Currency::AUD );
  }

  public function test_Money_IsAmountWithinTolerance_ReturnsTrue(): bool {
    $money = new Money( 100.005, Currency::CAD );
    return $money->isAmount( 100.00 );
  }

  public function test_Money_IsAmountOutsideTolerance_ReturnsFalse(): bool {
    $money = new Money( 100.00, Currency::CAD );
    return !$money->isAmount( 100.02 );
  }
}