def test_equality_with_various_values_returns_expected_result(
            self, value1, value2, expected):
        # Arrange, Act
        result = BaseDecimal(value1, 2) == BaseDecimal(value2, 2)

        # Assert
        assert result == expected
    def test_equality_with_various_values_returns_expected_result(self, value1, value2, expected):
        # Arrange
        # Act
        result = BaseDecimal(value1) == BaseDecimal(value2)

        # Assert
        self.assertEqual(expected, result)
    def test_hash(self):
        # Arrange
        decimal1 = BaseDecimal(1.1, 1)
        decimal2 = BaseDecimal(1.1, 1)

        # Act, Assert
        assert isinstance(hash(decimal2), int)
        assert hash(decimal1) == hash(decimal2)
    def test_equality_with_various_int_returns_expected_result(self, value1, value2, expected):
        # Arrange
        # Act
        result1 = BaseDecimal(value1) == value2
        result2 = value2 == BaseDecimal(value1)

        # Assert
        self.assertEqual(expected, result1)
        self.assertEqual(expected, result2)
    def test_hash(self):
        # Arrange
        decimal1 = BaseDecimal("1.1")
        decimal2 = BaseDecimal("1.1")

        # Act
        # Assert
        self.assertEqual(int, type(hash(decimal2)))
        self.assertEqual(hash(decimal1), hash(decimal2))
    def test_equality_with_various_int_returns_expected_result(
            self, value1, value2, expected):
        # Arrange, Act
        result1 = BaseDecimal(value1, 0) == value2
        result2 = value2 == BaseDecimal(value1, 0)

        # Assert
        assert result1 == expected
        assert result2 == expected
    def test_instantiate_with_various_valid_inputs_returns_expected_decimal(self, value, expected):
        # Arrange
        # Act
        decimal_object = BaseDecimal(value)

        # Assert
        self.assertEqual(expected, decimal_object)
    def test_as_double_with_various_values_returns_expected_value(
            self, value, expected):
        # Arrange, Act
        result = BaseDecimal(value, 1).as_double()

        # Assert
        assert result == expected
    def test_str_with_various_values_returns_expected_string(self, value, expected):
        # Arrange
        # Act
        decimal_object = BaseDecimal(value)

        # Assert
        self.assertEqual(expected, str(decimal_object))
    def test_instantiate_with_various_valid_inputs_returns_expected_decimal(
            self, value, expected):
        # Arrange, Act
        decimal_object = BaseDecimal(value, 2)

        # Assert
        assert decimal_object == expected
Exemple #11
0
    def test_int(self, value, expected):
        # Arrange
        decimal1 = BaseDecimal(value, 1)

        # Act
        # Assert
        assert int(decimal1) == expected
    def test_repr(self):
        # Arrange
        # Act
        result = repr(BaseDecimal("1.1"))

        # Assert
        self.assertEqual("BaseDecimal('1.1')", result)
    def test_int(self, value, expected):
        # Arrange
        decimal1 = BaseDecimal(value)

        # Act
        # Assert
        self.assertEqual(expected, int(decimal1))
Exemple #14
0
    def test_repr(self):
        # Arrange
        # Act
        result = repr(BaseDecimal(1.1, 1))

        # Assert
        assert "BaseDecimal('1.1')" == result
    def test_as_double_with_various_values_returns_expected_value(self, value, expected):
        # Arrange
        # Act
        result = BaseDecimal(value).as_double()

        # Assert
        self.assertEqual(expected, result)
Exemple #16
0
 def test_instantiate_with_float_value_raises_type_error(
         self):  # User should use .from_float()
     # Arrange
     # Act
     # Assert
     with pytest.raises(TypeError):
         BaseDecimal(1.1)
    def test_instantiate_with_various_precisions_returns_expected_decimal(
            self, value, precision, expected):
        # Arrange, Act
        decimal_object = BaseDecimal(value, precision)

        # Assert
        assert decimal_object == expected
        assert decimal_object.precision == precision
    def test_instantiate_with_various_precisions_returns_expected_decimal(self, value, precision, expected):
        # Arrange
        # Act
        decimal_object = BaseDecimal(value, precision)

        # Assert
        self.assertEqual(expected, decimal_object)
        self.assertEqual(precision, decimal_object.precision)
