Updating test projects
This commit is contained in:
@@ -40,6 +40,8 @@
|
|||||||
</PackageVersion>
|
</PackageVersion>
|
||||||
<PackageVersion Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.18.1" />
|
<PackageVersion Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.18.1" />
|
||||||
<PackageVersion Include="MinimalApi.Endpoint" Version="1.3.0" />
|
<PackageVersion Include="MinimalApi.Endpoint" Version="1.3.0" />
|
||||||
|
<PackageVersion Include="NSubstitute" Version="5.1.0" />
|
||||||
|
<PackageVersion Include="NSubstitute.Analyzers.CSharp" Version="1.0.16" />
|
||||||
<PackageVersion Include="System.Net.Http.Json" Version="7.0.1" />
|
<PackageVersion Include="System.Net.Http.Json" Version="7.0.1" />
|
||||||
<PackageVersion Include="System.Security.Claims" Version="4.3.0" />
|
<PackageVersion Include="System.Security.Claims" Version="4.3.0" />
|
||||||
<PackageVersion Include="System.Text.Json" Version="7.0.2" />
|
<PackageVersion Include="System.Text.Json" Version="7.0.2" />
|
||||||
@@ -59,7 +61,6 @@
|
|||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
||||||
</PackageVersion>
|
</PackageVersion>
|
||||||
<PackageVersion Include="Moq" Version="4.18.4" />
|
|
||||||
<PackageVersion Include="MSTest.TestAdapter" Version="3.0.2" />
|
<PackageVersion Include="MSTest.TestAdapter" Version="3.0.2" />
|
||||||
<PackageVersion Include="MSTest.TestFramework" Version="3.0.2" />
|
<PackageVersion Include="MSTest.TestFramework" Version="3.0.2" />
|
||||||
<PackageVersion Include="coverlet.collector" Version="6.0.0" />
|
<PackageVersion Include="coverlet.collector" Version="6.0.0" />
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" />
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" />
|
||||||
<PackageReference Include="Moq" />
|
|
||||||
<PackageReference Include="xunit" />
|
<PackageReference Include="xunit" />
|
||||||
<PackageReference Include="xunit.runner.visualstudio">
|
<PackageReference Include="xunit.runner.visualstudio">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.eShopWeb.ApplicationCore.Entities.BasketAggregate;
|
using Microsoft.eShopWeb.ApplicationCore.Entities.BasketAggregate;
|
||||||
|
using Microsoft.eShopWeb.ApplicationCore.Entities.OrderAggregate;
|
||||||
using Microsoft.eShopWeb.ApplicationCore.Interfaces;
|
using Microsoft.eShopWeb.ApplicationCore.Interfaces;
|
||||||
using Microsoft.eShopWeb.ApplicationCore.Services;
|
using Microsoft.eShopWeb.ApplicationCore.Services;
|
||||||
using Microsoft.eShopWeb.ApplicationCore.Specifications;
|
using Microsoft.eShopWeb.ApplicationCore.Specifications;
|
||||||
using Moq;
|
using NSubstitute;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Services.BasketServiceTests;
|
namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Services.BasketServiceTests;
|
||||||
@@ -11,34 +12,35 @@ namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Services.BasketServiceTes
|
|||||||
public class AddItemToBasket
|
public class AddItemToBasket
|
||||||
{
|
{
|
||||||
private readonly string _buyerId = "Test buyerId";
|
private readonly string _buyerId = "Test buyerId";
|
||||||
private readonly Mock<IRepository<Basket>> _mockBasketRepo = new();
|
private readonly IRepository<Basket> _mockBasketRepo = Substitute.For<IRepository<Basket>>();
|
||||||
private readonly Mock<IAppLogger<BasketService>> _mockLogger = new();
|
private readonly IAppLogger<BasketService> _mockLogger = Substitute.For<IAppLogger<BasketService>>();
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task InvokesBasketRepositoryGetBySpecAsyncOnce()
|
public async Task InvokesBasketRepositoryGetBySpecAsyncOnce()
|
||||||
{
|
{
|
||||||
var basket = new Basket(_buyerId);
|
var basket = new Basket(_buyerId);
|
||||||
basket.AddItem(1, It.IsAny<decimal>(), It.IsAny<int>());
|
basket.AddItem(1, 1.5m);
|
||||||
_mockBasketRepo.Setup(x => x.FirstOrDefaultAsync(It.IsAny<BasketWithItemsSpecification>(), default)).ReturnsAsync(basket);
|
|
||||||
|
|
||||||
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);
|
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]
|
[Fact]
|
||||||
public async Task InvokesBasketRepositoryUpdateAsyncOnce()
|
public async Task InvokesBasketRepositoryUpdateAsyncOnce()
|
||||||
{
|
{
|
||||||
var basket = new Basket(_buyerId);
|
var basket = new Basket(_buyerId);
|
||||||
basket.AddItem(1, It.IsAny<decimal>(), It.IsAny<int>());
|
basket.AddItem(1, 1.1m, 1);
|
||||||
_mockBasketRepo.Setup(x => x.FirstOrDefaultAsync(It.IsAny<BasketWithItemsSpecification>(), default)).ReturnsAsync(basket);
|
_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);
|
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.Entities.BasketAggregate;
|
||||||
using Microsoft.eShopWeb.ApplicationCore.Interfaces;
|
using Microsoft.eShopWeb.ApplicationCore.Interfaces;
|
||||||
using Microsoft.eShopWeb.ApplicationCore.Services;
|
using Microsoft.eShopWeb.ApplicationCore.Services;
|
||||||
using Moq;
|
//using Moq;
|
||||||
|
using NSubstitute;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Services.BasketServiceTests;
|
namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Services.BasketServiceTests;
|
||||||
@@ -10,21 +11,21 @@ namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Services.BasketServiceTes
|
|||||||
public class DeleteBasket
|
public class DeleteBasket
|
||||||
{
|
{
|
||||||
private readonly string _buyerId = "Test buyerId";
|
private readonly string _buyerId = "Test buyerId";
|
||||||
private readonly Mock<IRepository<Basket>> _mockBasketRepo = new();
|
private readonly IRepository<Basket> _mockBasketRepo = Substitute.For<IRepository<Basket>>();
|
||||||
private readonly Mock<IAppLogger<BasketService>> _mockLogger = new();
|
private readonly IAppLogger<BasketService> _mockLogger = Substitute.For<IAppLogger<BasketService>>();
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task ShouldInvokeBasketRepositoryDeleteAsyncOnce()
|
public async Task ShouldInvokeBasketRepositoryDeleteAsyncOnce()
|
||||||
{
|
{
|
||||||
var basket = new Basket(_buyerId);
|
var basket = new Basket(_buyerId);
|
||||||
basket.AddItem(1, It.IsAny<decimal>(), It.IsAny<int>());
|
basket.AddItem(1, 1.1m, 1);
|
||||||
basket.AddItem(2, It.IsAny<decimal>(), It.IsAny<int>());
|
basket.AddItem(2, 1.1m, 1);
|
||||||
_mockBasketRepo.Setup(x => x.GetByIdAsync(It.IsAny<int>(), default))
|
_mockBasketRepo.GetByIdAsync(Arg.Any<int>(), default)
|
||||||
.ReturnsAsync(basket);
|
.Returns(basket);
|
||||||
var basketService = new BasketService(_mockBasketRepo.Object, _mockLogger.Object);
|
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.Interfaces;
|
||||||
using Microsoft.eShopWeb.ApplicationCore.Services;
|
using Microsoft.eShopWeb.ApplicationCore.Services;
|
||||||
using Microsoft.eShopWeb.ApplicationCore.Specifications;
|
using Microsoft.eShopWeb.ApplicationCore.Specifications;
|
||||||
using Moq;
|
using NSubstitute;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Services.BasketServiceTests;
|
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 _existentAnonymousBasketBuyerId = "existent-anonymous-basket-buyer-id";
|
||||||
private readonly string _nonexistentUserBasketBuyerId = "newuser@microsoft.com";
|
private readonly string _nonexistentUserBasketBuyerId = "newuser@microsoft.com";
|
||||||
private readonly string _existentUserBasketBuyerId = "testuser@microsoft.com";
|
private readonly string _existentUserBasketBuyerId = "testuser@microsoft.com";
|
||||||
private readonly Mock<IRepository<Basket>> _mockBasketRepo = new();
|
private readonly IRepository<Basket> _mockBasketRepo = Substitute.For<IRepository<Basket>>();
|
||||||
private readonly Mock<IAppLogger<BasketService>> _mockLogger = new();
|
private readonly IAppLogger<BasketService> _mockLogger = Substitute.For<IAppLogger<BasketService>>();
|
||||||
|
|
||||||
|
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]
|
[Fact]
|
||||||
public async Task InvokesBasketRepositoryFirstOrDefaultAsyncOnceIfAnonymousBasketNotExists()
|
public async Task InvokesBasketRepositoryFirstOrDefaultAsyncOnceIfAnonymousBasketNotExists()
|
||||||
{
|
{
|
||||||
var anonymousBasket = null as Basket;
|
var anonymousBasket = null as Basket;
|
||||||
var userBasket = new Basket(_existentUserBasketBuyerId);
|
var userBasket = new Basket(_existentUserBasketBuyerId);
|
||||||
_mockBasketRepo.SetupSequence(x => x.FirstOrDefaultAsync(It.IsAny<BasketWithItemsSpecification>(), default))
|
|
||||||
.ReturnsAsync(anonymousBasket)
|
var results = new Results<Basket>(anonymousBasket)
|
||||||
.ReturnsAsync(userBasket);
|
.Then(userBasket);
|
||||||
var basketService = new BasketService(_mockBasketRepo.Object, _mockLogger.Object);
|
|
||||||
|
|
||||||
|
_mockBasketRepo.FirstOrDefaultAsync(Arg.Any<BasketWithItemsSpecification>(), default).Returns(x => results.Next());
|
||||||
|
var basketService = new BasketService(_mockBasketRepo, _mockLogger);
|
||||||
await basketService.TransferBasketAsync(_nonexistentAnonymousBasketBuyerId, _existentUserBasketBuyerId);
|
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]
|
[Fact]
|
||||||
@@ -40,12 +56,15 @@ public class TransferBasket
|
|||||||
var userBasket = new Basket(_existentUserBasketBuyerId);
|
var userBasket = new Basket(_existentUserBasketBuyerId);
|
||||||
userBasket.AddItem(1, 10, 4);
|
userBasket.AddItem(1, 10, 4);
|
||||||
userBasket.AddItem(2, 99, 3);
|
userBasket.AddItem(2, 99, 3);
|
||||||
_mockBasketRepo.SetupSequence(x => x.FirstOrDefaultAsync(It.IsAny<BasketWithItemsSpecification>(), default))
|
|
||||||
.ReturnsAsync(anonymousBasket)
|
var results = new Results<Basket>(anonymousBasket)
|
||||||
.ReturnsAsync(userBasket);
|
.Then(userBasket);
|
||||||
var basketService = new BasketService(_mockBasketRepo.Object, _mockLogger.Object);
|
|
||||||
|
_mockBasketRepo.FirstOrDefaultAsync(Arg.Any<BasketWithItemsSpecification>(), default).Returns(x => results.Next());
|
||||||
|
var basketService = new BasketService(_mockBasketRepo, _mockLogger);
|
||||||
await basketService.TransferBasketAsync(_nonexistentAnonymousBasketBuyerId, _existentUserBasketBuyerId);
|
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.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 == 1 && x.UnitPrice == 10 && x.Quantity == 5);
|
||||||
Assert.Contains(userBasket.Items, x => x.CatalogItemId == 2 && x.UnitPrice == 99 && x.Quantity == 3);
|
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 anonymousBasket = new Basket(_existentAnonymousBasketBuyerId);
|
||||||
var userBasket = new Basket(_existentUserBasketBuyerId);
|
var userBasket = new Basket(_existentUserBasketBuyerId);
|
||||||
_mockBasketRepo.SetupSequence(x => x.FirstOrDefaultAsync(It.IsAny<BasketWithItemsSpecification>(), default))
|
|
||||||
.ReturnsAsync(anonymousBasket)
|
var results = new Results<Basket>(anonymousBasket)
|
||||||
.ReturnsAsync(userBasket);
|
.Then(userBasket);
|
||||||
var basketService = new BasketService(_mockBasketRepo.Object, _mockLogger.Object);
|
|
||||||
|
_mockBasketRepo.FirstOrDefaultAsync(Arg.Any<BasketWithItemsSpecification>(), default).Returns(x => results.Next());
|
||||||
|
var basketService = new BasketService(_mockBasketRepo, _mockLogger);
|
||||||
await basketService.TransferBasketAsync(_nonexistentAnonymousBasketBuyerId, _existentUserBasketBuyerId);
|
await basketService.TransferBasketAsync(_nonexistentAnonymousBasketBuyerId, _existentUserBasketBuyerId);
|
||||||
_mockBasketRepo.Verify(x => x.UpdateAsync(userBasket, default), Times.Once);
|
await _mockBasketRepo.Received().UpdateAsync(userBasket, default);
|
||||||
_mockBasketRepo.Verify(x => x.DeleteAsync(anonymousBasket, default), Times.Once);
|
await _mockBasketRepo.Received().DeleteAsync(anonymousBasket, default);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
@@ -71,11 +92,13 @@ public class TransferBasket
|
|||||||
{
|
{
|
||||||
var anonymousBasket = new Basket(_existentAnonymousBasketBuyerId);
|
var anonymousBasket = new Basket(_existentAnonymousBasketBuyerId);
|
||||||
var userBasket = null as Basket;
|
var userBasket = null as Basket;
|
||||||
_mockBasketRepo.SetupSequence(x => x.FirstOrDefaultAsync(It.IsAny<BasketWithItemsSpecification>(), default))
|
|
||||||
.ReturnsAsync(anonymousBasket)
|
var results = new Results<Basket>(anonymousBasket)
|
||||||
.ReturnsAsync(userBasket);
|
.Then(userBasket);
|
||||||
var basketService = new BasketService(_mockBasketRepo.Object, _mockLogger.Object);
|
|
||||||
|
_mockBasketRepo.FirstOrDefaultAsync(Arg.Any<BasketWithItemsSpecification>(), default).Returns(x => results.Next());
|
||||||
|
var basketService = new BasketService(_mockBasketRepo, _mockLogger);
|
||||||
await basketService.TransferBasketAsync(_existentAnonymousBasketBuyerId, _nonexistentUserBasketBuyerId);
|
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 System.Linq;
|
||||||
using Microsoft.eShopWeb.ApplicationCore.Entities.BasketAggregate;
|
using Microsoft.eShopWeb.ApplicationCore.Entities.BasketAggregate;
|
||||||
using Microsoft.eShopWeb.ApplicationCore.Specifications;
|
using Microsoft.eShopWeb.ApplicationCore.Specifications;
|
||||||
using Moq;
|
using NSubstitute;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Specifications;
|
namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Specifications;
|
||||||
@@ -58,18 +58,18 @@ public class BasketWithItems
|
|||||||
|
|
||||||
public List<Basket> GetTestBasketCollection()
|
public List<Basket> GetTestBasketCollection()
|
||||||
{
|
{
|
||||||
var basket1Mock = new Mock<Basket>(_buyerId);
|
var basket1Mock = Substitute.For<Basket>(_buyerId);
|
||||||
basket1Mock.SetupGet(s => s.Id).Returns(1);
|
basket1Mock.Id.Returns(1);
|
||||||
var basket2Mock = new Mock<Basket>(_buyerId);
|
var basket2Mock = Substitute.For<Basket>(_buyerId);
|
||||||
basket2Mock.SetupGet(s => s.Id).Returns(2);
|
basket2Mock.Id.Returns(2);
|
||||||
var basket3Mock = new Mock<Basket>(_buyerId);
|
var basket3Mock = Substitute.For<Basket>(_buyerId);
|
||||||
basket3Mock.SetupGet(s => s.Id).Returns(_testBasketId);
|
basket3Mock.Id.Returns(_testBasketId);
|
||||||
|
|
||||||
return new List<Basket>()
|
return new List<Basket>()
|
||||||
{
|
{
|
||||||
basket1Mock.Object,
|
basket1Mock,
|
||||||
basket2Mock.Object,
|
basket2Mock,
|
||||||
basket3Mock.Object
|
basket3Mock
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Microsoft.eShopWeb.ApplicationCore.Entities;
|
using Microsoft.eShopWeb.ApplicationCore.Entities;
|
||||||
using Moq;
|
using NSubstitute;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Specifications;
|
namespace Microsoft.eShopWeb.UnitTests.ApplicationCore.Specifications;
|
||||||
@@ -36,14 +36,14 @@ public class CatalogItemsSpecification
|
|||||||
{
|
{
|
||||||
var catalogItems = new List<CatalogItem>();
|
var catalogItems = new List<CatalogItem>();
|
||||||
|
|
||||||
var mockCatalogItem1 = new Mock<CatalogItem>(1, 1, "Item 1 description", "Item 1", 1.5m, "Item1Uri");
|
var mockCatalogItem1 = Substitute.For<CatalogItem>(1, 1, "Item 1 description", "Item 1", 1.5m, "Item1Uri");
|
||||||
mockCatalogItem1.SetupGet(x => x.Id).Returns(1);
|
mockCatalogItem1.Id.Returns(1);
|
||||||
|
|
||||||
var mockCatalogItem3 = new Mock<CatalogItem>(3, 3, "Item 3 description", "Item 3", 3.5m, "Item3Uri");
|
var mockCatalogItem3 = Substitute.For<CatalogItem>(3, 3, "Item 3 description", "Item 3", 3.5m, "Item3Uri");
|
||||||
mockCatalogItem3.SetupGet(x => x.Id).Returns(3);
|
mockCatalogItem3.Id.Returns(3);
|
||||||
|
|
||||||
catalogItems.Add(mockCatalogItem1.Object);
|
catalogItems.Add(mockCatalogItem1);
|
||||||
catalogItems.Add(mockCatalogItem3.Object);
|
catalogItems.Add(mockCatalogItem3);
|
||||||
|
|
||||||
return catalogItems;
|
return catalogItems;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
using Microsoft.eShopWeb.ApplicationCore.Entities.BasketAggregate;
|
using Microsoft.eShopWeb.ApplicationCore.Entities.BasketAggregate;
|
||||||
using Moq;
|
using NSubstitute;
|
||||||
|
|
||||||
namespace Microsoft.eShopWeb.UnitTests.Builders;
|
namespace Microsoft.eShopWeb.UnitTests.Builders;
|
||||||
|
|
||||||
@@ -22,17 +22,17 @@ public class BasketBuilder
|
|||||||
|
|
||||||
public Basket WithNoItems()
|
public Basket WithNoItems()
|
||||||
{
|
{
|
||||||
var basketMock = new Mock<Basket>(BasketBuyerId);
|
var basketMock = Substitute.For<Basket>(BasketBuyerId);
|
||||||
basketMock.SetupGet(s => s.Id).Returns(BasketId);
|
basketMock.Id.Returns(BasketId);
|
||||||
|
|
||||||
_basket = basketMock.Object;
|
_basket = basketMock;
|
||||||
return _basket;
|
return _basket;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Basket WithOneBasketItem()
|
public Basket WithOneBasketItem()
|
||||||
{
|
{
|
||||||
var basketMock = new Mock<Basket>(BasketBuyerId);
|
var basketMock = Substitute.For<Basket>(BasketBuyerId);
|
||||||
_basket = basketMock.Object;
|
_basket = basketMock;
|
||||||
_basket.AddItem(2, 3.40m, 4);
|
_basket.AddItem(2, 3.40m, 4);
|
||||||
return _basket;
|
return _basket;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,23 +5,22 @@ using Ardalis.Specification;
|
|||||||
using Microsoft.eShopWeb.ApplicationCore.Entities.OrderAggregate;
|
using Microsoft.eShopWeb.ApplicationCore.Entities.OrderAggregate;
|
||||||
using Microsoft.eShopWeb.ApplicationCore.Interfaces;
|
using Microsoft.eShopWeb.ApplicationCore.Interfaces;
|
||||||
using Microsoft.eShopWeb.Web.Features.MyOrders;
|
using Microsoft.eShopWeb.Web.Features.MyOrders;
|
||||||
using Moq;
|
using NSubstitute;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.eShopWeb.UnitTests.MediatorHandlers.OrdersTests;
|
namespace Microsoft.eShopWeb.UnitTests.MediatorHandlers.OrdersTests;
|
||||||
|
|
||||||
public class GetMyOrders
|
public class GetMyOrders
|
||||||
{
|
{
|
||||||
private readonly Mock<IReadRepository<Order>> _mockOrderRepository;
|
private readonly IReadRepository<Order> _mockOrderRepository = Substitute.For<IReadRepository<Order>>();
|
||||||
|
|
||||||
public GetMyOrders()
|
public GetMyOrders()
|
||||||
{
|
{
|
||||||
var item = new OrderItem(new CatalogItemOrdered(1, "ProductName", "URI"), 10.00m, 10);
|
var item = new OrderItem(new CatalogItemOrdered(1, "ProductName", "URI"), 10.00m, 10);
|
||||||
var address = new Address(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>());
|
var address = new Address("", "", "", "", "");
|
||||||
Order order = new Order("buyerId", address, new List<OrderItem> { item });
|
Order order = new Order("buyerId", address, new List<OrderItem> { item });
|
||||||
|
|
||||||
_mockOrderRepository = new Mock<IReadRepository<Order>>();
|
_mockOrderRepository.ListAsync(Arg.Any<ISpecification<Order>>(), default).Returns(new List<Order> { order });
|
||||||
_mockOrderRepository.Setup(x => x.ListAsync(It.IsAny<ISpecification<Order>>(), default)).ReturnsAsync(new List<Order> { order });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
@@ -29,7 +28,7 @@ public class GetMyOrders
|
|||||||
{
|
{
|
||||||
var request = new eShopWeb.Web.Features.MyOrders.GetMyOrders("SomeUserName");
|
var request = new eShopWeb.Web.Features.MyOrders.GetMyOrders("SomeUserName");
|
||||||
|
|
||||||
var handler = new GetMyOrdersHandler(_mockOrderRepository.Object);
|
var handler = new GetMyOrdersHandler(_mockOrderRepository);
|
||||||
|
|
||||||
var result = await handler.Handle(request, CancellationToken.None);
|
var result = await handler.Handle(request, CancellationToken.None);
|
||||||
|
|
||||||
|
|||||||
@@ -6,24 +6,23 @@ using Microsoft.eShopWeb.ApplicationCore.Entities.OrderAggregate;
|
|||||||
using Microsoft.eShopWeb.ApplicationCore.Interfaces;
|
using Microsoft.eShopWeb.ApplicationCore.Interfaces;
|
||||||
using Microsoft.eShopWeb.ApplicationCore.Specifications;
|
using Microsoft.eShopWeb.ApplicationCore.Specifications;
|
||||||
using Microsoft.eShopWeb.Web.Features.OrderDetails;
|
using Microsoft.eShopWeb.Web.Features.OrderDetails;
|
||||||
using Moq;
|
using NSubstitute;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.eShopWeb.UnitTests.MediatorHandlers.OrdersTests;
|
namespace Microsoft.eShopWeb.UnitTests.MediatorHandlers.OrdersTests;
|
||||||
|
|
||||||
public class GetOrderDetails
|
public class GetOrderDetails
|
||||||
{
|
{
|
||||||
private readonly Mock<IReadRepository<Order>> _mockOrderRepository;
|
private readonly IReadRepository<Order> _mockOrderRepository = Substitute.For<IReadRepository<Order>>();
|
||||||
|
|
||||||
public GetOrderDetails()
|
public GetOrderDetails()
|
||||||
{
|
{
|
||||||
var item = new OrderItem(new CatalogItemOrdered(1, "ProductName", "URI"), 10.00m, 10);
|
var item = new OrderItem(new CatalogItemOrdered(1, "ProductName", "URI"), 10.00m, 10);
|
||||||
var address = new Address(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>());
|
var address = new Address("", "", "", "", "");
|
||||||
Order order = new Order("buyerId", address, new List<OrderItem> { item });
|
Order order = new Order("buyerId", address, new List<OrderItem> { item });
|
||||||
|
|
||||||
_mockOrderRepository = new Mock<IReadRepository<Order>>();
|
_mockOrderRepository.FirstOrDefaultAsync(Arg.Any<OrderWithItemsByIdSpec>(), default)
|
||||||
_mockOrderRepository.Setup(x => x.FirstOrDefaultAsync(It.IsAny<OrderWithItemsByIdSpec>(), default))
|
.Returns(order);
|
||||||
.ReturnsAsync(order);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
@@ -31,7 +30,7 @@ public class GetOrderDetails
|
|||||||
{
|
{
|
||||||
var request = new eShopWeb.Web.Features.OrderDetails.GetOrderDetails("SomeUserName", 0);
|
var request = new eShopWeb.Web.Features.OrderDetails.GetOrderDetails("SomeUserName", 0);
|
||||||
|
|
||||||
var handler = new GetOrderDetailsHandler(_mockOrderRepository.Object);
|
var handler = new GetOrderDetailsHandler(_mockOrderRepository);
|
||||||
|
|
||||||
var result = await handler.Handle(request, CancellationToken.None);
|
var result = await handler.Handle(request, CancellationToken.None);
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,11 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" />
|
||||||
<PackageReference Include="Moq" />
|
<PackageReference Include="NSubstitute" />
|
||||||
|
<PackageReference Include="NSubstitute.Analyzers.CSharp">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
<PackageReference Include="xunit" />
|
<PackageReference Include="xunit" />
|
||||||
<PackageReference Include="xunit.runner.visualstudio" />
|
<PackageReference Include="xunit.runner.visualstudio" />
|
||||||
<PackageReference Include="xunit.runner.console" />
|
<PackageReference Include="xunit.runner.console" />
|
||||||
|
|||||||
Reference in New Issue
Block a user