Updated CatalogItem to support more updates; added tests

This commit is contained in:
Steve Smith
2020-07-03 12:46:33 -04:00
parent 14fbb4284a
commit 2911d5821e
4 changed files with 101 additions and 4 deletions

View File

@@ -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;
}
}
}

View File

@@ -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; }
}
}

View File

@@ -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);

View File

@@ -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));
}
}
}