public async Task UpdateBasket_BasketExist_ReturnsBasket( [Frozen] MockHttpMessageHandler handler, [Frozen] HttpClient httpClient, Uri uri, BasketApiClient sut, Basket basket ) { //Arrange httpClient.BaseAddress = uri; handler.When(HttpMethod.Post, $"{uri}*") .Respond(HttpStatusCode.OK, new StringContent( JsonSerializer.Serialize(basket, new JsonSerializerOptions { Converters = { new JsonStringEnumConverter() }, IgnoreReadOnlyProperties = true, PropertyNamingPolicy = JsonNamingPolicy.CamelCase }), Encoding.UTF8, "application/json" ) ); //Act var response = await sut.UpdateBasket(basket); //Assert response.BuyerId.Should().Be(basket.BuyerId); response.Items.Count.Should().Be(basket.Items.Count); }
public async Task <BasketIndexViewModel> GetOrCreateBasketForUser(string userId) { _logger.LogInformation("GetOrCreateBasketForUser called."); BasketApiClient client = new BasketApiClient(_config.APIBaseUrl); BasketModelResponse basket = await client.BasketService.GetBasketForUser(userId); return(GetViewModelFromBasket(basket)); }
public async Task <BasketRemoveItemResponse> RemoveBasketItem(int basketId, int productId) { BasketApiClient client = new BasketApiClient(_config.APIBaseUrl); BasketRemoveItemResponse response = await client.BasketService.RemoveBasketItem( basketId, new BasketRemoveItemRequest() { ProductId = productId }); return(response); }
public async Task <BasketAddItemResponse> AddItemToBasket(int basketid, int productid, decimal price, int quantity) { BasketApiClient client = new BasketApiClient(_config.APIBaseUrl); BasketAddItemResponse response = await client.BasketService.AddBasketItem( basketid, new BasketAddItemRequest() { Price = price, ProductId = productid, Quantity = quantity }); return(response); }
public async Task <BasketUpdateResponse> UpdateBasketItem(int basketid, Dictionary <int, int> quantities) { BasketApiClient client = new BasketApiClient(_config.APIBaseUrl); BasketUpdateResponse response = await client.BasketService.UpdateBasketItem( basketid, new BasketUpdateItemsRequest() { Items = quantities.Select(q => new BasketUpdateItem() { ProductId = q.Key, Quantity = q.Value }).ToList() }); return(response); }
public ProductsIndexViewModel GetProductItems() { _logger.LogInformation("GetProductItems called."); BasketApiClient client = new BasketApiClient(_config.APIBaseUrl); IEnumerable <ProductModelResponse> items = client.ProductService.GetProductsAsync().Result; //imrovment could be to add paging ProductsIndexViewModel result = new ProductsIndexViewModel() { ProductItems = items.Select(i => new ProductItemViewModel() { Id = i.ProductId, Name = i.Name, Price = i.Price }) }; return(result); }
public void GetBasket_NoBasketFound_ThrowsHttpRequestException( [Frozen] MockHttpMessageHandler handler, [Frozen] HttpClient httpClient, Uri uri, BasketApiClient sut, string userID ) { //Arrange httpClient.BaseAddress = uri; handler.When(HttpMethod.Get, $"{uri}*") .Respond(HttpStatusCode.NotFound); //Act Func <Task> func = async() => await sut.GetBasket(userID); //Assert func.Should().Throw <HttpRequestException>() .WithMessage("Response status code does not indicate success: 404 (Not Found)."); }
public void Checkout_ReturnsAccepted( [Frozen] MockHttpMessageHandler handler, [Frozen] HttpClient httpClient, Uri uri, BasketApiClient sut, BasketCheckout basket ) { //Arrange httpClient.BaseAddress = uri; handler.When(HttpMethod.Post, $"{uri}*") .Respond(HttpStatusCode.Accepted); //Act async Task func() => await sut.Checkout(basket); //Assert var task = func(); task.GetAwaiter().GetResult(); task.IsCompleted.Should().BeTrue(); }