Exemple #19
0
    def test_as_decimal_with_various_values_returns_expected_value(
            self, value, expected):
        # Arrange
        # Act
        result = BaseDecimal(value)

        # Assert
        assert expected == result
Exemple #20
0
    def test_as_decimal_with_various_values_returns_expected_value(
        self,
        value,
        precision,
        expected,
    ):
        # Arrange, Act
        result = BaseDecimal(value, precision=precision)

        # Assert
        assert result == expected
    def test_str_with_various_values_returns_expected_string(
        self,
        value,
        precision,
        expected,
    ):
        # Arrange, Act
        decimal_object = BaseDecimal(value, precision=precision)

        # Assert
        assert str(decimal_object) == expected
Exemple #22
0
    def test_rounding_behaviour_with_various_values_returns_expected_decimal(
        self,
        value,
        precision,
        rounding,
        expected,
    ):
        # Arrange
        # Act
        result = BaseDecimal(value, precision, rounding)

        # Assert
        assert expected == result
 def test_comparisons_with_various_values_returns_expected_result(
     self,
     value1,
     value2,
     expected1,
     expected2,
     expected3,
     expected4,
 ):
     # Arrange, Act, Assert
     assert (BaseDecimal(value1, precision=0) > BaseDecimal(
         value2, precision=0)) == expected1
     assert (BaseDecimal(value1, precision=0) >= BaseDecimal(
         value2, precision=0)) == expected2
     assert (BaseDecimal(value1, precision=0) <= BaseDecimal(
         value2, precision=0)) == expected3
     assert (BaseDecimal(value1, precision=0) < BaseDecimal(
         value2, precision=0)) == expected4
    def test_comparisons_with_various_values_returns_expected_result(
            self,
            value1,
            value2,
            expected1,
            expected2,
            expected3,
            expected4,
    ):
        # Arrange
        # Act
        result1 = BaseDecimal(value1) > BaseDecimal(value2)
        result2 = BaseDecimal(value1) >= BaseDecimal(value2)
        result3 = BaseDecimal(value1) <= BaseDecimal(value2)
        result4 = BaseDecimal(value1) < BaseDecimal(value2)

        # Assert
        self.assertEqual(expected1, result1)
        self.assertEqual(expected2, result2)
        self.assertEqual(expected3, result3)
        self.assertEqual(expected4, result4)
Exemple #25
0
    def test_comparisons_with_various_values_returns_expected_result(
        self,
        value1,
        value2,
        expected1,
        expected2,
        expected3,
        expected4,
    ):
        # Arrange
        # Act
        result1 = BaseDecimal(value1) > BaseDecimal(value2)
        result2 = BaseDecimal(value1) >= BaseDecimal(value2)
        result3 = BaseDecimal(value1) <= BaseDecimal(value2)
        result4 = BaseDecimal(value1) < BaseDecimal(value2)

        # Assert
        assert expected1 == result1
        assert expected2 == result2
        assert expected3 == result3
        assert expected4 == result4
