11using System ;
22using System . Collections . Generic ;
3- using System . Diagnostics ;
43using System . Linq ;
5- using System . Linq . Expressions ;
64using System . Threading ;
75using System . Threading . Tasks ;
86using MediatR ;
9- using Microsoft . AspNetCore . Components . Forms ;
10- using Microsoft . EntityFrameworkCore ;
117using MockQueryable . Moq ;
128using Moq ;
139using SimplCommerce . Infrastructure . Data ;
@@ -21,33 +17,75 @@ namespace SimplCommerce.Module.Inventory.Tests
2117{
2218 public class StockServiceTests
2319 {
24- private Mock < IRepository < Stock > > _stockRepoMock ;
25- private Mock < IRepository < Product > > _productRepoMock ;
26- private Mock < IMediator > _mediatorMock ;
20+ private Mock < IRepository < Stock > > _stockRepoMock ;
21+ private Mock < IRepository < Product > > _productRepoMock ;
22+
23+ private readonly Mock < IMediator > _mediatorMock ;
2724 private readonly Mock < IRepository < StockHistory > > _stockHistoryRepoMock ;
28- private readonly Warehouse _testWarehouse = new Warehouse ( 100 ) { VendorId = 123 } ;
25+ private readonly Warehouse _testWarehouse = new ( 100 ) { VendorId = 123 } ;
2926
3027 public StockServiceTests ( )
3128 {
3229 _stockHistoryRepoMock = new Mock < IRepository < StockHistory > > ( ) ;
3330 _mediatorMock = new Mock < IMediator > ( ) ;
3431 }
3532
36- /* [Theory]
37- [InlineData(100, 50)]
38- [InlineData(1000, 560)]
39- [InlineData(13, 5)]
40- [InlineData(143, 0)]
41- public async Task AddAllProductsTest(int productsCount, int stocksCount)
33+ //[Theory]
34+ //[InlineData(100, 50)]
35+ //[InlineData(1000, 560)]
36+ //[InlineData(13, 5)]
37+ //[InlineData(143, 0)]
38+ //public async Task AddAllProductsTest(int productsCount, int stocksCount)
39+ //{
40+ // InitializeMocks(productsCount, stocksCount);
41+
42+ // var service = new StockService(_stockRepoMock.Object, _productRepoMock.Object,
43+ // _stockHistoryRepoMock.Object, _mediatorMock.Object);
44+ // await service.AddAllProduct(_testWarehouse);
45+
46+ // _stockRepoMock.Verify(m =>
47+ // m.AddRange(It.Is<IEnumerable<Stock>>(arg => arg.Count() == productsCount - stocksCount)));
48+ //}
49+
50+ [ Theory ]
51+ [ InlineData ( 1 , 1 , - 5 ) ]
52+ [ InlineData ( 1 , 1 , - 10 ) ]
53+ [ InlineData ( 1 , 1 , 7 ) ]
54+ [ InlineData ( 1 , 1 , 0 ) ]
55+ [ InlineData ( 1 , 1 , - 2 ) ]
56+ public async Task UpdateStockTest ( int productsCount , int stocksCount , int adjustedQuantity )
4257 {
58+ // Arrange
4359 InitializeMocks ( productsCount , stocksCount ) ;
44- var service = new StockService(_stockRepoMock.Object, _productRepoMock.Object,
45- _stockHistoryRepoMock.Object, _mediatorMock.Object);
46- await service.AddAllProduct(_testWarehouse);
4760
48- _stockRepoMock.Verify(m =>
49- m.AddRange(It.Is<IEnumerable<Stock>>(arg => arg.Count() == productsCount - stocksCount)));
50- }*/
61+ var service = new StockService (
62+ _stockRepoMock . Object ,
63+ _productRepoMock . Object ,
64+ _stockHistoryRepoMock . Object ,
65+ _mediatorMock . Object ) ;
66+
67+ var product = _productRepoMock . Object
68+ . Query ( )
69+ . FirstOrDefault ( ) ;
70+ var stock = _stockRepoMock . Object
71+ . Query ( )
72+ . FirstOrDefault ( o => o . ProductId == product . Id && o . WarehouseId == _testWarehouse . Id ) ;
73+ var prevStockQuantity = stock . Quantity ;
74+ var request = new StockUpdateRequest
75+ {
76+ AdjustedQuantity = adjustedQuantity ,
77+ ProductId = product . Id ,
78+ WarehouseId = _testWarehouse . Id ,
79+ } ;
80+
81+ // Act
82+ await service . UpdateStock ( request ) ;
83+
84+
85+ // Assert
86+ var newStockQuantity = stock . Quantity ;
87+ Assert . Equal ( Math . Max ( 0 , prevStockQuantity + adjustedQuantity ) , newStockQuantity ) ;
88+ }
5189
5290 private void InitializeMocks ( int productsCount , int stocksCount )
5391 {
@@ -56,11 +94,16 @@ private void InitializeMocks(int productsCount, int stocksCount)
5694 for ( int i = 1 ; i <= stocks . Length ; i ++ )
5795 {
5896 stocks [ i - 1 ] = new Stock
59- { ProductId = i , Quantity = 5 , WarehouseId = _testWarehouse . Id } ;
97+ {
98+ ProductId = i ,
99+ Quantity = 5 ,
100+ WarehouseId = _testWarehouse . Id
101+ } ;
60102 }
61103
62104 var stocksMock = stocks . BuildMock ( ) ;
63- _stockRepoMock . Setup ( x => x . Query ( ) ) . Returns ( stocksMock ) ;
105+ _stockRepoMock . Setup ( x => x . Query ( ) )
106+ . Returns ( stocksMock ) ;
64107 _stockRepoMock . Setup ( x => x . AddRange ( It . IsAny < IEnumerable < Stock > > ( ) ) ) ;
65108
66109 _productRepoMock = new Mock < IRepository < Product > > ( ) ;
@@ -72,43 +115,13 @@ private void InitializeMocks(int productsCount, int stocksCount)
72115 }
73116
74117 var productsMock = products . BuildMock ( ) ;
75- _productRepoMock . Setup ( x => x . Query ( ) ) . Returns ( productsMock ) ;
76-
118+ _productRepoMock
119+ . Setup ( x => x . Query ( ) )
120+ . Returns ( productsMock ) ;
121+
77122 _mediatorMock
78123 . Setup ( m => m . Send ( It . IsAny < ProductBackInStock > ( ) , It . IsAny < CancellationToken > ( ) ) )
79124 . ReturnsAsync ( Task . CompletedTask ) ;
80125 }
81-
82- [ Theory ]
83- [ InlineData ( 1 , 1 , - 5 ) ]
84- [ InlineData ( 1 , 1 , - 10 ) ]
85- [ InlineData ( 1 , 1 , 7 ) ]
86- [ InlineData ( 1 , 1 , 0 ) ]
87- [ InlineData ( 1 , 1 , - 2 ) ]
88- public async Task UpdateStockTest ( int productsCount , int stocksCount , int adjustedQuantity )
89- {
90- InitializeMocks ( productsCount , stocksCount ) ;
91-
92- var service = new StockService ( _stockRepoMock . Object , _productRepoMock . Object ,
93- _stockHistoryRepoMock . Object , _mediatorMock . Object ) ;
94-
95- var product = _productRepoMock . Object . Query ( ) . FirstOrDefault ( ) ;
96- var stock = _stockRepoMock . Object
97- . Query ( )
98- . FirstOrDefault ( o => o . ProductId == product . Id && o . WarehouseId == _testWarehouse . Id ) ;
99- var prevStockQuantity = stock . Quantity ;
100-
101- var request = new StockUpdateRequest
102- {
103- AdjustedQuantity = adjustedQuantity ,
104- ProductId = product . Id ,
105- WarehouseId = _testWarehouse . Id ,
106- } ;
107-
108- await service . UpdateStock ( request ) ;
109-
110- var newStockQuantity = stock . Quantity ;
111- Assert . Equal ( Math . Max ( 0 , prevStockQuantity + adjustedQuantity ) , newStockQuantity ) ;
112- }
113126 }
114127}
0 commit comments