< Summary

Information
Line coverage
100%
Covered lines: 23
Uncovered lines: 0
Coverable lines: 23
Total lines: 72
Line coverage: 100%
Branch coverage
100%
Covered branches: 2
Total branches: 2
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
CheckOut(...)100%22100%

File(s)

/home/runner/work/lab-2025-i-si784-u2-04-cs-srg-cp/lab-2025-i-si784-u2-04-cs-srg-cp/EcommerceApp/EcommerceApp.Api/Controllers/CartController.cs

#LineLine coverage
 1using EcommerceApp.Api.Models;
 2using EcommerceApp.Api.Services;
 3using Microsoft.AspNetCore.Mvc;
 4
 5namespace EcommerceApp.Api.Controllers;
 6/// <summary>
 7/// Controlador para procesar operaciones del carrito.
 8/// </summary>
 9[ApiController]
 10[Route("[controller]")]
 11public class CartController
 12{
 13  /// <summary>
 14  /// Servicio de carrito.
 15  /// </summary>
 16  private readonly ICartService _cartService;
 17
 18  /// <summary>
 19  /// Servicio de pago.
 20  /// </summary>
 21  private readonly IPaymentService _paymentService;
 22
 23  /// <summary>
 24  /// Servicio de envío.
 25  /// </summary>
 26  private readonly IShipmentService _shipmentService;
 27
 28  /// <summary>
 29  /// Servicio de descuento.
 30  /// </summary>
 31  private readonly IDiscountService _discountService;
 32
 33  /// <summary>
 34  /// Constructor del CartController.
 35  /// </summary>
 436  public CartController(
 437      ICartService cartService,
 438      IPaymentService paymentService,
 439      IShipmentService shipmentService,
 440      IDiscountService discountService
 441  )
 442  {
 443    _cartService = cartService;
 444    _paymentService = paymentService;
 445    _shipmentService = shipmentService;
 446    _discountService = discountService;
 447  }
 48
 49  /// <summary>
 50  /// Ejecuta el proceso de checkout con pago y envío.
 51  /// </summary>
 52  /// <param name="card">Datos de la tarjeta</param>
 53  /// <param name="addressInfo">Datos de dirección</param>
 54  /// <returns>Resultado del proceso</returns>
 55  [HttpPost]
 56  public string CheckOut(ICard card, IAddressInfo addressInfo)
 457  {
 458    var total = _cartService.Total();
 459    var discountedTotal = _discountService.ApplyDiscount(total);
 60
 461    var result = _paymentService.Charge(discountedTotal, card);
 462    if (result)
 263    {
 264      _shipmentService.Ship(addressInfo, _cartService.Items());
 265      return "charged";
 66    }
 67    else
 268    {
 269      return "not charged";
 70    }
 471  }
 72}