Exemple #26
0
class TestMoney:
    def test_instantiate_with_none_currency_raises_type_error(self):
        # Arrange
        # Act
        # Assert
        with pytest.raises(TypeError):
            Money(1.0, None)

    def test_instantiate_with_none_value_returns_money_with_zero_amount(self):
        # Arrange
        # Act
        money_zero = Money(None, currency=USD)

        # Assert
        assert 0 == money_zero.as_decimal()

    @pytest.mark.parametrize(
        "value, expected",
        [
            [0, Money(0, USD)],
            [1, Money(1, USD)],
            [-1, Money(-1, USD)],
            ["0", Money(0, USD)],
            ["0.0", Money(0, USD)],
            ["-0.0", Money(0, USD)],
            ["1.0", Money(1, USD)],
            ["-1.0", Money(-1, USD)],
            [Decimal(), Money(0, USD)],
            [Decimal("1.1"), Money(1.1, USD)],
            [Decimal("-1.1"), Money(-1.1, USD)],
            [BaseDecimal(0, 0), Money(0, USD)],
            [BaseDecimal(1.1, 1), Money(1.1, USD)],
            [BaseDecimal(-1.1, 1), Money(-1.1, USD)],
        ],
    )
    def test_instantiate_with_various_valid_inputs_returns_expected_money(
        self, value, expected
    ):
        # Arrange
        # Act
        money = Money(value, USD)

        # Assert
        assert money == expected

    @pytest.mark.parametrize(
        "value1, value2, expected1, expected2",
        [["0", -0, False, True], ["-0", 0, False, True], ["-1", -1, False, True]],
    )
    def test_equality_with_different_currencies_returns_false(
        self,
        value1,
        value2,
        expected1,
        expected2,
    ):
        # Arrange
        # Act
        result1 = Money(value1, USD) == Money(value2, BTC)
        result2 = Money(value1, USD) != Money(value2, BTC)

        # Assert
        assert expected1 == result1
        assert expected2 == result2

    @pytest.mark.parametrize(
        "value1, value2, expected1, expected2, expected3, expected4",
        [
            [0, 0, False, False, False, False],
            [1, 0, False, False, False, False],
            [-1, 0, False, False, False, False],
        ],
    )
    def test_comparisons_with_different_currencies_returns_false(
        self,
        value1,
        value2,
        expected1,
        expected2,
        expected3,
        expected4,
    ):
        # Arrange
        # Act
        result1 = Money(value1, USD) > Money(value2, BTC)
        result2 = Money(value1, USD) >= Money(value2, BTC)
        result3 = Money(value1, USD) <= Money(value2, BTC)
        result4 = Money(value1, USD) < Money(value2, BTC)

        # Assert
        assert expected1 == result1
        assert expected2 == result2
        assert expected3 == result3
        assert expected4 == result4

    def test_from_str_with_no_decimal(self):
        # Arrange
        # Act
        money = Money(1, USD)

        # Assert
        assert 1.0 == money.as_double()
        assert "1.00" == str(money)

    def test_initialized_with_many_decimals_rounds_to_currency_precision(self):
        # Arrange
        # Act
        result1 = Money(1000.333, USD)
        result2 = Money(5005.556666, USD)

        # Assert
        assert "1_000.33 USD" == result1.to_str()
        assert "5_005.56 USD" == result2.to_str()

    def test_hash(self):
        # Arrange
        money0 = Money(0, USD)

        # Act
        # Assert
        assert isinstance(hash(money0), int)
        assert hash(money0) == hash(money0)

    def test_str(self):
        # Arrange
        money0 = Money(0, USD)
        money1 = Money(1, USD)
        money2 = Money(1_000_000, USD)

        # Act
        # Assert
        assert "0.00" == str(money0)
        assert "1.00" == str(money1)
        assert "1000000.00" == str(money2)
        assert "1_000_000.00 USD" == money2.to_str()

    def test_repr(self):
        # Arrange
        money = Money(1.00, USD)

        # Act
        result = repr(money)

        # Assert
        assert "Money('1.00', USD)" == result
Exemple #27
0
    def test_instantiate_base_decimal_from_str(self):
        # Arrange, Act
        result = BaseDecimal("1.23", precision=1)

        # Assert
        assert str(result) == "1.2"
Exemple #28
0
    def test_instantiate_base_decimal_from_float(self):
        # Arrange, Act
        result = BaseDecimal(1.12300, precision=5)

        # Assert
        assert str(result) == "1.12300"
Exemple #29
0
 def test_instantiate_with_negative_precision_raises_overflow_error(self):
     # Arrange
     # Act
     # Assert
     with pytest.raises(OverflowError):
         BaseDecimal(1.11, precision=-1)
Exemple #30
0
 def test_instantiate_with_none_value_raises_type_error(self):
     # Arrange
     # Act
     # Assert
     with pytest.raises(TypeError):
         BaseDecimal(None)