Updating test projects
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.eShopWeb.ApplicationCore.Entities.BasketAggregate;
|
||||
using Microsoft.eShopWeb.ApplicationCore.Entities.OrderAggregate;
|
||||
using Microsoft.eShopWeb.ApplicationCore.Interfaces;
|
||||
using Microsoft.eShopWeb.ApplicationCore.Services;
|
||||
using Microsoft.eShopWeb.ApplicationCore.Specifications;
|
||||
using Moq;
|
||||
using NSubstitute;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Services.BasketServiceTests;
|
||||
@@ -11,34 +12,35 @@ namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Services.BasketServiceTes
|
||||
public class AddItemToBasket
|
||||
{
|
||||
private readonly string _buyerId = "Test buyerId";
|
||||
private readonly Mock<IRepository<Basket>> _mockBasketRepo = new();
|
||||
private readonly Mock<IAppLogger<BasketService>> _mockLogger = new();
|
||||
private readonly IRepository<Basket> _mockBasketRepo = Substitute.For<IRepository<Basket>>();
|
||||
private readonly IAppLogger<BasketService> _mockLogger = Substitute.For<IAppLogger<BasketService>>();
|
||||
|
||||
[Fact]
|
||||
public async Task InvokesBasketRepositoryGetBySpecAsyncOnce()
|
||||
{
|
||||
var basket = new Basket(_buyerId);
|
||||
basket.AddItem(1, It.IsAny<decimal>(), It.IsAny<int>());
|
||||
_mockBasketRepo.Setup(x => x.FirstOrDefaultAsync(It.IsAny<BasketWithItemsSpecification>(), default)).ReturnsAsync(basket);
|
||||
basket.AddItem(1, 1.5m);
|
||||
|
||||
var basketService = new BasketService(_mockBasketRepo.Object, _mockLogger.Object);
|
||||
_mockBasketRepo.FirstOrDefaultAsync(Arg.Any<BasketWithItemsSpecification>(), default).Returns(basket);
|
||||
|
||||
var basketService = new BasketService(_mockBasketRepo, _mockLogger);
|
||||
|
||||
await basketService.AddItemToBasket(basket.BuyerId, 1, 1.50m);
|
||||
|
||||
_mockBasketRepo.Verify(x => x.FirstOrDefaultAsync(It.IsAny<BasketWithItemsSpecification>(), default), Times.Once);
|
||||
await _mockBasketRepo.Received().FirstOrDefaultAsync(Arg.Any<BasketWithItemsSpecification>(), default);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task InvokesBasketRepositoryUpdateAsyncOnce()
|
||||
{
|
||||
var basket = new Basket(_buyerId);
|
||||
basket.AddItem(1, It.IsAny<decimal>(), It.IsAny<int>());
|
||||
_mockBasketRepo.Setup(x => x.FirstOrDefaultAsync(It.IsAny<BasketWithItemsSpecification>(), default)).ReturnsAsync(basket);
|
||||
basket.AddItem(1, 1.1m, 1);
|
||||
_mockBasketRepo.FirstOrDefaultAsync(Arg.Any<BasketWithItemsSpecification>(), default).Returns(basket);
|
||||
|
||||
var basketService = new BasketService(_mockBasketRepo.Object, _mockLogger.Object);
|
||||
var basketService = new BasketService(_mockBasketRepo, _mockLogger);
|
||||
|
||||
await basketService.AddItemToBasket(basket.BuyerId, 1, 1.50m);
|
||||
|
||||
_mockBasketRepo.Verify(x => x.UpdateAsync(basket, default), Times.Once);
|
||||
await _mockBasketRepo.Received().UpdateAsync(basket, default);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
using Microsoft.eShopWeb.ApplicationCore.Entities.BasketAggregate;
|
||||
using Microsoft.eShopWeb.ApplicationCore.Interfaces;
|
||||
using Microsoft.eShopWeb.ApplicationCore.Services;
|
||||
using Moq;
|
||||
//using Moq;
|
||||
using NSubstitute;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Services.BasketServiceTests;
|
||||
@@ -10,21 +11,21 @@ namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Services.BasketServiceTes
|
||||
public class DeleteBasket
|
||||
{
|
||||
private readonly string _buyerId = "Test buyerId";
|
||||
private readonly Mock<IRepository<Basket>> _mockBasketRepo = new();
|
||||
private readonly Mock<IAppLogger<BasketService>> _mockLogger = new();
|
||||
private readonly IRepository<Basket> _mockBasketRepo = Substitute.For<IRepository<Basket>>();
|
||||
private readonly IAppLogger<BasketService> _mockLogger = Substitute.For<IAppLogger<BasketService>>();
|
||||
|
||||
[Fact]
|
||||
public async Task ShouldInvokeBasketRepositoryDeleteAsyncOnce()
|
||||
{
|
||||
var basket = new Basket(_buyerId);
|
||||
basket.AddItem(1, It.IsAny<decimal>(), It.IsAny<int>());
|
||||
basket.AddItem(2, It.IsAny<decimal>(), It.IsAny<int>());
|
||||
_mockBasketRepo.Setup(x => x.GetByIdAsync(It.IsAny<int>(), default))
|
||||
.ReturnsAsync(basket);
|
||||
var basketService = new BasketService(_mockBasketRepo.Object, _mockLogger.Object);
|
||||
basket.AddItem(1, 1.1m, 1);
|
||||
basket.AddItem(2, 1.1m, 1);
|
||||
_mockBasketRepo.GetByIdAsync(Arg.Any<int>(), default)
|
||||
.Returns(basket);
|
||||
var basketService = new BasketService(_mockBasketRepo, _mockLogger);
|
||||
|
||||
await basketService.DeleteBasketAsync(It.IsAny<int>());
|
||||
await basketService.DeleteBasketAsync(1);
|
||||
|
||||
_mockBasketRepo.Verify(x => x.DeleteAsync(It.IsAny<Basket>(), default), Times.Once);
|
||||
await _mockBasketRepo.Received().DeleteAsync(Arg.Any<Basket>(), default);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ using Microsoft.eShopWeb.ApplicationCore.Entities.BasketAggregate;
|
||||
using Microsoft.eShopWeb.ApplicationCore.Interfaces;
|
||||
using Microsoft.eShopWeb.ApplicationCore.Services;
|
||||
using Microsoft.eShopWeb.ApplicationCore.Specifications;
|
||||
using Moq;
|
||||
using NSubstitute;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Services.BasketServiceTests;
|
||||
@@ -15,20 +15,36 @@ public class TransferBasket
|
||||
private readonly string _existentAnonymousBasketBuyerId = "existent-anonymous-basket-buyer-id";
|
||||
private readonly string _nonexistentUserBasketBuyerId = "newuser@microsoft.com";
|
||||
private readonly string _existentUserBasketBuyerId = "testuser@microsoft.com";
|
||||
private readonly Mock<IRepository<Basket>> _mockBasketRepo = new();
|
||||
private readonly Mock<IAppLogger<BasketService>> _mockLogger = new();
|
||||
private readonly IRepository<Basket> _mockBasketRepo = Substitute.For<IRepository<Basket>>();
|
||||
private readonly IAppLogger<BasketService> _mockLogger = Substitute.For<IAppLogger<BasketService>>();
|
||||
|
||||
[Fact]
|
||||
public class Results<T>
|
||||
{
|
||||
private readonly Queue<Func<T>> values = new Queue<Func<T>>();
|
||||
public Results(T result) { values.Enqueue(() => result); }
|
||||
public Results<T> Then(T value) { return Then(() => value); }
|
||||
public Results<T> Then(Func<T> value)
|
||||
{
|
||||
values.Enqueue(value);
|
||||
return this;
|
||||
}
|
||||
public T Next() { return values.Dequeue()(); }
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task InvokesBasketRepositoryFirstOrDefaultAsyncOnceIfAnonymousBasketNotExists()
|
||||
{
|
||||
var anonymousBasket = null as Basket;
|
||||
var userBasket = new Basket(_existentUserBasketBuyerId);
|
||||
_mockBasketRepo.SetupSequence(x => x.FirstOrDefaultAsync(It.IsAny<BasketWithItemsSpecification>(), default))
|
||||
.ReturnsAsync(anonymousBasket)
|
||||
.ReturnsAsync(userBasket);
|
||||
var basketService = new BasketService(_mockBasketRepo.Object, _mockLogger.Object);
|
||||
var anonymousBasket = null as Basket;
|
||||
var userBasket = new Basket(_existentUserBasketBuyerId);
|
||||
|
||||
var results = new Results<Basket>(anonymousBasket)
|
||||
.Then(userBasket);
|
||||
|
||||
|
||||
_mockBasketRepo.FirstOrDefaultAsync(Arg.Any<BasketWithItemsSpecification>(), default).Returns(x => results.Next());
|
||||
var basketService = new BasketService(_mockBasketRepo, _mockLogger);
|
||||
await basketService.TransferBasketAsync(_nonexistentAnonymousBasketBuyerId, _existentUserBasketBuyerId);
|
||||
_mockBasketRepo.Verify(x => x.FirstOrDefaultAsync(It.IsAny<BasketWithItemsSpecification>(), default), Times.Once);
|
||||
await _mockBasketRepo.Received().FirstOrDefaultAsync(Arg.Any<BasketWithItemsSpecification>(), default);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -40,12 +56,15 @@ public class TransferBasket
|
||||
var userBasket = new Basket(_existentUserBasketBuyerId);
|
||||
userBasket.AddItem(1, 10, 4);
|
||||
userBasket.AddItem(2, 99, 3);
|
||||
_mockBasketRepo.SetupSequence(x => x.FirstOrDefaultAsync(It.IsAny<BasketWithItemsSpecification>(), default))
|
||||
.ReturnsAsync(anonymousBasket)
|
||||
.ReturnsAsync(userBasket);
|
||||
var basketService = new BasketService(_mockBasketRepo.Object, _mockLogger.Object);
|
||||
|
||||
var results = new Results<Basket>(anonymousBasket)
|
||||
.Then(userBasket);
|
||||
|
||||
_mockBasketRepo.FirstOrDefaultAsync(Arg.Any<BasketWithItemsSpecification>(), default).Returns(x => results.Next());
|
||||
var basketService = new BasketService(_mockBasketRepo, _mockLogger);
|
||||
await basketService.TransferBasketAsync(_nonexistentAnonymousBasketBuyerId, _existentUserBasketBuyerId);
|
||||
_mockBasketRepo.Verify(x => x.UpdateAsync(userBasket, default), Times.Once);
|
||||
await _mockBasketRepo.Received().UpdateAsync(userBasket, default);
|
||||
|
||||
Assert.Equal(3, userBasket.Items.Count);
|
||||
Assert.Contains(userBasket.Items, x => x.CatalogItemId == 1 && x.UnitPrice == 10 && x.Quantity == 5);
|
||||
Assert.Contains(userBasket.Items, x => x.CatalogItemId == 2 && x.UnitPrice == 99 && x.Quantity == 3);
|
||||
@@ -57,13 +76,15 @@ public class TransferBasket
|
||||
{
|
||||
var anonymousBasket = new Basket(_existentAnonymousBasketBuyerId);
|
||||
var userBasket = new Basket(_existentUserBasketBuyerId);
|
||||
_mockBasketRepo.SetupSequence(x => x.FirstOrDefaultAsync(It.IsAny<BasketWithItemsSpecification>(), default))
|
||||
.ReturnsAsync(anonymousBasket)
|
||||
.ReturnsAsync(userBasket);
|
||||
var basketService = new BasketService(_mockBasketRepo.Object, _mockLogger.Object);
|
||||
|
||||
var results = new Results<Basket>(anonymousBasket)
|
||||
.Then(userBasket);
|
||||
|
||||
_mockBasketRepo.FirstOrDefaultAsync(Arg.Any<BasketWithItemsSpecification>(), default).Returns(x => results.Next());
|
||||
var basketService = new BasketService(_mockBasketRepo, _mockLogger);
|
||||
await basketService.TransferBasketAsync(_nonexistentAnonymousBasketBuyerId, _existentUserBasketBuyerId);
|
||||
_mockBasketRepo.Verify(x => x.UpdateAsync(userBasket, default), Times.Once);
|
||||
_mockBasketRepo.Verify(x => x.DeleteAsync(anonymousBasket, default), Times.Once);
|
||||
await _mockBasketRepo.Received().UpdateAsync(userBasket, default);
|
||||
await _mockBasketRepo.Received().DeleteAsync(anonymousBasket, default);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -71,11 +92,13 @@ public class TransferBasket
|
||||
{
|
||||
var anonymousBasket = new Basket(_existentAnonymousBasketBuyerId);
|
||||
var userBasket = null as Basket;
|
||||
_mockBasketRepo.SetupSequence(x => x.FirstOrDefaultAsync(It.IsAny<BasketWithItemsSpecification>(), default))
|
||||
.ReturnsAsync(anonymousBasket)
|
||||
.ReturnsAsync(userBasket);
|
||||
var basketService = new BasketService(_mockBasketRepo.Object, _mockLogger.Object);
|
||||
|
||||
var results = new Results<Basket>(anonymousBasket)
|
||||
.Then(userBasket);
|
||||
|
||||
_mockBasketRepo.FirstOrDefaultAsync(Arg.Any<BasketWithItemsSpecification>(), default).Returns(x => results.Next());
|
||||
var basketService = new BasketService(_mockBasketRepo, _mockLogger);
|
||||
await basketService.TransferBasketAsync(_existentAnonymousBasketBuyerId, _nonexistentUserBasketBuyerId);
|
||||
_mockBasketRepo.Verify(x => x.AddAsync(It.Is<Basket>(x => x.BuyerId == _nonexistentUserBasketBuyerId), default), Times.Once);
|
||||
await _mockBasketRepo.Received().AddAsync(Arg.Is<Basket>(x => x.BuyerId == _nonexistentUserBasketBuyerId), default);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
using System.Linq;
|
||||
using Microsoft.eShopWeb.ApplicationCore.Entities.BasketAggregate;
|
||||
using Microsoft.eShopWeb.ApplicationCore.Specifications;
|
||||
using Moq;
|
||||
using NSubstitute;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Specifications;
|
||||
@@ -58,18 +58,18 @@ public class BasketWithItems
|
||||
|
||||
public List<Basket> GetTestBasketCollection()
|
||||
{
|
||||
var basket1Mock = new Mock<Basket>(_buyerId);
|
||||
basket1Mock.SetupGet(s => s.Id).Returns(1);
|
||||
var basket2Mock = new Mock<Basket>(_buyerId);
|
||||
basket2Mock.SetupGet(s => s.Id).Returns(2);
|
||||
var basket3Mock = new Mock<Basket>(_buyerId);
|
||||
basket3Mock.SetupGet(s => s.Id).Returns(_testBasketId);
|
||||
var basket1Mock = Substitute.For<Basket>(_buyerId);
|
||||
basket1Mock.Id.Returns(1);
|
||||
var basket2Mock = Substitute.For<Basket>(_buyerId);
|
||||
basket2Mock.Id.Returns(2);
|
||||
var basket3Mock = Substitute.For<Basket>(_buyerId);
|
||||
basket3Mock.Id.Returns(_testBasketId);
|
||||
|
||||
return new List<Basket>()
|
||||
{
|
||||
basket1Mock.Object,
|
||||
basket2Mock.Object,
|
||||
basket3Mock.Object
|
||||
basket1Mock,
|
||||
basket2Mock,
|
||||
basket3Mock
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.eShopWeb.ApplicationCore.Entities;
|
||||
using Moq;
|
||||
using NSubstitute;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Specifications;
|
||||
@@ -36,14 +36,14 @@ public class CatalogItemsSpecification
|
||||
{
|
||||
var catalogItems = new List<CatalogItem>();
|
||||
|
||||
var mockCatalogItem1 = new Mock<CatalogItem>(1, 1, "Item 1 description", "Item 1", 1.5m, "Item1Uri");
|
||||
mockCatalogItem1.SetupGet(x => x.Id).Returns(1);
|
||||
var mockCatalogItem1 = Substitute.For<CatalogItem>(1, 1, "Item 1 description", "Item 1", 1.5m, "Item1Uri");
|
||||
mockCatalogItem1.Id.Returns(1);
|
||||
|
||||
var mockCatalogItem3 = new Mock<CatalogItem>(3, 3, "Item 3 description", "Item 3", 3.5m, "Item3Uri");
|
||||
mockCatalogItem3.SetupGet(x => x.Id).Returns(3);
|
||||
var mockCatalogItem3 = Substitute.For<CatalogItem>(3, 3, "Item 3 description", "Item 3", 3.5m, "Item3Uri");
|
||||
mockCatalogItem3.Id.Returns(3);
|
||||
|
||||
catalogItems.Add(mockCatalogItem1.Object);
|
||||
catalogItems.Add(mockCatalogItem3.Object);
|
||||
catalogItems.Add(mockCatalogItem1);
|
||||
catalogItems.Add(mockCatalogItem3);
|
||||
|
||||
return catalogItems;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user