Newer
Older
Warehouse / tests / Domain.UnitTests / _testdep / TestHelper.cs
@Derek Comartin Derek Comartin on 22 Aug 2023 1 KB Init
using MyWarehouse.Domain.Common.ValueObjects.Mass;
using MyWarehouse.Domain.Common.ValueObjects.Money;
using MyWarehouse.Domain.Partners;
using MyWarehouse.Domain.Products;
using MyWarehouse.Domain.Transactions;
using System.Linq;
using System.Reflection;

namespace MyWarehouse.Domain.UnitTests
{
    internal static class TestHelper
    {
        public static Address NewValidAddress
            => new Address("123 Street", "Berlin", "Germany", "123456");

        public static Product NewValidProduct_NoStock
            => new Product("Product", "Description", new Money(44.99m, Currency.USD), new Mass(2.5f, MassUnit.Kilogram));

        public static Product NewValidProduct_WithStock(int stock)
            => AddStockToProduct(NewValidProduct_NoStock, stock);

        public static Partner NewValidPartner
            => new Partner("PartnerName", NewValidAddress);

        public static Transaction NewTransaction_EmptyProcurement
            => new Transaction(TransactionType.Procurement, NewValidPartner);

        public static Transaction NewTransaction_EmptySales
            => new Transaction(TransactionType.Sales, NewValidPartner);

        private static Product AddStockToProduct(Product product, int stock)
        {
            var fi = product.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance).Where(fi => fi.Name.Contains(nameof(Product.NumberInStock))).Single();
            fi.SetValue(product, stock);
            return product;
        }
    }
}