Updated CatalogItem to support more updates; added tests
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
using Ardalis.GuardClauses;
|
using Ardalis.GuardClauses;
|
||||||
using Microsoft.eShopWeb.ApplicationCore.Interfaces;
|
using Microsoft.eShopWeb.ApplicationCore.Interfaces;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
|
||||||
namespace Microsoft.eShopWeb.ApplicationCore.Entities
|
namespace Microsoft.eShopWeb.ApplicationCore.Entities
|
||||||
{
|
{
|
||||||
@@ -14,7 +15,12 @@ namespace Microsoft.eShopWeb.ApplicationCore.Entities
|
|||||||
public int CatalogBrandId { get; private set; }
|
public int CatalogBrandId { get; private set; }
|
||||||
public CatalogBrand CatalogBrand { 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;
|
CatalogTypeId = catalogTypeId;
|
||||||
CatalogBrandId = catalogBrandId;
|
CatalogBrandId = catalogBrandId;
|
||||||
@@ -30,5 +36,27 @@ namespace Microsoft.eShopWeb.ApplicationCore.Entities
|
|||||||
Name = name;
|
Name = name;
|
||||||
Price = price;
|
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
|
public class UpdateCatalogItemRequest : BaseRequest
|
||||||
{
|
{
|
||||||
|
[Range(1, 10000)]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
[Range(1, 10000)]
|
||||||
public int CatalogBrandId { get; set; }
|
public int CatalogBrandId { get; set; }
|
||||||
|
[Range(1, 10000)]
|
||||||
public int CatalogTypeId { get; set; }
|
public int CatalogTypeId { get; set; }
|
||||||
|
[Required]
|
||||||
public string Description { get; set; }
|
public string Description { get; set; }
|
||||||
|
[Required]
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public string PictureUri { get; set; }
|
public string PictureUri { get; set; }
|
||||||
|
[Range(0.01, 10000)]
|
||||||
public decimal Price { get; set; }
|
public decimal Price { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,9 @@ namespace Microsoft.eShopWeb.PublicApi.CatalogItemEndpoints
|
|||||||
|
|
||||||
var existingItem = await _itemRepository.GetByIdAsync(request.Id);
|
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);
|
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