From 0e8ddf9730332807de8b004556422c9228222fef Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 5 Nov 2025 23:16:15 +0000 Subject: [PATCH 1/3] Initial plan From f5ceabd1ccfe373e4a37eab6852bed215389b030 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 5 Nov 2025 23:25:42 +0000 Subject: [PATCH 2/3] Add three unit tests to BasketServiceTests class Co-authored-by: Davsterl <11415265+Davsterl@users.noreply.github.com> --- tests/Basket.UnitTests/BasketServiceTests.cs | 80 ++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/tests/Basket.UnitTests/BasketServiceTests.cs b/tests/Basket.UnitTests/BasketServiceTests.cs index 4e8abb4dc..18334caf9 100644 --- a/tests/Basket.UnitTests/BasketServiceTests.cs +++ b/tests/Basket.UnitTests/BasketServiceTests.cs @@ -59,4 +59,84 @@ public async Task GetBasketReturnsEmptyForInvalidUserId() Assert.IsInstanceOfType(response); Assert.AreEqual(response.Items.Count(), 0); } + + [TestMethod] + public async Task GetBasketReturnsEmptyWhenRepositoryReturnsNull() + { + // Arrange: Mock IBasketRepository.GetBasketAsync to return null for a valid user ID + var mockRepository = Substitute.For(); + mockRepository.GetBasketAsync("1").Returns(Task.FromResult(null)); + var service = new BasketService(mockRepository, NullLogger.Instance); + var serverCallContext = TestServerCallContext.Create(); + var httpContext = new DefaultHttpContext(); + httpContext.User = new ClaimsPrincipal(new ClaimsIdentity([new Claim("sub", "1")])); + serverCallContext.SetUserState("__HttpContext", httpContext); + + // Act: Call GetBasket with a valid user context + var response = await service.GetBasket(new GetBasketRequest(), serverCallContext); + + // Assert: The response is a CustomerBasketResponse with zero items + Assert.IsInstanceOfType(response); + Assert.AreEqual(0, response.Items.Count()); + } + + [TestMethod] + public async Task GetBasketHandlesRepositoryExceptionGracefully() + { + // Arrange: Mock IBasketRepository.GetBasketAsync to throw an exception for a valid user ID + var mockRepository = Substitute.For(); + mockRepository.GetBasketAsync("1").Returns>(x => throw new Exception("Repository error")); + var service = new BasketService(mockRepository, NullLogger.Instance); + var serverCallContext = TestServerCallContext.Create(); + var httpContext = new DefaultHttpContext(); + httpContext.User = new ClaimsPrincipal(new ClaimsIdentity([new Claim("sub", "1")])); + serverCallContext.SetUserState("__HttpContext", httpContext); + + // Act: Call GetBasket with a valid user context + // Assert: The service throws the exception (current implementation behavior) + await Assert.ThrowsExactlyAsync(async () => + { + await service.GetBasket(new GetBasketRequest(), serverCallContext); + }); + } + + [TestMethod] + public async Task GetBasketReturnsMultipleItemsForValidUserId() + { + // Arrange: Mock IBasketRepository.GetBasketAsync to return a CustomerBasket with multiple BasketItem objects + var mockRepository = Substitute.For(); + List items = [ + new BasketItem { Id = "item-1", ProductId = 1, ProductName = "Product 1", Quantity = 2, UnitPrice = 10.50m }, + new BasketItem { Id = "item-2", ProductId = 2, ProductName = "Product 2", Quantity = 1, UnitPrice = 25.00m }, + new BasketItem { Id = "item-3", ProductId = 3, ProductName = "Product 3", Quantity = 3, UnitPrice = 5.75m } + ]; + mockRepository.GetBasketAsync("1").Returns(Task.FromResult(new CustomerBasket { BuyerId = "1", Items = items })); + var service = new BasketService(mockRepository, NullLogger.Instance); + var serverCallContext = TestServerCallContext.Create(); + var httpContext = new DefaultHttpContext(); + httpContext.User = new ClaimsPrincipal(new ClaimsIdentity([new Claim("sub", "1")])); + serverCallContext.SetUserState("__HttpContext", httpContext); + + // Act: Call GetBasket with a valid user context + var response = await service.GetBasket(new GetBasketRequest(), serverCallContext); + + // Assert: The response contains the correct number of items and the expected item details + Assert.IsInstanceOfType(response); + Assert.AreEqual(3, response.Items.Count()); + + // Verify first item details + var firstItem = response.Items.ElementAt(0); + Assert.AreEqual(1, firstItem.ProductId); + Assert.AreEqual(2, firstItem.Quantity); + + // Verify second item details + var secondItem = response.Items.ElementAt(1); + Assert.AreEqual(2, secondItem.ProductId); + Assert.AreEqual(1, secondItem.Quantity); + + // Verify third item details + var thirdItem = response.Items.ElementAt(2); + Assert.AreEqual(3, thirdItem.ProductId); + Assert.AreEqual(3, thirdItem.Quantity); + } } From b3201ae497384f27c8ecb76d6f49db3e6b8cad53 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 5 Nov 2025 23:27:29 +0000 Subject: [PATCH 3/3] Improve test efficiency by using ToList() before indexing Co-authored-by: Davsterl <11415265+Davsterl@users.noreply.github.com> --- tests/Basket.UnitTests/BasketServiceTests.cs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/tests/Basket.UnitTests/BasketServiceTests.cs b/tests/Basket.UnitTests/BasketServiceTests.cs index 18334caf9..b890ee75f 100644 --- a/tests/Basket.UnitTests/BasketServiceTests.cs +++ b/tests/Basket.UnitTests/BasketServiceTests.cs @@ -124,19 +124,18 @@ public async Task GetBasketReturnsMultipleItemsForValidUserId() Assert.IsInstanceOfType(response); Assert.AreEqual(3, response.Items.Count()); + var itemsList = response.Items.ToList(); + // Verify first item details - var firstItem = response.Items.ElementAt(0); - Assert.AreEqual(1, firstItem.ProductId); - Assert.AreEqual(2, firstItem.Quantity); + Assert.AreEqual(1, itemsList[0].ProductId); + Assert.AreEqual(2, itemsList[0].Quantity); // Verify second item details - var secondItem = response.Items.ElementAt(1); - Assert.AreEqual(2, secondItem.ProductId); - Assert.AreEqual(1, secondItem.Quantity); + Assert.AreEqual(2, itemsList[1].ProductId); + Assert.AreEqual(1, itemsList[1].Quantity); // Verify third item details - var thirdItem = response.Items.ElementAt(2); - Assert.AreEqual(3, thirdItem.ProductId); - Assert.AreEqual(3, thirdItem.Quantity); + Assert.AreEqual(3, itemsList[2].ProductId); + Assert.AreEqual(3, itemsList[2].Quantity); } }