| setProductStock(Product, Integer) |  | 0% |  | 0% | 7 | 7 | 25 | 25 | 1 | 1 |
| getProductStock(Product) |  | 0% |  | 0% | 6 | 6 | 21 | 21 | 1 | 1 |
| getProductStatistics() |  | 0% |  | 0% | 2 | 2 | 23 | 23 | 1 | 1 |
| isProductOnSale(Product) |  | 0% |  | 0% | 11 | 11 | 24 | 24 | 1 | 1 |
| demonstrateProductMethods() |  | 0% |  | 0% | 2 | 2 | 11 | 11 | 1 | 1 |
| isProductActive(Product) |  | 0% |  | 0% | 5 | 5 | 14 | 14 | 1 | 1 |
| saveProduct(Product) |  | 0% |  | 0% | 4 | 4 | 12 | 12 | 1 | 1 |
| lambda$updateProduct$0(Product, Product) |  | 0% |  | 0% | 6 | 6 | 13 | 13 | 1 | 1 |
| validateProduct(Product) |  | 0% |  | 0% | 7 | 7 | 9 | 9 | 1 | 1 |
| deleteProduct(Long) |  | 0% |  | 0% | 3 | 3 | 12 | 12 | 1 | 1 |
| getPopularProducts(int) |  | 0% |  | 0% | 2 | 2 | 9 | 9 | 1 | 1 |
| searchProducts(String) |  | 0% |  | 0% | 3 | 3 | 10 | 10 | 1 | 1 |
| getProductById(Long) |  | 0% |  | 0% | 3 | 3 | 9 | 9 | 1 | 1 |
| getAveragePriceByCategory(String) |  | 0% |  | 0% | 2 | 2 | 9 | 9 | 1 | 1 |
| searchActiveProducts(String) |  | 0% |  | 0% | 3 | 3 | 8 | 8 | 1 | 1 |
| getProductsByCategory(String) |  | 0% |  | 0% | 3 | 3 | 7 | 7 | 1 | 1 |
| lambda$searchActiveProducts$2(String, Product) |  | 0% |  | 0% | 6 | 6 | 5 | 5 | 1 | 1 |
| getNewestProducts(int) |  | 0% |  | 0% | 2 | 2 | 8 | 8 | 1 | 1 |
| isInPriceRange(BigDecimal, BigDecimal, BigDecimal) |  | 0% |  | 0% | 6 | 6 | 6 | 6 | 1 | 1 |
| getProductsOnSale() |  | 0% | | n/a | 1 | 1 | 6 | 6 | 1 | 1 |
| getProductsByPriceRange(BigDecimal, BigDecimal) |  | 0% | | n/a | 1 | 1 | 5 | 5 | 1 | 1 |
| countProductsByCategory(String) |  | 0% |  | 0% | 3 | 3 | 4 | 4 | 1 | 1 |
| lambda$getNewestProducts$3(Product, Product) |  | 0% |  | 0% | 3 | 3 | 3 | 3 | 1 | 1 |
| getAllCategories() |  | 0% | | n/a | 1 | 1 | 7 | 7 | 1 | 1 |
| updateProduct(Long, Product) |  | 0% | | n/a | 1 | 1 | 4 | 4 | 1 | 1 |
| getLowStockProducts(int) |  | 0% | | n/a | 1 | 1 | 4 | 4 | 1 | 1 |
| hasMethod(Object, String) |  | 0% |  | 0% | 2 | 2 | 5 | 5 | 1 | 1 |
| getAllProducts() |  | 0% | | n/a | 1 | 1 | 4 | 4 | 1 | 1 |
| getAllActiveProducts() |  | 0% | | n/a | 1 | 1 | 4 | 4 | 1 | 1 |
| isStockBelowThreshold(Product, int) |  | 0% |  | 0% | 3 | 3 | 2 | 2 | 1 | 1 |
| isValidCategory(String) |  | 0% |  | 0% | 3 | 3 | 1 | 1 | 1 | 1 |
| ProductService(ProductRepository) |  | 0% | | n/a | 1 | 1 | 4 | 4 | 1 | 1 |
| existsById(Long) |  | 0% |  | 0% | 2 | 2 | 2 | 2 | 1 | 1 |
| getProductByIdWithoutView(Long) |  | 0% | | n/a | 1 | 1 | 2 | 2 | 1 | 1 |
| lambda$getProductStatistics$8(Product) |  | 0% |  | 0% | 2 | 2 | 1 | 1 | 1 | 1 |
| getProductByIdOrNull(Long) |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| lambda$getProductsByPriceRange$5(BigDecimal, BigDecimal, Product) |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| lambda$getProductsByPriceRange$4(Product) |  | 0% |  | 0% | 2 | 2 | 1 | 1 | 1 | 1 |
| lambda$getProductStatistics$10(BigDecimal) |  | 0% |  | 0% | 2 | 2 | 1 | 1 | 1 | 1 |
| lambda$getAveragePriceByCategory$7(BigDecimal) |  | 0% |  | 0% | 2 | 2 | 1 | 1 | 1 | 1 |
| lambda$updateProduct$1(Long) |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| lambda$getProductStatistics$9(Product) |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| lambda$getLowStockProducts$6(int, Product) |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| findById(Long) |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| static {...} |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |