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
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))
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)
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)
def test_as_decimal_with_various_values_returns_expected_value( self, value, expected): # Arrange # Act result = BaseDecimal(value) # Assert assert expected == result
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
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)
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
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
def test_instantiate_base_decimal_from_str(self): # Arrange, Act result = BaseDecimal("1.23", precision=1) # Assert assert str(result) == "1.2"
def test_instantiate_base_decimal_from_float(self): # Arrange, Act result = BaseDecimal(1.12300, precision=5) # Assert assert str(result) == "1.12300"
def test_instantiate_with_negative_precision_raises_overflow_error(self): # Arrange # Act # Assert with pytest.raises(OverflowError): BaseDecimal(1.11, precision=-1)
def test_instantiate_with_none_value_raises_type_error(self): # Arrange # Act # Assert with pytest.raises(TypeError): BaseDecimal(None)