public void Test_CalculatePrice_ReturnsWithoutDiscount()
        {
            var priceRequest = new PriceRequest
            {
                UserType  = (long)UserTypeEnum.NormalUser,
                GoldPrice = 10,
                Weight    = 5
            };
            var priceResponse = new PriceCalculatorResponse
            {
                GoldPrice  = priceRequest.GoldPrice,
                Weight     = priceRequest.Weight,
                TotalPrice = priceRequest.GoldPrice * priceRequest.Weight,
                Discount   = null
            };

            PriceCalculatorService service = new PriceCalculatorService(repositoryMock.Object, factoryMock.Object);
            var arg = new AbstractPriceCreateArg
            {
                UserType = (UserTypeEnum)priceRequest.UserType,
                PriceCalculatorService = service
            };
            var product = new AbstractPriceCreateResponse
            {
                Product = new NormalPriceProduct(service)
            };

            factoryMock.Setup(p => p.Create(arg)).Returns(product);
            var result = product.Product.CalculatePrice(priceRequest);

            Assert.NotNull(result);
            Assert.Null(result.Discount);
            Assert.True(result.TotalPrice == priceResponse.TotalPrice);
        }
        public void Test_PriceFactory_ReturnsPrivilegedPriceProduct()
        {
            var priceRequest = new PriceRequest
            {
                UserType = (long)UserTypeEnum.NormalUser
            };

            PriceCalculatorFactory factory = new PriceCalculatorFactory();
            var arg = new AbstractPriceCreateArg
            {
                UserType = (UserTypeEnum)priceRequest.UserType
            };
            var product = new AbstractPriceCreateResponse
            {
                Product = new NormalPriceProduct(null)
            };

            factoryMock.Setup(p => p.Create(arg)).Returns(product);
            var result = factory.Create(arg);

            Assert.NotNull(result.Product);
            Assert.True(result.Product.GetType() == typeof(NormalPriceProduct));
        }