ex-oop-05-coffe-vending-mac.../CoffeeVendingMachines.Test/ProductTests.cs
github-classroom[bot] 2b1ce9b58f
Initial commit
2024-11-08 15:45:55 +00:00

100 lines
No EOL
2.5 KiB
C#

using FluentAssertions;
using Xunit;
namespace CoffeeVendingMachines.Test;
public sealed class ProductTests
{
private const string Name = "Tea, Earl Grey, Hot";
private const int Price = 80;
private const int Stock = 6;
[Fact]
public void Construction_Simple()
{
var product = new Product(Name, Price, Stock);
product.Name.Should().Be(Name);
product.Price.Should().Be(Price, "valid price used");
product.InStock.Should().BeTrue("stock is >0");
product.NumberSold.Should().Be(0, "nothing sold yet");
}
[Fact]
public void Construction_NoStock()
{
var product = new Product(Name, Price, 0);
product.InStock.Should().BeFalse("stock 0");
}
[Fact]
public void Construction_InvalidStock()
{
var product = new Product(Name, Price, -3);
product.InStock.Should().BeFalse("stock set to 0, because invalid stock passed");
}
[Theory]
[InlineData(36, "not a multiple of 5")]
[InlineData(-5, "negative value")]
[InlineData(0, "too small value")]
public void Construction_InvalidPrice(int price, string reason)
{
var product = new Product(Name, price, Stock);
product.Price.Should().Be(Product.FallbackPrice, reason);
}
[Fact]
public void AddSale_Simple()
{
var product = new Product(Name, Price, Stock);
product.NumberSold.Should().Be(0);
product.AddSale().Should().BeTrue();
product.NumberSold.Should().Be(1);
}
[Fact]
public void AddSale_Multiple()
{
var product = new Product(Name, Price, Stock);
product.NumberSold.Should().Be(0);
for (var i = 0; i < 4; i++)
{
product.AddSale().Should().BeTrue();
}
product.NumberSold.Should().Be(4);
}
[Fact]
public void AddSale_OutOfStock()
{
var product = new Product(Name, Price, 1);
product.NumberSold.Should().Be(0);
product.AddSale().Should().BeTrue();
product.NumberSold.Should().Be(1);
product.AddSale().Should().BeFalse("out of stock");
product.NumberSold.Should().Be(1);
}
[Fact]
public void StringRepresentation_Simple()
{
var product = new Product("Tea", Price, Stock);
for (var i = 0; i < 4; i++)
{
product.AddSale();
}
product.ToString().Should()
.NotBeNullOrWhiteSpace()
.And.Be("Tea € 0,80 [2 in stock | 4 sold]");
}
}