Updated CatalogItem to support more updates; added tests
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using Ardalis.GuardClauses;
|
||||
using Microsoft.eShopWeb.ApplicationCore.Interfaces;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace Microsoft.eShopWeb.ApplicationCore.Entities
|
||||
{
|
||||
@@ -14,7 +15,12 @@ namespace Microsoft.eShopWeb.ApplicationCore.Entities
|
||||
public int CatalogBrandId { get; private set; }
|
||||
public CatalogBrand CatalogBrand { get; private set; }
|
||||
|
||||
public CatalogItem(int catalogTypeId, int catalogBrandId, string description, string name, decimal price, string pictureUri)
|
||||
public CatalogItem(int catalogTypeId,
|
||||
int catalogBrandId,
|
||||
string description,
|
||||
string name,
|
||||
decimal price,
|
||||
string pictureUri)
|
||||
{
|
||||
CatalogTypeId = catalogTypeId;
|
||||
CatalogBrandId = catalogBrandId;
|
||||
@@ -30,5 +36,27 @@ namespace Microsoft.eShopWeb.ApplicationCore.Entities
|
||||
Name = name;
|
||||
Price = price;
|
||||
}
|
||||
|
||||
public void UpdateDetails(string name, string description, decimal price)
|
||||
{
|
||||
Guard.Against.NullOrEmpty(name, nameof(name));
|
||||
Guard.Against.NullOrEmpty(description, nameof(description));
|
||||
Guard.Against.NegativeOrZero(price, nameof(price));
|
||||
Name = name;
|
||||
Description = description;
|
||||
Price = price;
|
||||
}
|
||||
|
||||
public void UpdateBrand(int catalogBrandId)
|
||||
{
|
||||
Guard.Against.Zero(catalogBrandId, nameof(catalogBrandId));
|
||||
CatalogBrandId = catalogBrandId;
|
||||
}
|
||||
|
||||
public void UpdateType(int catalogTypeId)
|
||||
{
|
||||
Guard.Against.Zero(catalogTypeId, nameof(catalogTypeId));
|
||||
CatalogTypeId = catalogTypeId;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,21 @@
|
||||
namespace Microsoft.eShopWeb.PublicApi.CatalogItemEndpoints
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace Microsoft.eShopWeb.PublicApi.CatalogItemEndpoints
|
||||
{
|
||||
public class UpdateCatalogItemRequest : BaseRequest
|
||||
{
|
||||
[Range(1, 10000)]
|
||||
public int Id { get; set; }
|
||||
[Range(1, 10000)]
|
||||
public int CatalogBrandId { get; set; }
|
||||
[Range(1, 10000)]
|
||||
public int CatalogTypeId { get; set; }
|
||||
[Required]
|
||||
public string Description { get; set; }
|
||||
[Required]
|
||||
public string Name { get; set; }
|
||||
public string PictureUri { get; set; }
|
||||
[Range(0.01, 10000)]
|
||||
public decimal Price { get; set; }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -33,7 +33,9 @@ namespace Microsoft.eShopWeb.PublicApi.CatalogItemEndpoints
|
||||
|
||||
var existingItem = await _itemRepository.GetByIdAsync(request.Id);
|
||||
|
||||
existingItem.Update(request.Name, request.Price);
|
||||
existingItem.UpdateDetails(request.Name, request.Description, request.Price);
|
||||
existingItem.UpdateBrand(request.CatalogBrandId);
|
||||
existingItem.UpdateType(request.CatalogTypeId);
|
||||
|
||||
await _itemRepository.UpdateAsync(existingItem);
|
||||
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
using Microsoft.eShopWeb.ApplicationCore.Entities.OrderAggregate;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.eShopWeb.UnitTests.Builders;
|
||||
using Xunit;
|
||||
using Microsoft.eShopWeb.ApplicationCore.Entities;
|
||||
using System;
|
||||
|
||||
namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Entities.OrderTests
|
||||
{
|
||||
public class UpdateDetails
|
||||
{
|
||||
private CatalogItem _testItem;
|
||||
private decimal _testUnitPrice = 42m;
|
||||
private int _validTypeId = 1;
|
||||
private int _validBrandId = 2;
|
||||
private string _validDescription = "test description";
|
||||
private string _validName = "test name";
|
||||
private decimal _validPrice = 1.23m;
|
||||
private string _validUri = "/123";
|
||||
|
||||
public UpdateDetails()
|
||||
{
|
||||
_testItem = new CatalogItem(_validTypeId, _validBrandId, _validDescription, _validName, _validPrice, _validUri);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ThrowsArgumentExceptionGivenEmptyName()
|
||||
{
|
||||
string newValue = "";
|
||||
Assert.Throws<ArgumentException>(() => _testItem.UpdateDetails(newValue, _validDescription, _validPrice));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ThrowsArgumentExceptionGivenEmptyDescription()
|
||||
{
|
||||
string newValue = "";
|
||||
Assert.Throws<ArgumentException>(() => _testItem.UpdateDetails(_validName, newValue, _validPrice));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ThrowsArgumentNullExceptionGivenNullName()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => _testItem.UpdateDetails(null, _validDescription, _validPrice));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ThrowsArgumentNullExceptionGivenNullDescription()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => _testItem.UpdateDetails(_validName, null, _validPrice));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(0)]
|
||||
[InlineData(-1.23)]
|
||||
public void ThrowsArgumentExceptionGivenNonPositivePrice(decimal newPrice)
|
||||
{
|
||||
Assert.Throws<ArgumentException>(() => _testItem.UpdateDetails(_validName, _validDescription, newPrice));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user