125 lines
2.9 KiB
C#
125 lines
2.9 KiB
C#
namespace BudgetApp.Tests.Domain;
|
|
|
|
using BudgetApp.Domain.Models;
|
|
using Xunit;
|
|
|
|
public class MoneyTests
|
|
{
|
|
[Fact]
|
|
public void Constructor_WithValidAmount_CreatesMoney()
|
|
{
|
|
// Arrange & Act
|
|
var money = new Money(100.50m, "USD");
|
|
|
|
// Assert
|
|
Assert.Equal(100.50m, money.Amount);
|
|
Assert.Equal("USD", money.Currency);
|
|
}
|
|
|
|
[Fact]
|
|
public void Constructor_WithNegativeAmount_ThrowsException()
|
|
{
|
|
// Arrange, Act & Assert
|
|
Assert.Throws<ArgumentException>(() => new Money(-100m, "USD"));
|
|
}
|
|
|
|
[Fact]
|
|
public void Constructor_WithNullCurrency_ThrowsException()
|
|
{
|
|
// Arrange, Act & Assert
|
|
Assert.Throws<ArgumentException>(() => new Money(100m, null!));
|
|
Assert.Throws<ArgumentException>(() => new Money(100m, ""));
|
|
}
|
|
|
|
[Fact]
|
|
public void Add_WithSameCurrency_ReturnsSum()
|
|
{
|
|
// Arrange
|
|
var money1 = new Money(100m, "USD");
|
|
var money2 = new Money(50m, "USD");
|
|
|
|
// Act
|
|
var result = money1.Add(money2);
|
|
|
|
// Assert
|
|
Assert.Equal(150m, result.Amount);
|
|
Assert.Equal("USD", result.Currency);
|
|
}
|
|
|
|
[Fact]
|
|
public void Add_WithDifferentCurrencies_ThrowsException()
|
|
{
|
|
// Arrange
|
|
var money1 = new Money(100m, "USD");
|
|
var money2 = new Money(50m, "EUR");
|
|
|
|
// Act & Assert
|
|
Assert.Throws<InvalidOperationException>(() => money1.Add(money2));
|
|
}
|
|
|
|
[Fact]
|
|
public void Subtract_WithSameCurrency_ReturnsDifference()
|
|
{
|
|
// Arrange
|
|
var money1 = new Money(100m, "USD");
|
|
var money2 = new Money(50m, "USD");
|
|
|
|
// Act
|
|
var result = money1.Subtract(money2);
|
|
|
|
// Assert
|
|
Assert.Equal(50m, result.Amount);
|
|
}
|
|
|
|
[Fact]
|
|
public void Subtract_ResultingInNegative_ThrowsException()
|
|
{
|
|
// Arrange
|
|
var money1 = new Money(50m, "USD");
|
|
var money2 = new Money(100m, "USD");
|
|
|
|
// Act & Assert
|
|
Assert.Throws<InvalidOperationException>(() => money1.Subtract(money2));
|
|
}
|
|
|
|
[Fact]
|
|
public void Equals_WithSameAmountAndCurrency_ReturnsTrue()
|
|
{
|
|
// Arrange
|
|
var money1 = new Money(100m, "USD");
|
|
var money2 = new Money(100m, "USD");
|
|
|
|
// Act & Assert
|
|
Assert.True(money1.Equals(money2));
|
|
Assert.True(money1 == money2);
|
|
}
|
|
|
|
[Fact]
|
|
public void Equals_WithDifferentAmount_ReturnsFalse()
|
|
{
|
|
// Arrange
|
|
var money1 = new Money(100m, "USD");
|
|
var money2 = new Money(50m, "USD");
|
|
|
|
// Act & Assert
|
|
Assert.False(money1.Equals(money2));
|
|
Assert.True(money1 != money2);
|
|
}
|
|
|
|
[Fact]
|
|
public void OperatorAdd_WithSameCurrency_ReturnsSum()
|
|
{
|
|
// Arrange
|
|
var money1 = new Money(100m, "USD");
|
|
var money2 = new Money(50m, "USD");
|
|
|
|
// Act
|
|
var result = money1 + money2;
|
|
|
|
// Assert
|
|
Assert.Equal(150m, result.Amount);
|
|
}
|
|
}
|
|
|
|
|