From bbf5acbb6b4a0c0d655747b901890092a4bedcc8 Mon Sep 17 00:00:00 2001 From: sysadmin Date: Wed, 27 Aug 2025 22:19:39 +0100 Subject: [PATCH] final --- LittleShop.Client/Models/CustomerMessage.cs | 1 + LittleShop.Client/Services/IMessageService.cs | 1 + LittleShop.Client/Services/IOrderService.cs | 1 + LittleShop.Client/Services/MessageService.cs | 22 + LittleShop.Client/Services/OrderService.cs | 24 + .../Admin/Controllers/MessagesController.cs | 39 +- .../Admin/Views/Messages/Customer.cshtml | 29 +- .../Controllers/BotMessagesController.cs | 7 + LittleShop/Controllers/OrdersController.cs | 8 + LittleShop/Services/IOrderService.cs | 1 + LittleShop/Services/OrderService.cs | 14 + .../authentication_analysis.json | 2447 ++++++ .../TestAgent_Results/coverage_analysis.json | 6861 +++++++++++++++++ .../TestAgent_Results/endpoint_discovery.json | 2940 +++++++ .../TestAgent_Results/error_detection.json | 1386 ++++ .../TestAgent_Results/executive_summary.json | 31 + .../intelligent_analysis.json | 79 + .../TestAgent_Results/project_structure.json | 1669 ++++ .../TestAgent_Results/visual_testing.json | 17 + ...n.json => appsettings.Production.json.bak} | 0 LittleShop/littleshop.db-shm | Bin 32768 -> 32768 bytes LittleShop/littleshop.db-wal | Bin 321392 -> 453232 bytes 22 files changed, 15571 insertions(+), 6 deletions(-) create mode 100644 LittleShop/TestAgent_Results/authentication_analysis.json create mode 100644 LittleShop/TestAgent_Results/coverage_analysis.json create mode 100644 LittleShop/TestAgent_Results/endpoint_discovery.json create mode 100644 LittleShop/TestAgent_Results/error_detection.json create mode 100644 LittleShop/TestAgent_Results/executive_summary.json create mode 100644 LittleShop/TestAgent_Results/intelligent_analysis.json create mode 100644 LittleShop/TestAgent_Results/project_structure.json create mode 100644 LittleShop/TestAgent_Results/visual_testing.json rename LittleShop/{appsettings.Production.json => appsettings.Production.json.bak} (100%) diff --git a/LittleShop.Client/Models/CustomerMessage.cs b/LittleShop.Client/Models/CustomerMessage.cs index 41fe0e4..c16adb8 100644 --- a/LittleShop.Client/Models/CustomerMessage.cs +++ b/LittleShop.Client/Models/CustomerMessage.cs @@ -11,6 +11,7 @@ public class CustomerMessage public bool IsUrgent { get; set; } public string? OrderReference { get; set; } public DateTime CreatedAt { get; set; } + public int Direction { get; set; } // 0 = AdminToCustomer, 1 = CustomerToAdmin } public enum MessageType diff --git a/LittleShop.Client/Services/IMessageService.cs b/LittleShop.Client/Services/IMessageService.cs index 6e6a4dd..3c57718 100644 --- a/LittleShop.Client/Services/IMessageService.cs +++ b/LittleShop.Client/Services/IMessageService.cs @@ -8,4 +8,5 @@ public interface IMessageService Task MarkMessageAsSentAsync(Guid messageId, string? platformMessageId = null); Task MarkMessageAsFailedAsync(Guid messageId, string reason); Task CreateCustomerMessageAsync(object messageData); + Task?> GetCustomerMessagesAsync(Guid customerId); } \ No newline at end of file diff --git a/LittleShop.Client/Services/IOrderService.cs b/LittleShop.Client/Services/IOrderService.cs index 4c15e22..5d416c1 100644 --- a/LittleShop.Client/Services/IOrderService.cs +++ b/LittleShop.Client/Services/IOrderService.cs @@ -6,6 +6,7 @@ public interface IOrderService { Task> CreateOrderAsync(CreateOrderRequest request); Task>> GetOrdersByIdentityAsync(string identityReference); + Task>> GetOrdersByCustomerIdAsync(Guid customerId); Task> GetOrderByIdAsync(Guid id); Task> CreatePaymentAsync(Guid orderId, int currency); Task>> GetOrderPaymentsAsync(Guid orderId); diff --git a/LittleShop.Client/Services/MessageService.cs b/LittleShop.Client/Services/MessageService.cs index 0a1aed1..29b4b60 100644 --- a/LittleShop.Client/Services/MessageService.cs +++ b/LittleShop.Client/Services/MessageService.cs @@ -84,4 +84,26 @@ public class MessageService : IMessageService return false; } } + + public async Task?> GetCustomerMessagesAsync(Guid customerId) + { + try + { + var response = await _httpClient.GetAsync($"api/bot/messages/customer/{customerId}"); + + if (response.IsSuccessStatusCode) + { + var messages = await response.Content.ReadFromJsonAsync>(); + return messages ?? new List(); + } + + _logger.LogWarning("Failed to get customer messages: {StatusCode}", response.StatusCode); + return new List(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error getting customer messages"); + return new List(); + } + } } \ No newline at end of file diff --git a/LittleShop.Client/Services/OrderService.cs b/LittleShop.Client/Services/OrderService.cs index fc2a58f..9a012b2 100644 --- a/LittleShop.Client/Services/OrderService.cs +++ b/LittleShop.Client/Services/OrderService.cs @@ -64,6 +64,30 @@ public class OrderService : IOrderService System.Net.HttpStatusCode.InternalServerError); } } + + public async Task>> GetOrdersByCustomerIdAsync(Guid customerId) + { + try + { + var response = await _httpClient.GetAsync($"api/orders/by-customer/{customerId}"); + + if (response.IsSuccessStatusCode) + { + var orders = await response.Content.ReadFromJsonAsync>(); + return ApiResponse>.Success(orders ?? new List()); + } + + var error = await response.Content.ReadAsStringAsync(); + return ApiResponse>.Failure(error, response.StatusCode); + } + catch (Exception ex) + { + _logger.LogError(ex, "Failed to get orders for customer {CustomerId}", customerId); + return ApiResponse>.Failure( + ex.Message, + System.Net.HttpStatusCode.InternalServerError); + } + } public async Task> GetOrderByIdAsync(Guid id) { diff --git a/LittleShop/Areas/Admin/Controllers/MessagesController.cs b/LittleShop/Areas/Admin/Controllers/MessagesController.cs index fd818d2..aada2a1 100644 --- a/LittleShop/Areas/Admin/Controllers/MessagesController.cs +++ b/LittleShop/Areas/Admin/Controllers/MessagesController.cs @@ -11,11 +11,13 @@ namespace LittleShop.Areas.Admin.Controllers; public class MessagesController : Controller { private readonly ICustomerMessageService _messageService; + private readonly ICustomerService _customerService; private readonly ILogger _logger; - public MessagesController(ICustomerMessageService messageService, ILogger logger) + public MessagesController(ICustomerMessageService messageService, ICustomerService customerService, ILogger logger) { _messageService = messageService; + _customerService = customerService; _logger = logger; } @@ -28,9 +30,42 @@ public class MessagesController : Controller public async Task Customer(Guid id) { var conversation = await _messageService.GetMessageThreadAsync(id); + + // If no conversation exists yet, create an empty one for this customer if (conversation == null) { - return NotFound(); + // Check if customer exists + var customerExists = await _messageService.ValidateCustomerExistsAsync(id); + if (!customerExists) + { + TempData["Error"] = "Customer not found."; + return RedirectToAction("Index"); + } + + // Get customer information + var customer = await _customerService.GetCustomerByIdAsync(id); + if (customer == null) + { + TempData["Error"] = "Customer information not available."; + return RedirectToAction("Index"); + } + + // Create empty conversation structure for new conversation + conversation = new MessageThreadDto + { + ThreadId = id, + Subject = customer.DisplayName, + CustomerId = id, + CustomerName = customer.DisplayName, + OrderId = null, + OrderReference = null, + StartedAt = DateTime.UtcNow, + LastMessageAt = DateTime.UtcNow, + MessageCount = 0, + HasUnreadMessages = false, + RequiresResponse = false, + Messages = new List() + }; } return View(conversation); diff --git a/LittleShop/Areas/Admin/Views/Messages/Customer.cshtml b/LittleShop/Areas/Admin/Views/Messages/Customer.cshtml index 33e6289..01d1dbe 100644 --- a/LittleShop/Areas/Admin/Views/Messages/Customer.cshtml +++ b/LittleShop/Areas/Admin/Views/Messages/Customer.cshtml @@ -4,6 +4,15 @@ ViewData["Title"] = $"Conversation with {Model.CustomerName}"; } +@{ + // Get customer info if name is not loaded + if (Model.CustomerName == "Loading...") + { + // This would need to be loaded via a service call + Model.CustomerName = "Customer"; // Fallback + } +} +
@@ -41,8 +50,19 @@
- @foreach (var message in Model.Messages.OrderBy(m => m.CreatedAt)) + @if (!Model.Messages.Any()) { +
+ +
No messages yet
+

This is the start of your conversation with @Model.CustomerName.

+

Send a message below to begin the conversation.

+
+ } + else + { + @foreach (var message in Model.Messages.OrderBy(m => m.CreatedAt)) + {
@@ -84,6 +104,7 @@
+ } }
@@ -118,7 +139,7 @@
-
Send Reply
+
@(Model.MessageCount == 0 ? "Start Conversation" : "Send Reply")
@@ -126,7 +147,7 @@
- +
@@ -137,7 +158,7 @@
diff --git a/LittleShop/Controllers/BotMessagesController.cs b/LittleShop/Controllers/BotMessagesController.cs index 236c29b..2aaed17 100644 --- a/LittleShop/Controllers/BotMessagesController.cs +++ b/LittleShop/Controllers/BotMessagesController.cs @@ -110,6 +110,13 @@ public class BotMessagesController : ControllerBase return BadRequest($"Error creating customer message: {ex.Message}"); } } + + [HttpGet("customer/{customerId}")] + public async Task>> GetCustomerMessages(Guid customerId) + { + var messages = await _messageService.GetCustomerMessagesAsync(customerId); + return Ok(messages); + } } // TEMPORARY DTO FOR TESTING diff --git a/LittleShop/Controllers/OrdersController.cs b/LittleShop/Controllers/OrdersController.cs index c07500a..198dfd4 100644 --- a/LittleShop/Controllers/OrdersController.cs +++ b/LittleShop/Controllers/OrdersController.cs @@ -64,6 +64,14 @@ public class OrdersController : ControllerBase return Ok(orders); } + [HttpGet("by-customer/{customerId}")] + [AllowAnonymous] + public async Task>> GetOrdersByCustomerId(Guid customerId) + { + var orders = await _orderService.GetOrdersByCustomerIdAsync(customerId); + return Ok(orders); + } + [HttpGet("by-identity/{identityReference}/{id}")] [AllowAnonymous] public async Task> GetOrderByIdentity(string identityReference, Guid id) diff --git a/LittleShop/Services/IOrderService.cs b/LittleShop/Services/IOrderService.cs index 88a827d..50753b9 100644 --- a/LittleShop/Services/IOrderService.cs +++ b/LittleShop/Services/IOrderService.cs @@ -6,6 +6,7 @@ public interface IOrderService { Task> GetAllOrdersAsync(); Task> GetOrdersByIdentityAsync(string identityReference); + Task> GetOrdersByCustomerIdAsync(Guid customerId); Task GetOrderByIdAsync(Guid id); Task CreateOrderAsync(CreateOrderDto createOrderDto); Task UpdateOrderStatusAsync(Guid id, UpdateOrderStatusDto updateOrderStatusDto); diff --git a/LittleShop/Services/OrderService.cs b/LittleShop/Services/OrderService.cs index b9a87fa..21a76ee 100644 --- a/LittleShop/Services/OrderService.cs +++ b/LittleShop/Services/OrderService.cs @@ -46,6 +46,20 @@ public class OrderService : IOrderService return orders.Select(MapToDto); } + public async Task> GetOrdersByCustomerIdAsync(Guid customerId) + { + var orders = await _context.Orders + .Include(o => o.Customer) + .Include(o => o.Items) + .ThenInclude(oi => oi.Product) + .Include(o => o.Payments) + .Where(o => o.CustomerId == customerId) + .OrderByDescending(o => o.CreatedAt) + .ToListAsync(); + + return orders.Select(MapToDto); + } + public async Task GetOrderByIdAsync(Guid id) { var order = await _context.Orders diff --git a/LittleShop/TestAgent_Results/authentication_analysis.json b/LittleShop/TestAgent_Results/authentication_analysis.json new file mode 100644 index 0000000..5ccf6c9 --- /dev/null +++ b/LittleShop/TestAgent_Results/authentication_analysis.json @@ -0,0 +1,2447 @@ +{ + "Summary": { + "TotalStates": 3, + "TotalEndpoints": 115, + "ProtectedEndpoints": 10, + "PublicEndpoints": 105, + "IdentifiedGaps": 153, + "AuthenticationTransitions": 7 + }, + "States": [ + { + "Name": "Anonymous", + "IsAuthenticated": false, + "Roles": [], + "Claims": [], + "AccessibleEndpoints": [ + "AuthController/Login", + "BotMessagesController/GetPendingMessages", + "BotMessagesController/MarkMessageAsSent", + "BotMessagesController/MarkMessageAsFailed", + "BotMessagesController/CreateTestMessage", + "BotMessagesController/CreateCustomerMessage", + "BotMessagesController/GetCustomerMessages", + "BotsController/RegisterBot", + "BotsController/AuthenticateBot", + "BotsController/GetBotSettings", + "BotsController/UpdateBotSettings", + "BotsController/RecordHeartbeat", + "BotsController/UpdatePlatformInfo", + "BotsController/RecordMetric", + "BotsController/RecordMetricsBatch", + "BotsController/StartSession", + "BotsController/UpdateSession", + "BotsController/EndSession", + "CatalogController/GetCategories", + "CatalogController/GetCategory", + "CatalogController/GetProducts", + "CatalogController/GetProduct", + "CustomersController/GetCustomers", + "CustomersController/GetCustomer", + "CustomersController/GetCustomerByTelegramId", + "CustomersController/CreateCustomer", + "CustomersController/GetOrCreateCustomer", + "CustomersController/UpdateCustomer", + "CustomersController/BlockCustomer", + "CustomersController/UnblockCustomer", + "CustomersController/DeleteCustomer", + "HomeController/Index", + "MessagesController/SendMessage", + "MessagesController/GetMessage", + "MessagesController/GetCustomerMessages", + "MessagesController/GetOrderMessages", + "MessagesController/GetPendingMessages", + "MessagesController/MarkMessageAsSent", + "MessagesController/MarkMessageAsDelivered", + "MessagesController/MarkMessageAsFailed", + "OrdersController/GetOrdersByIdentity", + "OrdersController/GetOrdersByCustomerId", + "OrdersController/GetOrderByIdentity", + "OrdersController/CreateOrder", + "OrdersController/CreatePayment", + "OrdersController/GetOrderPayments", + "OrdersController/GetPaymentStatus", + "OrdersController/CancelOrder", + "OrdersController/PaymentWebhook", + "TestController/CreateTestProduct", + "TestController/SetupTestData", + "AccountController/Login", + "AccountController/Login", + "AccountController/AccessDenied", + "BotsController/Index", + "BotsController/Details", + "BotsController/Create", + "BotsController/Wizard", + "BotsController/Wizard", + "BotsController/CompleteWizard", + "BotsController/Create", + "BotsController/Edit", + "BotsController/Edit", + "BotsController/Metrics", + "BotsController/Delete", + "BotsController/Suspend", + "BotsController/Activate", + "BotsController/RegenerateKey", + "CategoriesController/Index", + "CategoriesController/Create", + "CategoriesController/Create", + "CategoriesController/Edit", + "CategoriesController/Edit", + "CategoriesController/Delete", + "DashboardController/Index", + "MessagesController/Index", + "MessagesController/Customer", + "MessagesController/Reply", + "OrdersController/Index", + "OrdersController/Details", + "OrdersController/Create", + "OrdersController/Create", + "OrdersController/Edit", + "OrdersController/Edit", + "OrdersController/UpdateStatus", + "ProductsController/Index", + "ProductsController/Create", + "ProductsController/Create", + "ProductsController/Edit", + "ProductsController/Edit", + "ProductsController/UploadPhoto", + "ProductsController/DeletePhoto", + "ProductsController/Delete", + "ShippingRatesController/Index", + "ShippingRatesController/Create", + "ShippingRatesController/Create", + "ShippingRatesController/Edit", + "ShippingRatesController/Edit", + "ShippingRatesController/Delete", + "UsersController/Index", + "UsersController/Create", + "UsersController/Create", + "UsersController/Edit", + "UsersController/Edit", + "UsersController/Delete" + ] + }, + { + "Name": "Authenticated", + "IsAuthenticated": true, + "Roles": [], + "Claims": [], + "AccessibleEndpoints": [ + "AuthController/Login", + "BotMessagesController/GetPendingMessages", + "BotMessagesController/MarkMessageAsSent", + "BotMessagesController/MarkMessageAsFailed", + "BotMessagesController/CreateTestMessage", + "BotMessagesController/CreateCustomerMessage", + "BotMessagesController/GetCustomerMessages", + "BotsController/RegisterBot", + "BotsController/AuthenticateBot", + "BotsController/GetBotSettings", + "BotsController/UpdateBotSettings", + "BotsController/RecordHeartbeat", + "BotsController/UpdatePlatformInfo", + "BotsController/RecordMetric", + "BotsController/RecordMetricsBatch", + "BotsController/StartSession", + "BotsController/UpdateSession", + "BotsController/EndSession", + "CatalogController/GetCategories", + "CatalogController/GetCategory", + "CatalogController/GetProducts", + "CatalogController/GetProduct", + "CustomersController/GetCustomers", + "CustomersController/GetCustomer", + "CustomersController/GetCustomerByTelegramId", + "CustomersController/CreateCustomer", + "CustomersController/GetOrCreateCustomer", + "CustomersController/UpdateCustomer", + "CustomersController/BlockCustomer", + "CustomersController/UnblockCustomer", + "CustomersController/DeleteCustomer", + "HomeController/Index", + "MessagesController/SendMessage", + "MessagesController/GetMessage", + "MessagesController/GetCustomerMessages", + "MessagesController/GetOrderMessages", + "MessagesController/GetPendingMessages", + "MessagesController/MarkMessageAsSent", + "MessagesController/MarkMessageAsDelivered", + "MessagesController/MarkMessageAsFailed", + "OrdersController/GetOrdersByIdentity", + "OrdersController/GetOrdersByCustomerId", + "OrdersController/GetOrderByIdentity", + "OrdersController/CreateOrder", + "OrdersController/CreatePayment", + "OrdersController/GetOrderPayments", + "OrdersController/GetPaymentStatus", + "OrdersController/CancelOrder", + "OrdersController/PaymentWebhook", + "TestController/CreateTestProduct", + "TestController/SetupTestData", + "AccountController/Login", + "AccountController/Login", + "AccountController/Logout", + "AccountController/AccessDenied", + "BotsController/Index", + "BotsController/Details", + "BotsController/Create", + "BotsController/Wizard", + "BotsController/Wizard", + "BotsController/CompleteWizard", + "BotsController/Create", + "BotsController/Edit", + "BotsController/Edit", + "BotsController/Metrics", + "BotsController/Delete", + "BotsController/Suspend", + "BotsController/Activate", + "BotsController/RegenerateKey", + "CategoriesController/Index", + "CategoriesController/Create", + "CategoriesController/Create", + "CategoriesController/Edit", + "CategoriesController/Edit", + "CategoriesController/Delete", + "DashboardController/Index", + "MessagesController/Index", + "MessagesController/Customer", + "MessagesController/Reply", + "OrdersController/Index", + "OrdersController/Details", + "OrdersController/Create", + "OrdersController/Create", + "OrdersController/Edit", + "OrdersController/Edit", + "OrdersController/UpdateStatus", + "ProductsController/Index", + "ProductsController/Create", + "ProductsController/Create", + "ProductsController/Edit", + "ProductsController/Edit", + "ProductsController/UploadPhoto", + "ProductsController/DeletePhoto", + "ProductsController/Delete", + "ShippingRatesController/Index", + "ShippingRatesController/Create", + "ShippingRatesController/Create", + "ShippingRatesController/Edit", + "ShippingRatesController/Edit", + "ShippingRatesController/Delete", + "UsersController/Index", + "UsersController/Create", + "UsersController/Create", + "UsersController/Edit", + "UsersController/Edit", + "UsersController/Delete" + ] + }, + { + "Name": "Authenticated_Admin", + "IsAuthenticated": true, + "Roles": [ + "Admin" + ], + "Claims": [], + "AccessibleEndpoints": [ + "AuthController/Login", + "BotMessagesController/GetPendingMessages", + "BotMessagesController/MarkMessageAsSent", + "BotMessagesController/MarkMessageAsFailed", + "BotMessagesController/CreateTestMessage", + "BotMessagesController/CreateCustomerMessage", + "BotMessagesController/GetCustomerMessages", + "BotsController/RegisterBot", + "BotsController/AuthenticateBot", + "BotsController/GetBotSettings", + "BotsController/UpdateBotSettings", + "BotsController/RecordHeartbeat", + "BotsController/UpdatePlatformInfo", + "BotsController/RecordMetric", + "BotsController/RecordMetricsBatch", + "BotsController/StartSession", + "BotsController/UpdateSession", + "BotsController/EndSession", + "BotsController/GetAllBots", + "BotsController/GetBot", + "BotsController/GetBotMetrics", + "BotsController/GetMetricsSummary", + "BotsController/GetBotSessions", + "BotsController/DeleteBot", + "CatalogController/GetCategories", + "CatalogController/GetCategory", + "CatalogController/GetProducts", + "CatalogController/GetProduct", + "CustomersController/GetCustomers", + "CustomersController/GetCustomer", + "CustomersController/GetCustomerByTelegramId", + "CustomersController/CreateCustomer", + "CustomersController/GetOrCreateCustomer", + "CustomersController/UpdateCustomer", + "CustomersController/BlockCustomer", + "CustomersController/UnblockCustomer", + "CustomersController/DeleteCustomer", + "HomeController/Index", + "MessagesController/SendMessage", + "MessagesController/GetMessage", + "MessagesController/GetCustomerMessages", + "MessagesController/GetOrderMessages", + "MessagesController/GetPendingMessages", + "MessagesController/MarkMessageAsSent", + "MessagesController/MarkMessageAsDelivered", + "MessagesController/MarkMessageAsFailed", + "OrdersController/GetAllOrders", + "OrdersController/GetOrder", + "OrdersController/UpdateOrderStatus", + "OrdersController/GetOrdersByIdentity", + "OrdersController/GetOrdersByCustomerId", + "OrdersController/GetOrderByIdentity", + "OrdersController/CreateOrder", + "OrdersController/CreatePayment", + "OrdersController/GetOrderPayments", + "OrdersController/GetPaymentStatus", + "OrdersController/CancelOrder", + "OrdersController/PaymentWebhook", + "TestController/CreateTestProduct", + "TestController/SetupTestData", + "AccountController/Login", + "AccountController/Login", + "AccountController/Logout", + "AccountController/AccessDenied", + "BotsController/Index", + "BotsController/Details", + "BotsController/Create", + "BotsController/Wizard", + "BotsController/Wizard", + "BotsController/CompleteWizard", + "BotsController/Create", + "BotsController/Edit", + "BotsController/Edit", + "BotsController/Metrics", + "BotsController/Delete", + "BotsController/Suspend", + "BotsController/Activate", + "BotsController/RegenerateKey", + "CategoriesController/Index", + "CategoriesController/Create", + "CategoriesController/Create", + "CategoriesController/Edit", + "CategoriesController/Edit", + "CategoriesController/Delete", + "DashboardController/Index", + "MessagesController/Index", + "MessagesController/Customer", + "MessagesController/Reply", + "OrdersController/Index", + "OrdersController/Details", + "OrdersController/Create", + "OrdersController/Create", + "OrdersController/Edit", + "OrdersController/Edit", + "OrdersController/UpdateStatus", + "ProductsController/Index", + "ProductsController/Create", + "ProductsController/Create", + "ProductsController/Edit", + "ProductsController/Edit", + "ProductsController/UploadPhoto", + "ProductsController/DeletePhoto", + "ProductsController/Delete", + "ShippingRatesController/Index", + "ShippingRatesController/Create", + "ShippingRatesController/Create", + "ShippingRatesController/Edit", + "ShippingRatesController/Edit", + "ShippingRatesController/Delete", + "UsersController/Index", + "UsersController/Create", + "UsersController/Create", + "UsersController/Edit", + "UsersController/Edit", + "UsersController/Delete" + ] + } + ], + "EndpointRequirements": [ + { + "Endpoint": "AuthController/Login", + "Controller": "AuthController", + "Action": "Login", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotMessagesController/GetPendingMessages", + "Controller": "BotMessagesController", + "Action": "GetPendingMessages", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotMessagesController/MarkMessageAsSent", + "Controller": "BotMessagesController", + "Action": "MarkMessageAsSent", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotMessagesController/MarkMessageAsFailed", + "Controller": "BotMessagesController", + "Action": "MarkMessageAsFailed", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotMessagesController/CreateTestMessage", + "Controller": "BotMessagesController", + "Action": "CreateTestMessage", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotMessagesController/CreateCustomerMessage", + "Controller": "BotMessagesController", + "Action": "CreateCustomerMessage", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotMessagesController/GetCustomerMessages", + "Controller": "BotMessagesController", + "Action": "GetCustomerMessages", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/RegisterBot", + "Controller": "BotsController", + "Action": "RegisterBot", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": true, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "BotsController/AuthenticateBot", + "Controller": "BotsController", + "Action": "AuthenticateBot", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": true, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "BotsController/GetBotSettings", + "Controller": "BotsController", + "Action": "GetBotSettings", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/UpdateBotSettings", + "Controller": "BotsController", + "Action": "UpdateBotSettings", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/RecordHeartbeat", + "Controller": "BotsController", + "Action": "RecordHeartbeat", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/UpdatePlatformInfo", + "Controller": "BotsController", + "Action": "UpdatePlatformInfo", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/RecordMetric", + "Controller": "BotsController", + "Action": "RecordMetric", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/RecordMetricsBatch", + "Controller": "BotsController", + "Action": "RecordMetricsBatch", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/StartSession", + "Controller": "BotsController", + "Action": "StartSession", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/UpdateSession", + "Controller": "BotsController", + "Action": "UpdateSession", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/EndSession", + "Controller": "BotsController", + "Action": "EndSession", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/GetAllBots", + "Controller": "BotsController", + "Action": "GetAllBots", + "RequiresAuth": true, + "RequiredRoles": [ + "Admin" + ], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "BotsController/GetBot", + "Controller": "BotsController", + "Action": "GetBot", + "RequiresAuth": true, + "RequiredRoles": [ + "Admin" + ], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "BotsController/GetBotMetrics", + "Controller": "BotsController", + "Action": "GetBotMetrics", + "RequiresAuth": true, + "RequiredRoles": [ + "Admin" + ], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "BotsController/GetMetricsSummary", + "Controller": "BotsController", + "Action": "GetMetricsSummary", + "RequiresAuth": true, + "RequiredRoles": [ + "Admin" + ], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "BotsController/GetBotSessions", + "Controller": "BotsController", + "Action": "GetBotSessions", + "RequiresAuth": true, + "RequiredRoles": [ + "Admin" + ], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "BotsController/DeleteBot", + "Controller": "BotsController", + "Action": "DeleteBot", + "RequiresAuth": true, + "RequiredRoles": [ + "Admin" + ], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "CatalogController/GetCategories", + "Controller": "CatalogController", + "Action": "GetCategories", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "CatalogController/GetCategory", + "Controller": "CatalogController", + "Action": "GetCategory", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "CatalogController/GetProducts", + "Controller": "CatalogController", + "Action": "GetProducts", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "CatalogController/GetProduct", + "Controller": "CatalogController", + "Action": "GetProduct", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "CustomersController/GetCustomers", + "Controller": "CustomersController", + "Action": "GetCustomers", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "CustomersController/GetCustomer", + "Controller": "CustomersController", + "Action": "GetCustomer", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "CustomersController/GetCustomerByTelegramId", + "Controller": "CustomersController", + "Action": "GetCustomerByTelegramId", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "CustomersController/CreateCustomer", + "Controller": "CustomersController", + "Action": "CreateCustomer", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "CustomersController/GetOrCreateCustomer", + "Controller": "CustomersController", + "Action": "GetOrCreateCustomer", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": true, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "CustomersController/UpdateCustomer", + "Controller": "CustomersController", + "Action": "UpdateCustomer", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "CustomersController/BlockCustomer", + "Controller": "CustomersController", + "Action": "BlockCustomer", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "CustomersController/UnblockCustomer", + "Controller": "CustomersController", + "Action": "UnblockCustomer", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "CustomersController/DeleteCustomer", + "Controller": "CustomersController", + "Action": "DeleteCustomer", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "HomeController/Index", + "Controller": "HomeController", + "Action": "Index", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "MessagesController/SendMessage", + "Controller": "MessagesController", + "Action": "SendMessage", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "MessagesController/GetMessage", + "Controller": "MessagesController", + "Action": "GetMessage", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "MessagesController/GetCustomerMessages", + "Controller": "MessagesController", + "Action": "GetCustomerMessages", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "MessagesController/GetOrderMessages", + "Controller": "MessagesController", + "Action": "GetOrderMessages", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "MessagesController/GetPendingMessages", + "Controller": "MessagesController", + "Action": "GetPendingMessages", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": true, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "MessagesController/MarkMessageAsSent", + "Controller": "MessagesController", + "Action": "MarkMessageAsSent", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": true, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "MessagesController/MarkMessageAsDelivered", + "Controller": "MessagesController", + "Action": "MarkMessageAsDelivered", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "MessagesController/MarkMessageAsFailed", + "Controller": "MessagesController", + "Action": "MarkMessageAsFailed", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": true, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "OrdersController/GetAllOrders", + "Controller": "OrdersController", + "Action": "GetAllOrders", + "RequiresAuth": true, + "RequiredRoles": [ + "Admin" + ], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "OrdersController/GetOrder", + "Controller": "OrdersController", + "Action": "GetOrder", + "RequiresAuth": true, + "RequiredRoles": [ + "Admin" + ], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "OrdersController/UpdateOrderStatus", + "Controller": "OrdersController", + "Action": "UpdateOrderStatus", + "RequiresAuth": true, + "RequiredRoles": [ + "Admin" + ], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "OrdersController/GetOrdersByIdentity", + "Controller": "OrdersController", + "Action": "GetOrdersByIdentity", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": true, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "OrdersController/GetOrdersByCustomerId", + "Controller": "OrdersController", + "Action": "GetOrdersByCustomerId", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": true, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "OrdersController/GetOrderByIdentity", + "Controller": "OrdersController", + "Action": "GetOrderByIdentity", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": true, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "OrdersController/CreateOrder", + "Controller": "OrdersController", + "Action": "CreateOrder", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": true, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "OrdersController/CreatePayment", + "Controller": "OrdersController", + "Action": "CreatePayment", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": true, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "Endpoint": "OrdersController/GetOrderPayments", + "Controller": "OrdersController", + "Action": "GetOrderPayments", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "OrdersController/GetPaymentStatus", + "Controller": "OrdersController", + "Action": "GetPaymentStatus", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "OrdersController/CancelOrder", + "Controller": "OrdersController", + "Action": "CancelOrder", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "OrdersController/PaymentWebhook", + "Controller": "OrdersController", + "Action": "PaymentWebhook", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "TestController/CreateTestProduct", + "Controller": "TestController", + "Action": "CreateTestProduct", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "TestController/SetupTestData", + "Controller": "TestController", + "Action": "SetupTestData", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "AccountController/Login", + "Controller": "AccountController", + "Action": "Login", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "AccountController/Login", + "Controller": "AccountController", + "Action": "Login", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "AccountController/Logout", + "Controller": "AccountController", + "Action": "Logout", + "RequiresAuth": true, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous", + "Authenticated" + ] + }, + { + "Endpoint": "AccountController/AccessDenied", + "Controller": "AccountController", + "Action": "AccessDenied", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/Index", + "Controller": "BotsController", + "Action": "Index", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/Details", + "Controller": "BotsController", + "Action": "Details", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/Create", + "Controller": "BotsController", + "Action": "Create", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/Wizard", + "Controller": "BotsController", + "Action": "Wizard", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/Wizard", + "Controller": "BotsController", + "Action": "Wizard", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/CompleteWizard", + "Controller": "BotsController", + "Action": "CompleteWizard", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/Create", + "Controller": "BotsController", + "Action": "Create", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/Edit", + "Controller": "BotsController", + "Action": "Edit", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/Edit", + "Controller": "BotsController", + "Action": "Edit", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/Metrics", + "Controller": "BotsController", + "Action": "Metrics", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/Delete", + "Controller": "BotsController", + "Action": "Delete", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/Suspend", + "Controller": "BotsController", + "Action": "Suspend", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/Activate", + "Controller": "BotsController", + "Action": "Activate", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "BotsController/RegenerateKey", + "Controller": "BotsController", + "Action": "RegenerateKey", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "CategoriesController/Index", + "Controller": "CategoriesController", + "Action": "Index", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "CategoriesController/Create", + "Controller": "CategoriesController", + "Action": "Create", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "CategoriesController/Create", + "Controller": "CategoriesController", + "Action": "Create", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "CategoriesController/Edit", + "Controller": "CategoriesController", + "Action": "Edit", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "CategoriesController/Edit", + "Controller": "CategoriesController", + "Action": "Edit", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "CategoriesController/Delete", + "Controller": "CategoriesController", + "Action": "Delete", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "DashboardController/Index", + "Controller": "DashboardController", + "Action": "Index", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "MessagesController/Index", + "Controller": "MessagesController", + "Action": "Index", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "MessagesController/Customer", + "Controller": "MessagesController", + "Action": "Customer", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "MessagesController/Reply", + "Controller": "MessagesController", + "Action": "Reply", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "OrdersController/Index", + "Controller": "OrdersController", + "Action": "Index", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "OrdersController/Details", + "Controller": "OrdersController", + "Action": "Details", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "OrdersController/Create", + "Controller": "OrdersController", + "Action": "Create", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "OrdersController/Create", + "Controller": "OrdersController", + "Action": "Create", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "OrdersController/Edit", + "Controller": "OrdersController", + "Action": "Edit", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "OrdersController/Edit", + "Controller": "OrdersController", + "Action": "Edit", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "OrdersController/UpdateStatus", + "Controller": "OrdersController", + "Action": "UpdateStatus", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "ProductsController/Index", + "Controller": "ProductsController", + "Action": "Index", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "ProductsController/Create", + "Controller": "ProductsController", + "Action": "Create", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "ProductsController/Create", + "Controller": "ProductsController", + "Action": "Create", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "ProductsController/Edit", + "Controller": "ProductsController", + "Action": "Edit", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "ProductsController/Edit", + "Controller": "ProductsController", + "Action": "Edit", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "ProductsController/UploadPhoto", + "Controller": "ProductsController", + "Action": "UploadPhoto", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "ProductsController/DeletePhoto", + "Controller": "ProductsController", + "Action": "DeletePhoto", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "ProductsController/Delete", + "Controller": "ProductsController", + "Action": "Delete", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "ShippingRatesController/Index", + "Controller": "ShippingRatesController", + "Action": "Index", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "ShippingRatesController/Create", + "Controller": "ShippingRatesController", + "Action": "Create", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "ShippingRatesController/Create", + "Controller": "ShippingRatesController", + "Action": "Create", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "ShippingRatesController/Edit", + "Controller": "ShippingRatesController", + "Action": "Edit", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "ShippingRatesController/Edit", + "Controller": "ShippingRatesController", + "Action": "Edit", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "ShippingRatesController/Delete", + "Controller": "ShippingRatesController", + "Action": "Delete", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "UsersController/Index", + "Controller": "UsersController", + "Action": "Index", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "UsersController/Create", + "Controller": "UsersController", + "Action": "Create", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "UsersController/Create", + "Controller": "UsersController", + "Action": "Create", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "UsersController/Edit", + "Controller": "UsersController", + "Action": "Edit", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "UsersController/Edit", + "Controller": "UsersController", + "Action": "Edit", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + }, + { + "Endpoint": "UsersController/Delete", + "Controller": "UsersController", + "Action": "Delete", + "RequiresAuth": false, + "RequiredRoles": [], + "AllowsAnonymous": false, + "AccessibleByStates": [ + "Anonymous", + "Authenticated", + "Authenticated_Admin" + ], + "TestableStates": [ + "Anonymous" + ] + } + ], + "Transitions": [ + { + "FromState": "Anonymous", + "ToState": "Authenticated", + "Action": "Login", + "Endpoint": "AuthController/Login", + "RequiresValidation": true + }, + { + "FromState": "Anonymous", + "ToState": "Authenticated", + "Action": "Register", + "Endpoint": "BotsController/RegisterBot", + "RequiresValidation": true + }, + { + "FromState": "Anonymous", + "ToState": "Authenticated", + "Action": "Login", + "Endpoint": "BotsController/AuthenticateBot", + "RequiresValidation": true + }, + { + "FromState": "Anonymous", + "ToState": "Authenticated", + "Action": "Login", + "Endpoint": "AccountController/Login", + "RequiresValidation": true + }, + { + "FromState": "Anonymous", + "ToState": "Authenticated", + "Action": "Login", + "Endpoint": "AccountController/Login", + "RequiresValidation": true + }, + { + "FromState": "Authenticated", + "ToState": "Anonymous", + "Action": "Logout", + "Endpoint": "AccountController/Logout", + "RequiresValidation": false + }, + { + "FromState": "Authenticated_Admin", + "ToState": "Anonymous", + "Action": "Logout", + "Endpoint": "AccountController/Logout", + "RequiresValidation": false + } + ], + "TestingGaps": [ + "Untested authentication states for AuthController/Login: Authenticated, Authenticated_Admin", + "Untested authentication states for BotMessagesController/GetPendingMessages: Authenticated, Authenticated_Admin", + "Untested authentication states for BotMessagesController/MarkMessageAsSent: Authenticated, Authenticated_Admin", + "Untested authentication states for BotMessagesController/MarkMessageAsFailed: Authenticated, Authenticated_Admin", + "Untested authentication states for BotMessagesController/CreateTestMessage: Authenticated, Authenticated_Admin", + "State-dependent endpoint BotMessagesController/CreateTestMessage may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for BotMessagesController/CreateCustomerMessage: Authenticated, Authenticated_Admin", + "State-dependent endpoint BotMessagesController/CreateCustomerMessage may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for BotMessagesController/GetCustomerMessages: Authenticated, Authenticated_Admin", + "Untested authentication states for BotsController/GetBotSettings: Authenticated, Authenticated_Admin", + "State-dependent endpoint BotsController/GetBotSettings may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for BotsController/UpdateBotSettings: Authenticated, Authenticated_Admin", + "State-dependent endpoint BotsController/UpdateBotSettings may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for BotsController/RecordHeartbeat: Authenticated, Authenticated_Admin", + "Untested authentication states for BotsController/UpdatePlatformInfo: Authenticated, Authenticated_Admin", + "State-dependent endpoint BotsController/UpdatePlatformInfo may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for BotsController/RecordMetric: Authenticated, Authenticated_Admin", + "Untested authentication states for BotsController/RecordMetricsBatch: Authenticated, Authenticated_Admin", + "Untested authentication states for BotsController/StartSession: Authenticated, Authenticated_Admin", + "Untested authentication states for BotsController/UpdateSession: Authenticated, Authenticated_Admin", + "State-dependent endpoint BotsController/UpdateSession may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for BotsController/EndSession: Authenticated, Authenticated_Admin", + "Untested authentication states for CatalogController/GetCategories: Authenticated, Authenticated_Admin", + "Untested authentication states for CatalogController/GetCategory: Authenticated, Authenticated_Admin", + "Untested authentication states for CatalogController/GetProducts: Authenticated, Authenticated_Admin", + "Untested authentication states for CatalogController/GetProduct: Authenticated, Authenticated_Admin", + "Untested authentication states for CustomersController/GetCustomers: Authenticated, Authenticated_Admin", + "Untested authentication states for CustomersController/GetCustomer: Authenticated, Authenticated_Admin", + "Untested authentication states for CustomersController/GetCustomerByTelegramId: Authenticated, Authenticated_Admin", + "Untested authentication states for CustomersController/CreateCustomer: Authenticated, Authenticated_Admin", + "State-dependent endpoint CustomersController/CreateCustomer may show different content for anonymous vs authenticated users - ensure both paths are tested", + "State-dependent endpoint CustomersController/GetOrCreateCustomer may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for CustomersController/UpdateCustomer: Authenticated, Authenticated_Admin", + "State-dependent endpoint CustomersController/UpdateCustomer may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for CustomersController/BlockCustomer: Authenticated, Authenticated_Admin", + "Untested authentication states for CustomersController/UnblockCustomer: Authenticated, Authenticated_Admin", + "Untested authentication states for CustomersController/DeleteCustomer: Authenticated, Authenticated_Admin", + "State-dependent endpoint CustomersController/DeleteCustomer may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for HomeController/Index: Authenticated, Authenticated_Admin", + "Untested authentication states for MessagesController/SendMessage: Authenticated, Authenticated_Admin", + "Untested authentication states for MessagesController/GetMessage: Authenticated, Authenticated_Admin", + "Untested authentication states for MessagesController/GetCustomerMessages: Authenticated, Authenticated_Admin", + "Untested authentication states for MessagesController/GetOrderMessages: Authenticated, Authenticated_Admin", + "State-dependent endpoint MessagesController/GetOrderMessages may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for MessagesController/MarkMessageAsDelivered: Authenticated, Authenticated_Admin", + "State-dependent endpoint OrdersController/GetOrdersByIdentity may show different content for anonymous vs authenticated users - ensure both paths are tested", + "State-dependent endpoint OrdersController/GetOrdersByCustomerId may show different content for anonymous vs authenticated users - ensure both paths are tested", + "State-dependent endpoint OrdersController/GetOrderByIdentity may show different content for anonymous vs authenticated users - ensure both paths are tested", + "State-dependent endpoint OrdersController/CreateOrder may show different content for anonymous vs authenticated users - ensure both paths are tested", + "State-dependent endpoint OrdersController/CreatePayment may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for OrdersController/GetOrderPayments: Authenticated, Authenticated_Admin", + "State-dependent endpoint OrdersController/GetOrderPayments may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for OrdersController/GetPaymentStatus: Authenticated, Authenticated_Admin", + "State-dependent endpoint OrdersController/GetPaymentStatus may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for OrdersController/CancelOrder: Authenticated, Authenticated_Admin", + "State-dependent endpoint OrdersController/CancelOrder may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for OrdersController/PaymentWebhook: Authenticated, Authenticated_Admin", + "State-dependent endpoint OrdersController/PaymentWebhook may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for TestController/CreateTestProduct: Authenticated, Authenticated_Admin", + "State-dependent endpoint TestController/CreateTestProduct may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for TestController/SetupTestData: Authenticated, Authenticated_Admin", + "Untested authentication states for AccountController/Login: Authenticated, Authenticated_Admin", + "State-dependent endpoint AccountController/Login may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for AccountController/Login: Authenticated, Authenticated_Admin", + "State-dependent endpoint AccountController/Login may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for AccountController/Logout: Authenticated_Admin", + "Untested authentication states for AccountController/AccessDenied: Authenticated, Authenticated_Admin", + "State-dependent endpoint AccountController/AccessDenied may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for BotsController/Index: Authenticated, Authenticated_Admin", + "Untested authentication states for BotsController/Details: Authenticated, Authenticated_Admin", + "Untested authentication states for BotsController/Create: Authenticated, Authenticated_Admin", + "State-dependent endpoint BotsController/Create may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for BotsController/Wizard: Authenticated, Authenticated_Admin", + "Untested authentication states for BotsController/Wizard: Authenticated, Authenticated_Admin", + "Untested authentication states for BotsController/CompleteWizard: Authenticated, Authenticated_Admin", + "Untested authentication states for BotsController/Create: Authenticated, Authenticated_Admin", + "State-dependent endpoint BotsController/Create may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for BotsController/Edit: Authenticated, Authenticated_Admin", + "State-dependent endpoint BotsController/Edit may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for BotsController/Edit: Authenticated, Authenticated_Admin", + "State-dependent endpoint BotsController/Edit may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for BotsController/Metrics: Authenticated, Authenticated_Admin", + "Untested authentication states for BotsController/Delete: Authenticated, Authenticated_Admin", + "State-dependent endpoint BotsController/Delete may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for BotsController/Suspend: Authenticated, Authenticated_Admin", + "Untested authentication states for BotsController/Activate: Authenticated, Authenticated_Admin", + "Untested authentication states for BotsController/RegenerateKey: Authenticated, Authenticated_Admin", + "Untested authentication states for CategoriesController/Index: Authenticated, Authenticated_Admin", + "Untested authentication states for CategoriesController/Create: Authenticated, Authenticated_Admin", + "State-dependent endpoint CategoriesController/Create may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for CategoriesController/Create: Authenticated, Authenticated_Admin", + "State-dependent endpoint CategoriesController/Create may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for CategoriesController/Edit: Authenticated, Authenticated_Admin", + "State-dependent endpoint CategoriesController/Edit may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for CategoriesController/Edit: Authenticated, Authenticated_Admin", + "State-dependent endpoint CategoriesController/Edit may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for CategoriesController/Delete: Authenticated, Authenticated_Admin", + "State-dependent endpoint CategoriesController/Delete may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for DashboardController/Index: Authenticated, Authenticated_Admin", + "State-dependent endpoint DashboardController/Index may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for MessagesController/Index: Authenticated, Authenticated_Admin", + "Untested authentication states for MessagesController/Customer: Authenticated, Authenticated_Admin", + "Untested authentication states for MessagesController/Reply: Authenticated, Authenticated_Admin", + "Untested authentication states for OrdersController/Index: Authenticated, Authenticated_Admin", + "State-dependent endpoint OrdersController/Index may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for OrdersController/Details: Authenticated, Authenticated_Admin", + "State-dependent endpoint OrdersController/Details may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for OrdersController/Create: Authenticated, Authenticated_Admin", + "State-dependent endpoint OrdersController/Create may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for OrdersController/Create: Authenticated, Authenticated_Admin", + "State-dependent endpoint OrdersController/Create may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for OrdersController/Edit: Authenticated, Authenticated_Admin", + "State-dependent endpoint OrdersController/Edit may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for OrdersController/Edit: Authenticated, Authenticated_Admin", + "State-dependent endpoint OrdersController/Edit may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for OrdersController/UpdateStatus: Authenticated, Authenticated_Admin", + "State-dependent endpoint OrdersController/UpdateStatus may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for ProductsController/Index: Authenticated, Authenticated_Admin", + "Untested authentication states for ProductsController/Create: Authenticated, Authenticated_Admin", + "State-dependent endpoint ProductsController/Create may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for ProductsController/Create: Authenticated, Authenticated_Admin", + "State-dependent endpoint ProductsController/Create may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for ProductsController/Edit: Authenticated, Authenticated_Admin", + "State-dependent endpoint ProductsController/Edit may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for ProductsController/Edit: Authenticated, Authenticated_Admin", + "State-dependent endpoint ProductsController/Edit may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for ProductsController/UploadPhoto: Authenticated, Authenticated_Admin", + "Untested authentication states for ProductsController/DeletePhoto: Authenticated, Authenticated_Admin", + "State-dependent endpoint ProductsController/DeletePhoto may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for ProductsController/Delete: Authenticated, Authenticated_Admin", + "State-dependent endpoint ProductsController/Delete may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for ShippingRatesController/Index: Authenticated, Authenticated_Admin", + "Untested authentication states for ShippingRatesController/Create: Authenticated, Authenticated_Admin", + "State-dependent endpoint ShippingRatesController/Create may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for ShippingRatesController/Create: Authenticated, Authenticated_Admin", + "State-dependent endpoint ShippingRatesController/Create may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for ShippingRatesController/Edit: Authenticated, Authenticated_Admin", + "State-dependent endpoint ShippingRatesController/Edit may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for ShippingRatesController/Edit: Authenticated, Authenticated_Admin", + "State-dependent endpoint ShippingRatesController/Edit may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for ShippingRatesController/Delete: Authenticated, Authenticated_Admin", + "State-dependent endpoint ShippingRatesController/Delete may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for UsersController/Index: Authenticated, Authenticated_Admin", + "Untested authentication states for UsersController/Create: Authenticated, Authenticated_Admin", + "State-dependent endpoint UsersController/Create may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for UsersController/Create: Authenticated, Authenticated_Admin", + "State-dependent endpoint UsersController/Create may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for UsersController/Edit: Authenticated, Authenticated_Admin", + "State-dependent endpoint UsersController/Edit may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for UsersController/Edit: Authenticated, Authenticated_Admin", + "State-dependent endpoint UsersController/Edit may show different content for anonymous vs authenticated users - ensure both paths are tested", + "Untested authentication states for UsersController/Delete: Authenticated, Authenticated_Admin", + "State-dependent endpoint UsersController/Delete may show different content for anonymous vs authenticated users - ensure both paths are tested" + ], + "Recommendations": [ + "High number of testing gaps detected - prioritize implementing missing authentication tests", + "Generate automated integration tests using TestAgent.TestGenerator for comprehensive coverage" + ] +} \ No newline at end of file diff --git a/LittleShop/TestAgent_Results/coverage_analysis.json b/LittleShop/TestAgent_Results/coverage_analysis.json new file mode 100644 index 0000000..8912414 --- /dev/null +++ b/LittleShop/TestAgent_Results/coverage_analysis.json @@ -0,0 +1,6861 @@ +{ + "EndpointCoverage": [ + { + "Endpoint": "api/Auth/login", + "Controller": "Auth", + "Action": "Login", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/bot/messages/pending", + "Controller": "BotMessages", + "Action": "GetPendingMessages", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [], + "CoveragePercentage": 40 + }, + { + "Endpoint": "api/bot/messages/{id}/mark-sent", + "Controller": "BotMessages", + "Action": "MarkMessageAsSent", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/bot/messages/{id}/mark-failed", + "Controller": "BotMessages", + "Action": "MarkMessageAsFailed", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/bot/messages/test-create", + "Controller": "BotMessages", + "Action": "CreateTestMessage", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/bot/messages/customer-create", + "Controller": "BotMessages", + "Action": "CreateCustomerMessage", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/bot/messages/customer/{customerId}", + "Controller": "BotMessages", + "Action": "GetCustomerMessages", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/Bots/register", + "Controller": "Bots", + "Action": "RegisterBot", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/Bots/authenticate", + "Controller": "Bots", + "Action": "AuthenticateBot", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/Bots/settings", + "Controller": "Bots", + "Action": "GetBotSettings", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [], + "CoveragePercentage": 40 + }, + { + "Endpoint": "api/Bots/settings", + "Controller": "Bots", + "Action": "UpdateBotSettings", + "HttpMethods": [ + "PUT" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/Bots/heartbeat", + "Controller": "Bots", + "Action": "RecordHeartbeat", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/Bots/platform-info", + "Controller": "Bots", + "Action": "UpdatePlatformInfo", + "HttpMethods": [ + "PUT" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/Bots/metrics", + "Controller": "Bots", + "Action": "RecordMetric", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/Bots/metrics/batch", + "Controller": "Bots", + "Action": "RecordMetricsBatch", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/Bots/sessions/start", + "Controller": "Bots", + "Action": "StartSession", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/Bots/sessions/{sessionId}", + "Controller": "Bots", + "Action": "UpdateSession", + "HttpMethods": [ + "PUT" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/Bots/sessions/{sessionId}/end", + "Controller": "Bots", + "Action": "EndSession", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/Bots/GetAllBots", + "Controller": "Bots", + "Action": "GetAllBots", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated", + "Authenticated_Admin" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [ + "Admin" + ], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Role-Based Authorization Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/Bots/{id}", + "Controller": "Bots", + "Action": "GetBot", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated", + "Authenticated_Admin" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [ + "Admin" + ], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test", + "Role-Based Authorization Test" + ], + "CoveragePercentage": 0 + }, + { + "Endpoint": "api/Bots/{id}/metrics", + "Controller": "Bots", + "Action": "GetBotMetrics", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated", + "Authenticated_Admin" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [ + "Admin" + ], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test", + "Role-Based Authorization Test" + ], + "CoveragePercentage": 0 + }, + { + "Endpoint": "api/Bots/{id}/metrics/summary", + "Controller": "Bots", + "Action": "GetMetricsSummary", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated", + "Authenticated_Admin" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [ + "Admin" + ], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test", + "Role-Based Authorization Test" + ], + "CoveragePercentage": 0 + }, + { + "Endpoint": "api/Bots/{id}/sessions", + "Controller": "Bots", + "Action": "GetBotSessions", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated", + "Authenticated_Admin" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [ + "Admin" + ], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test", + "Role-Based Authorization Test" + ], + "CoveragePercentage": 0 + }, + { + "Endpoint": "api/Bots/{id}", + "Controller": "Bots", + "Action": "DeleteBot", + "HttpMethods": [ + "DELETE" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated", + "Authenticated_Admin" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [ + "Admin" + ], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test", + "Role-Based Authorization Test" + ], + "CoveragePercentage": 0 + }, + { + "Endpoint": "api/Catalog/categories", + "Controller": "Catalog", + "Action": "GetCategories", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [], + "CoveragePercentage": 40 + }, + { + "Endpoint": "api/Catalog/categories/{id}", + "Controller": "Catalog", + "Action": "GetCategory", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/Catalog/products", + "Controller": "Catalog", + "Action": "GetProducts", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [], + "CoveragePercentage": 40 + }, + { + "Endpoint": "api/Catalog/products/{id}", + "Controller": "Catalog", + "Action": "GetProduct", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/Customers/GetCustomers", + "Controller": "Customers", + "Action": "GetCustomers", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test" + ], + "CoveragePercentage": 30.000000000000004 + }, + { + "Endpoint": "api/Customers/{id}", + "Controller": "Customers", + "Action": "GetCustomer", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Customers/by-telegram/{telegramUserId}", + "Controller": "Customers", + "Action": "GetCustomerByTelegramId", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Customers/CreateCustomer", + "Controller": "Customers", + "Action": "CreateCustomer", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Customers/get-or-create", + "Controller": "Customers", + "Action": "GetOrCreateCustomer", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test", + "State-Dependent Content Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Customers/{id}", + "Controller": "Customers", + "Action": "UpdateCustomer", + "HttpMethods": [ + "PUT" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Customers/{id}/block", + "Controller": "Customers", + "Action": "BlockCustomer", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Customers/{id}/unblock", + "Controller": "Customers", + "Action": "UnblockCustomer", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Customers/{id}", + "Controller": "Customers", + "Action": "DeleteCustomer", + "HttpMethods": [ + "DELETE" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Home/Index", + "Controller": "Home", + "Action": "Index", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [], + "CoveragePercentage": 40 + }, + { + "Endpoint": "api/Messages/SendMessage", + "Controller": "Messages", + "Action": "SendMessage", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Messages/{id}", + "Controller": "Messages", + "Action": "GetMessage", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Messages/customer/{customerId}", + "Controller": "Messages", + "Action": "GetCustomerMessages", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Messages/order/{orderId}", + "Controller": "Messages", + "Action": "GetOrderMessages", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Messages/pending", + "Controller": "Messages", + "Action": "GetPendingMessages", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [], + "CoveragePercentage": 40 + }, + { + "Endpoint": "api/Messages/{id}/mark-sent", + "Controller": "Messages", + "Action": "MarkMessageAsSent", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/Messages/{id}/mark-delivered", + "Controller": "Messages", + "Action": "MarkMessageAsDelivered", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Messages/{id}/mark-failed", + "Controller": "Messages", + "Action": "MarkMessageAsFailed", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/Orders/GetAllOrders", + "Controller": "Orders", + "Action": "GetAllOrders", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated", + "Authenticated_Admin" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [ + "Admin" + ], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Role-Based Authorization Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/Orders/{id}", + "Controller": "Orders", + "Action": "GetOrder", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated", + "Authenticated_Admin" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [ + "Admin" + ], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test", + "Role-Based Authorization Test" + ], + "CoveragePercentage": 0 + }, + { + "Endpoint": "api/Orders/{id}/status", + "Controller": "Orders", + "Action": "UpdateOrderStatus", + "HttpMethods": [ + "PUT" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated", + "Authenticated_Admin" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [ + "Admin" + ], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test", + "Role-Based Authorization Test" + ], + "CoveragePercentage": 0 + }, + { + "Endpoint": "api/Orders/by-identity/{identityReference}", + "Controller": "Orders", + "Action": "GetOrdersByIdentity", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test", + "State-Dependent Content Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Orders/by-customer/{customerId}", + "Controller": "Orders", + "Action": "GetOrdersByCustomerId", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test", + "State-Dependent Content Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Orders/by-identity/{identityReference}/{id}", + "Controller": "Orders", + "Action": "GetOrderByIdentity", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test", + "State-Dependent Content Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Orders/CreateOrder", + "Controller": "Orders", + "Action": "CreateOrder", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test", + "State-Dependent Content Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Orders/{id}/payments", + "Controller": "Orders", + "Action": "CreatePayment", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test", + "State-Dependent Content Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Orders/{id}/payments", + "Controller": "Orders", + "Action": "GetOrderPayments", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Orders/payments/{paymentId}/status", + "Controller": "Orders", + "Action": "GetPaymentStatus", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Orders/{id}/cancel", + "Controller": "Orders", + "Action": "CancelOrder", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Orders/payments/webhook", + "Controller": "Orders", + "Action": "PaymentWebhook", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Test/create-product", + "Controller": "Test", + "Action": "CreateTestProduct", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [], + "CoveragePercentage": 40 + }, + { + "Endpoint": "api/Test/setup-test-data", + "Controller": "Test", + "Action": "SetupTestData", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [], + "CoveragePercentage": 40 + }, + { + "Endpoint": "api/Account/Login", + "Controller": "Account", + "Action": "Login", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [], + "CoveragePercentage": 40 + }, + { + "Endpoint": "api/Account/Login", + "Controller": "Account", + "Action": "Login", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 20 + }, + { + "Endpoint": "api/Account/Logout", + "Controller": "Account", + "Action": "Logout", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test" + ], + "CoveragePercentage": 30.000000000000004 + }, + { + "Endpoint": "api/Account/AccessDenied", + "Controller": "Account", + "Action": "AccessDenied", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Anonymous" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [], + "CoveragePercentage": 40 + }, + { + "Endpoint": "api/Bots/Index", + "Controller": "Bots", + "Action": "Index", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test" + ], + "CoveragePercentage": 30.000000000000004 + }, + { + "Endpoint": "api/Bots/Details", + "Controller": "Bots", + "Action": "Details", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Bots/Create", + "Controller": "Bots", + "Action": "Create", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test" + ], + "CoveragePercentage": 30.000000000000004 + }, + { + "Endpoint": "api/Bots/Wizard", + "Controller": "Bots", + "Action": "Wizard", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test" + ], + "CoveragePercentage": 30.000000000000004 + }, + { + "Endpoint": "api/Bots/Wizard", + "Controller": "Bots", + "Action": "Wizard", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Bots/CompleteWizard", + "Controller": "Bots", + "Action": "CompleteWizard", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Bots/Create", + "Controller": "Bots", + "Action": "Create", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Bots/Edit", + "Controller": "Bots", + "Action": "Edit", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Bots/Edit", + "Controller": "Bots", + "Action": "Edit", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Bots/Metrics", + "Controller": "Bots", + "Action": "Metrics", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Bots/Delete", + "Controller": "Bots", + "Action": "Delete", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Bots/Suspend", + "Controller": "Bots", + "Action": "Suspend", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Bots/Activate", + "Controller": "Bots", + "Action": "Activate", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Bots/RegenerateKey", + "Controller": "Bots", + "Action": "RegenerateKey", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Categories/Index", + "Controller": "Categories", + "Action": "Index", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test" + ], + "CoveragePercentage": 30.000000000000004 + }, + { + "Endpoint": "api/Categories/Create", + "Controller": "Categories", + "Action": "Create", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test" + ], + "CoveragePercentage": 30.000000000000004 + }, + { + "Endpoint": "api/Categories/Create", + "Controller": "Categories", + "Action": "Create", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Categories/Edit", + "Controller": "Categories", + "Action": "Edit", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Categories/Edit", + "Controller": "Categories", + "Action": "Edit", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Categories/Delete", + "Controller": "Categories", + "Action": "Delete", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Dashboard/Index", + "Controller": "Dashboard", + "Action": "Index", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test" + ], + "CoveragePercentage": 30.000000000000004 + }, + { + "Endpoint": "api/Messages/Index", + "Controller": "Messages", + "Action": "Index", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test" + ], + "CoveragePercentage": 30.000000000000004 + }, + { + "Endpoint": "api/Messages/Customer", + "Controller": "Messages", + "Action": "Customer", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Messages/Reply", + "Controller": "Messages", + "Action": "Reply", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Orders/Index", + "Controller": "Orders", + "Action": "Index", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test" + ], + "CoveragePercentage": 30.000000000000004 + }, + { + "Endpoint": "api/Orders/Details", + "Controller": "Orders", + "Action": "Details", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Orders/Create", + "Controller": "Orders", + "Action": "Create", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test" + ], + "CoveragePercentage": 30.000000000000004 + }, + { + "Endpoint": "api/Orders/Create", + "Controller": "Orders", + "Action": "Create", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Orders/Edit", + "Controller": "Orders", + "Action": "Edit", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Orders/Edit", + "Controller": "Orders", + "Action": "Edit", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Orders/UpdateStatus", + "Controller": "Orders", + "Action": "UpdateStatus", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Products/Index", + "Controller": "Products", + "Action": "Index", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test" + ], + "CoveragePercentage": 30.000000000000004 + }, + { + "Endpoint": "api/Products/Create", + "Controller": "Products", + "Action": "Create", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test" + ], + "CoveragePercentage": 30.000000000000004 + }, + { + "Endpoint": "api/Products/Create", + "Controller": "Products", + "Action": "Create", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Products/Edit", + "Controller": "Products", + "Action": "Edit", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Products/Edit", + "Controller": "Products", + "Action": "Edit", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Products/UploadPhoto", + "Controller": "Products", + "Action": "UploadPhoto", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Products/DeletePhoto", + "Controller": "Products", + "Action": "DeletePhoto", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Products/Delete", + "Controller": "Products", + "Action": "Delete", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/ShippingRates/Index", + "Controller": "ShippingRates", + "Action": "Index", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test" + ], + "CoveragePercentage": 30.000000000000004 + }, + { + "Endpoint": "api/ShippingRates/Create", + "Controller": "ShippingRates", + "Action": "Create", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test" + ], + "CoveragePercentage": 30.000000000000004 + }, + { + "Endpoint": "api/ShippingRates/Create", + "Controller": "ShippingRates", + "Action": "Create", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/ShippingRates/Edit", + "Controller": "ShippingRates", + "Action": "Edit", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/ShippingRates/Edit", + "Controller": "ShippingRates", + "Action": "Edit", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/ShippingRates/Delete", + "Controller": "ShippingRates", + "Action": "Delete", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Users/Index", + "Controller": "Users", + "Action": "Index", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test" + ], + "CoveragePercentage": 30.000000000000004 + }, + { + "Endpoint": "api/Users/Create", + "Controller": "Users", + "Action": "Create", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test" + ], + "CoveragePercentage": 30.000000000000004 + }, + { + "Endpoint": "api/Users/Create", + "Controller": "Users", + "Action": "Create", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Users/Edit", + "Controller": "Users", + "Action": "Edit", + "HttpMethods": [ + "GET" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Users/Edit", + "Controller": "Users", + "Action": "Edit", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + }, + { + "Endpoint": "api/Users/Delete", + "Controller": "Users", + "Action": "Delete", + "HttpMethods": [ + "POST" + ], + "TestedStates": [], + "UntestedStates": [ + "Authenticated" + ], + "HasUnauthorizedTest": false, + "HasValidDataTest": false, + "HasInvalidDataTest": false, + "HasRoleBasedTests": false, + "RequiredRoles": [], + "MissingTestTypes": [ + "Unauthorized Access Test", + "Valid Data Test", + "Invalid Data Test" + ], + "CoveragePercentage": 10 + } + ], + "AuthenticationScenarios": [ + { + "ScenarioName": "Login Flow", + "FromState": "Anonymous", + "ToState": "Authenticated", + "RequiredEndpoints": [ + "AuthController/Login" + ], + "IsTested": false, + "TestDescription": "User should be able to transition from Anonymous to Authenticated via login endpoint" + }, + { + "ScenarioName": "Register Flow", + "FromState": "Anonymous", + "ToState": "Authenticated", + "RequiredEndpoints": [ + "BotsController/RegisterBot" + ], + "IsTested": false, + "TestDescription": "User should be able to transition from Anonymous to Authenticated via registration endpoint" + }, + { + "ScenarioName": "Login Flow", + "FromState": "Anonymous", + "ToState": "Authenticated", + "RequiredEndpoints": [ + "BotsController/AuthenticateBot" + ], + "IsTested": false, + "TestDescription": "User should be able to transition from Anonymous to Authenticated via login endpoint" + }, + { + "ScenarioName": "Login Flow", + "FromState": "Anonymous", + "ToState": "Authenticated", + "RequiredEndpoints": [ + "AccountController/Login" + ], + "IsTested": false, + "TestDescription": "User should be able to transition from Anonymous to Authenticated via login endpoint" + }, + { + "ScenarioName": "Login Flow", + "FromState": "Anonymous", + "ToState": "Authenticated", + "RequiredEndpoints": [ + "AccountController/Login" + ], + "IsTested": false, + "TestDescription": "User should be able to transition from Anonymous to Authenticated via login endpoint" + }, + { + "ScenarioName": "Logout Flow", + "FromState": "Authenticated", + "ToState": "Anonymous", + "RequiredEndpoints": [ + "AccountController/Logout" + ], + "IsTested": false, + "TestDescription": "User should be able to transition from Authenticated to Anonymous via logout endpoint" + }, + { + "ScenarioName": "Logout Flow", + "FromState": "Authenticated_Admin", + "ToState": "Anonymous", + "RequiredEndpoints": [ + "AccountController/Logout" + ], + "IsTested": false, + "TestDescription": "User should be able to transition from Authenticated_Admin to Anonymous via logout endpoint" + }, + { + "ScenarioName": "Session Timeout", + "FromState": "Authenticated", + "ToState": "Anonymous", + "RequiredEndpoints": [], + "IsTested": false, + "TestDescription": "Verify that expired sessions are handled correctly and user is redirected to login" + }, + { + "ScenarioName": "Concurrent Sessions", + "FromState": "Authenticated", + "ToState": "Authenticated", + "RequiredEndpoints": [], + "IsTested": false, + "TestDescription": "Test behavior when same user logs in from multiple locations" + }, + { + "ScenarioName": "Role Switching", + "FromState": "Authenticated_User", + "ToState": "Authenticated_Admin", + "RequiredEndpoints": [], + "IsTested": false, + "TestDescription": "Verify that role changes are reflected in endpoint accessibility" + } + ], + "IdentifiedGaps": [ + { + "GapType": "Low Coverage", + "Endpoint": "api/Auth/login", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/bot/messages/pending", + "Description": "Endpoint has only 40.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/bot/messages/{id}/mark-sent", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/bot/messages/{id}/mark-failed", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/bot/messages/test-create", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/bot/messages/customer-create", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/bot/messages/customer/{customerId}", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/register", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/authenticate", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/settings", + "Description": "Endpoint has only 40.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/settings", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/heartbeat", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/platform-info", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/metrics", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/metrics/batch", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/sessions/start", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/sessions/{sessionId}", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/sessions/{sessionId}/end", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/GetAllBots", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "GapType": "Missing Authorization Test", + "Endpoint": "api/Bots/GetAllBots", + "Description": "Protected endpoint lacks unauthorized access test", + "Severity": "Critical", + "Recommendation": "Add test to verify 401/403 response for unauthorized access", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/{id}", + "Description": "Endpoint has only 0.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "GapType": "Missing Authorization Test", + "Endpoint": "api/Bots/{id}", + "Description": "Protected endpoint lacks unauthorized access test", + "Severity": "Critical", + "Recommendation": "Add test to verify 401/403 response for unauthorized access", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/{id}/metrics", + "Description": "Endpoint has only 0.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "GapType": "Missing Authorization Test", + "Endpoint": "api/Bots/{id}/metrics", + "Description": "Protected endpoint lacks unauthorized access test", + "Severity": "Critical", + "Recommendation": "Add test to verify 401/403 response for unauthorized access", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/{id}/metrics/summary", + "Description": "Endpoint has only 0.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "GapType": "Missing Authorization Test", + "Endpoint": "api/Bots/{id}/metrics/summary", + "Description": "Protected endpoint lacks unauthorized access test", + "Severity": "Critical", + "Recommendation": "Add test to verify 401/403 response for unauthorized access", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/{id}/sessions", + "Description": "Endpoint has only 0.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "GapType": "Missing Authorization Test", + "Endpoint": "api/Bots/{id}/sessions", + "Description": "Protected endpoint lacks unauthorized access test", + "Severity": "Critical", + "Recommendation": "Add test to verify 401/403 response for unauthorized access", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/{id}", + "Description": "Endpoint has only 0.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "GapType": "Missing Authorization Test", + "Endpoint": "api/Bots/{id}", + "Description": "Protected endpoint lacks unauthorized access test", + "Severity": "Critical", + "Recommendation": "Add test to verify 401/403 response for unauthorized access", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Catalog/categories", + "Description": "Endpoint has only 40.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Catalog/categories/{id}", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Catalog/products", + "Description": "Endpoint has only 40.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Catalog/products/{id}", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Customers/GetCustomers", + "Description": "Endpoint has only 30.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Customers/{id}", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Customers/by-telegram/{telegramUserId}", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Customers/CreateCustomer", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Customers/get-or-create", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "State-Dependent Logic", + "Endpoint": "api/Customers/get-or-create", + "Description": "Endpoint may show different content based on authentication state", + "Severity": "Warning", + "Recommendation": "Test endpoint with different authentication states to verify content differences", + "AffectedStates": [ + "Anonymous", + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Customers/{id}", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Customers/{id}/block", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Customers/{id}/unblock", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Customers/{id}", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Home/Index", + "Description": "Endpoint has only 40.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Messages/SendMessage", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Messages/{id}", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Messages/customer/{customerId}", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Messages/order/{orderId}", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Messages/pending", + "Description": "Endpoint has only 40.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Messages/{id}/mark-sent", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Messages/{id}/mark-delivered", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Messages/{id}/mark-failed", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Orders/GetAllOrders", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "GapType": "Missing Authorization Test", + "Endpoint": "api/Orders/GetAllOrders", + "Description": "Protected endpoint lacks unauthorized access test", + "Severity": "Critical", + "Recommendation": "Add test to verify 401/403 response for unauthorized access", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Orders/{id}", + "Description": "Endpoint has only 0.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "GapType": "Missing Authorization Test", + "Endpoint": "api/Orders/{id}", + "Description": "Protected endpoint lacks unauthorized access test", + "Severity": "Critical", + "Recommendation": "Add test to verify 401/403 response for unauthorized access", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Orders/{id}/status", + "Description": "Endpoint has only 0.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated", + "Authenticated_Admin" + ] + }, + { + "GapType": "Missing Authorization Test", + "Endpoint": "api/Orders/{id}/status", + "Description": "Protected endpoint lacks unauthorized access test", + "Severity": "Critical", + "Recommendation": "Add test to verify 401/403 response for unauthorized access", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Orders/by-identity/{identityReference}", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "State-Dependent Logic", + "Endpoint": "api/Orders/by-identity/{identityReference}", + "Description": "Endpoint may show different content based on authentication state", + "Severity": "Warning", + "Recommendation": "Test endpoint with different authentication states to verify content differences", + "AffectedStates": [ + "Anonymous", + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Orders/by-customer/{customerId}", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "State-Dependent Logic", + "Endpoint": "api/Orders/by-customer/{customerId}", + "Description": "Endpoint may show different content based on authentication state", + "Severity": "Warning", + "Recommendation": "Test endpoint with different authentication states to verify content differences", + "AffectedStates": [ + "Anonymous", + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Orders/by-identity/{identityReference}/{id}", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "State-Dependent Logic", + "Endpoint": "api/Orders/by-identity/{identityReference}/{id}", + "Description": "Endpoint may show different content based on authentication state", + "Severity": "Warning", + "Recommendation": "Test endpoint with different authentication states to verify content differences", + "AffectedStates": [ + "Anonymous", + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Orders/CreateOrder", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "State-Dependent Logic", + "Endpoint": "api/Orders/CreateOrder", + "Description": "Endpoint may show different content based on authentication state", + "Severity": "Warning", + "Recommendation": "Test endpoint with different authentication states to verify content differences", + "AffectedStates": [ + "Anonymous", + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Orders/{id}/payments", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "State-Dependent Logic", + "Endpoint": "api/Orders/{id}/payments", + "Description": "Endpoint may show different content based on authentication state", + "Severity": "Warning", + "Recommendation": "Test endpoint with different authentication states to verify content differences", + "AffectedStates": [ + "Anonymous", + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Orders/{id}/payments", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Orders/payments/{paymentId}/status", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Orders/{id}/cancel", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Orders/payments/webhook", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Test/create-product", + "Description": "Endpoint has only 40.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Test/setup-test-data", + "Description": "Endpoint has only 40.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Account/Login", + "Description": "Endpoint has only 40.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Account/Login", + "Description": "Endpoint has only 20.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Account/Logout", + "Description": "Endpoint has only 30.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Account/AccessDenied", + "Description": "Endpoint has only 40.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Anonymous" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/Index", + "Description": "Endpoint has only 30.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/Details", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/Create", + "Description": "Endpoint has only 30.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/Wizard", + "Description": "Endpoint has only 30.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/Wizard", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/CompleteWizard", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/Create", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/Edit", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/Edit", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/Metrics", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/Delete", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/Suspend", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/Activate", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Bots/RegenerateKey", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Categories/Index", + "Description": "Endpoint has only 30.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Categories/Create", + "Description": "Endpoint has only 30.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Categories/Create", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Categories/Edit", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Categories/Edit", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Categories/Delete", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Dashboard/Index", + "Description": "Endpoint has only 30.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Messages/Index", + "Description": "Endpoint has only 30.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Messages/Customer", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Messages/Reply", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Orders/Index", + "Description": "Endpoint has only 30.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Orders/Details", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Orders/Create", + "Description": "Endpoint has only 30.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Orders/Create", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Orders/Edit", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Orders/Edit", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Orders/UpdateStatus", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Products/Index", + "Description": "Endpoint has only 30.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Products/Create", + "Description": "Endpoint has only 30.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Products/Create", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Products/Edit", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Products/Edit", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Products/UploadPhoto", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Products/DeletePhoto", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Products/Delete", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/ShippingRates/Index", + "Description": "Endpoint has only 30.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/ShippingRates/Create", + "Description": "Endpoint has only 30.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/ShippingRates/Create", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/ShippingRates/Edit", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/ShippingRates/Edit", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/ShippingRates/Delete", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Users/Index", + "Description": "Endpoint has only 30.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Users/Create", + "Description": "Endpoint has only 30.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Users/Create", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Users/Edit", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Users/Edit", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Low Coverage", + "Endpoint": "api/Users/Delete", + "Description": "Endpoint has only 10.0% test coverage", + "Severity": "Critical", + "Recommendation": "Implement comprehensive test suite covering all authentication states and data scenarios", + "AffectedStates": [ + "Authenticated" + ] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Auth/login", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/bot/messages/{id}/mark-sent", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/bot/messages/{id}/mark-failed", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/bot/messages/test-create", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/bot/messages/customer-create", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/bot/messages/customer/{customerId}", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/register", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/authenticate", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/settings", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/heartbeat", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/platform-info", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/metrics", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/metrics/batch", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/sessions/start", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/sessions/{sessionId}", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/sessions/{sessionId}/end", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/{id}", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/{id}/metrics", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/{id}/metrics/summary", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/{id}/sessions", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/{id}", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Catalog/categories/{id}", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Catalog/products/{id}", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Customers/{id}", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Customers/by-telegram/{telegramUserId}", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Customers/CreateCustomer", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Customers/get-or-create", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Customers/{id}", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Customers/{id}/block", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Customers/{id}/unblock", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Customers/{id}", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Messages/SendMessage", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Messages/{id}", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Messages/customer/{customerId}", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Messages/order/{orderId}", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Messages/{id}/mark-sent", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Messages/{id}/mark-delivered", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Messages/{id}/mark-failed", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Orders/{id}", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Orders/{id}/status", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Orders/by-identity/{identityReference}", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Orders/by-customer/{customerId}", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Orders/by-identity/{identityReference}/{id}", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Orders/CreateOrder", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Orders/{id}/payments", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Orders/{id}/payments", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Orders/payments/{paymentId}/status", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Orders/{id}/cancel", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Orders/payments/webhook", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Account/Login", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Account/Login", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/Details", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/Create", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/Wizard", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/Wizard", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/CompleteWizard", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/Create", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/Edit", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/Edit", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/Metrics", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/Delete", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/Suspend", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/Activate", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Bots/RegenerateKey", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Categories/Create", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Categories/Create", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Categories/Edit", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Categories/Edit", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Categories/Delete", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Messages/Customer", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Messages/Reply", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Orders/Details", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Orders/Create", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Orders/Create", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Orders/Edit", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Orders/Edit", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Orders/UpdateStatus", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Products/Create", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Products/Create", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Products/Edit", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Products/Edit", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Products/UploadPhoto", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Products/DeletePhoto", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Products/Delete", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/ShippingRates/Create", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/ShippingRates/Create", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/ShippingRates/Edit", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/ShippingRates/Edit", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/ShippingRates/Delete", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Users/Create", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Users/Create", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Users/Edit", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Users/Edit", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + }, + { + "GapType": "Data Validation", + "Endpoint": "api/Users/Delete", + "Description": "Endpoint with complex parameters lacks comprehensive data validation tests", + "Severity": "Warning", + "Recommendation": "Add tests for both valid and invalid data scenarios, including edge cases", + "AffectedStates": [] + } + ], + "SuggestedTests": [ + { + "TestName": "Auth_Login_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Auth/login", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Auth_Login_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Auth/login\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Auth_Login_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Auth/login", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Auth_Login_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Auth/login\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "BotMessages_MarkMessageAsSent_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/bot/messages/{id}/mark-sent", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task BotMessages_MarkMessageAsSent_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/bot/messages/{id}/mark-sent\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "BotMessages_MarkMessageAsSent_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/bot/messages/{id}/mark-sent", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task BotMessages_MarkMessageAsSent_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/bot/messages/{id}/mark-sent\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "BotMessages_MarkMessageAsFailed_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/bot/messages/{id}/mark-failed", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task BotMessages_MarkMessageAsFailed_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/bot/messages/{id}/mark-failed\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "BotMessages_MarkMessageAsFailed_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/bot/messages/{id}/mark-failed", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task BotMessages_MarkMessageAsFailed_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/bot/messages/{id}/mark-failed\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "BotMessages_CreateTestMessage_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/bot/messages/test-create", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task BotMessages_CreateTestMessage_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/bot/messages/test-create\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "BotMessages_CreateTestMessage_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/bot/messages/test-create", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task BotMessages_CreateTestMessage_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/bot/messages/test-create\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "BotMessages_CreateCustomerMessage_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/bot/messages/customer-create", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task BotMessages_CreateCustomerMessage_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/bot/messages/customer-create\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "BotMessages_CreateCustomerMessage_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/bot/messages/customer-create", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task BotMessages_CreateCustomerMessage_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/bot/messages/customer-create\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "BotMessages_GetCustomerMessages_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/bot/messages/customer/{customerId}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task BotMessages_GetCustomerMessages_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/bot/messages/customer/{customerId}\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "BotMessages_GetCustomerMessages_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/bot/messages/customer/{customerId}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task BotMessages_GetCustomerMessages_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/bot/messages/customer/{customerId}\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_RegisterBot_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/register", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_RegisterBot_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/register\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_RegisterBot_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/register", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_RegisterBot_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/register\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_AuthenticateBot_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/authenticate", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_AuthenticateBot_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/authenticate\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_AuthenticateBot_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/authenticate", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_AuthenticateBot_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/authenticate\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_UpdateBotSettings_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/settings", + "HttpMethod": "PUT", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_UpdateBotSettings_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/settings\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_UpdateBotSettings_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/settings", + "HttpMethod": "PUT", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_UpdateBotSettings_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/settings\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_RecordHeartbeat_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/heartbeat", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_RecordHeartbeat_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/heartbeat\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_RecordHeartbeat_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/heartbeat", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_RecordHeartbeat_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/heartbeat\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_UpdatePlatformInfo_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/platform-info", + "HttpMethod": "PUT", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_UpdatePlatformInfo_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/platform-info\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_UpdatePlatformInfo_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/platform-info", + "HttpMethod": "PUT", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_UpdatePlatformInfo_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/platform-info\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_RecordMetric_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/metrics", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_RecordMetric_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/metrics\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_RecordMetric_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/metrics", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_RecordMetric_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/metrics\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_RecordMetricsBatch_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/metrics/batch", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_RecordMetricsBatch_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/metrics/batch\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_RecordMetricsBatch_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/metrics/batch", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_RecordMetricsBatch_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/metrics/batch\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_StartSession_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/sessions/start", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_StartSession_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/sessions/start\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_StartSession_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/sessions/start", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_StartSession_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/sessions/start\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_UpdateSession_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/sessions/{sessionId}", + "HttpMethod": "PUT", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_UpdateSession_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/sessions/{sessionId}\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_UpdateSession_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/sessions/{sessionId}", + "HttpMethod": "PUT", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_UpdateSession_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/sessions/{sessionId}\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_EndSession_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/sessions/{sessionId}/end", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_EndSession_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/sessions/{sessionId}/end\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_EndSession_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/sessions/{sessionId}/end", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_EndSession_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/sessions/{sessionId}/end\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_GetAllBots_UnauthorizedAccess", + "TestType": "Authorization", + "Endpoint": "api/Bots/GetAllBots", + "HttpMethod": "GET", + "AuthenticationState": "Anonymous", + "ExpectedOutcome": "401 Unauthorized", + "TestCode": "[Fact]\npublic async Task Bots_GetAllBots_ShouldReturn401_WhenNotAuthenticated()\n{\n // Arrange\n var client = _factory.CreateClient();\n\n // Act\n var response = await client.GetAsync(\u0022api/Bots/GetAllBots\u0022);\n\n // Assert\n Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "Bots_GetAllBots_RequiresRole_Admin", + "TestType": "Authorization", + "Endpoint": "api/Bots/GetAllBots", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated_Admin", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_GetAllBots_ShouldReturn200_WhenUserAdmin()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client, \u0022Admin\u0022);\n\n // Act\n var response = await client.GetAsync(\u0022api/Bots/GetAllBots\u0022);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "Bots_GetBot_UnauthorizedAccess", + "TestType": "Authorization", + "Endpoint": "api/Bots/{id}", + "HttpMethod": "GET", + "AuthenticationState": "Anonymous", + "ExpectedOutcome": "401 Unauthorized", + "TestCode": "[Fact]\npublic async Task Bots_GetBot_ShouldReturn401_WhenNotAuthenticated()\n{\n // Arrange\n var client = _factory.CreateClient();\n\n // Act\n var response = await client.GetAsync(\u0022api/Bots/{id}\u0022);\n\n // Assert\n Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "Bots_GetBot_RequiresRole_Admin", + "TestType": "Authorization", + "Endpoint": "api/Bots/{id}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated_Admin", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_GetBot_ShouldReturn200_WhenUserAdmin()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client, \u0022Admin\u0022);\n\n // Act\n var response = await client.GetAsync(\u0022api/Bots/{id}\u0022);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "Bots_GetBot_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/{id}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_GetBot_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/{id}\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_GetBot_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/{id}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_GetBot_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/{id}\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_GetBotMetrics_UnauthorizedAccess", + "TestType": "Authorization", + "Endpoint": "api/Bots/{id}/metrics", + "HttpMethod": "GET", + "AuthenticationState": "Anonymous", + "ExpectedOutcome": "401 Unauthorized", + "TestCode": "[Fact]\npublic async Task Bots_GetBotMetrics_ShouldReturn401_WhenNotAuthenticated()\n{\n // Arrange\n var client = _factory.CreateClient();\n\n // Act\n var response = await client.GetAsync(\u0022api/Bots/{id}/metrics\u0022);\n\n // Assert\n Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "Bots_GetBotMetrics_RequiresRole_Admin", + "TestType": "Authorization", + "Endpoint": "api/Bots/{id}/metrics", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated_Admin", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_GetBotMetrics_ShouldReturn200_WhenUserAdmin()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client, \u0022Admin\u0022);\n\n // Act\n var response = await client.GetAsync(\u0022api/Bots/{id}/metrics\u0022);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "Bots_GetBotMetrics_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/{id}/metrics", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_GetBotMetrics_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/{id}/metrics\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_GetBotMetrics_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/{id}/metrics", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_GetBotMetrics_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/{id}/metrics\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_GetMetricsSummary_UnauthorizedAccess", + "TestType": "Authorization", + "Endpoint": "api/Bots/{id}/metrics/summary", + "HttpMethod": "GET", + "AuthenticationState": "Anonymous", + "ExpectedOutcome": "401 Unauthorized", + "TestCode": "[Fact]\npublic async Task Bots_GetMetricsSummary_ShouldReturn401_WhenNotAuthenticated()\n{\n // Arrange\n var client = _factory.CreateClient();\n\n // Act\n var response = await client.GetAsync(\u0022api/Bots/{id}/metrics/summary\u0022);\n\n // Assert\n Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "Bots_GetMetricsSummary_RequiresRole_Admin", + "TestType": "Authorization", + "Endpoint": "api/Bots/{id}/metrics/summary", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated_Admin", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_GetMetricsSummary_ShouldReturn200_WhenUserAdmin()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client, \u0022Admin\u0022);\n\n // Act\n var response = await client.GetAsync(\u0022api/Bots/{id}/metrics/summary\u0022);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "Bots_GetMetricsSummary_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/{id}/metrics/summary", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_GetMetricsSummary_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/{id}/metrics/summary\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_GetMetricsSummary_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/{id}/metrics/summary", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_GetMetricsSummary_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/{id}/metrics/summary\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_GetBotSessions_UnauthorizedAccess", + "TestType": "Authorization", + "Endpoint": "api/Bots/{id}/sessions", + "HttpMethod": "GET", + "AuthenticationState": "Anonymous", + "ExpectedOutcome": "401 Unauthorized", + "TestCode": "[Fact]\npublic async Task Bots_GetBotSessions_ShouldReturn401_WhenNotAuthenticated()\n{\n // Arrange\n var client = _factory.CreateClient();\n\n // Act\n var response = await client.GetAsync(\u0022api/Bots/{id}/sessions\u0022);\n\n // Assert\n Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "Bots_GetBotSessions_RequiresRole_Admin", + "TestType": "Authorization", + "Endpoint": "api/Bots/{id}/sessions", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated_Admin", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_GetBotSessions_ShouldReturn200_WhenUserAdmin()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client, \u0022Admin\u0022);\n\n // Act\n var response = await client.GetAsync(\u0022api/Bots/{id}/sessions\u0022);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "Bots_GetBotSessions_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/{id}/sessions", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_GetBotSessions_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/{id}/sessions\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_GetBotSessions_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/{id}/sessions", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_GetBotSessions_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/{id}/sessions\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_DeleteBot_UnauthorizedAccess", + "TestType": "Authorization", + "Endpoint": "api/Bots/{id}", + "HttpMethod": "DELETE", + "AuthenticationState": "Anonymous", + "ExpectedOutcome": "401 Unauthorized", + "TestCode": "[Fact]\npublic async Task Bots_DeleteBot_ShouldReturn401_WhenNotAuthenticated()\n{\n // Arrange\n var client = _factory.CreateClient();\n\n // Act\n var response = await client.GetAsync(\u0022api/Bots/{id}\u0022);\n\n // Assert\n Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "Bots_DeleteBot_RequiresRole_Admin", + "TestType": "Authorization", + "Endpoint": "api/Bots/{id}", + "HttpMethod": "DELETE", + "AuthenticationState": "Authenticated_Admin", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_DeleteBot_ShouldReturn200_WhenUserAdmin()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client, \u0022Admin\u0022);\n\n // Act\n var response = await client.GetAsync(\u0022api/Bots/{id}\u0022);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "Bots_DeleteBot_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/{id}", + "HttpMethod": "DELETE", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_DeleteBot_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/{id}\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_DeleteBot_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/{id}", + "HttpMethod": "DELETE", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_DeleteBot_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/{id}\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Catalog_GetCategory_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Catalog/categories/{id}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Catalog_GetCategory_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Catalog/categories/{id}\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Catalog_GetCategory_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Catalog/categories/{id}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Catalog_GetCategory_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Catalog/categories/{id}\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Catalog_GetProduct_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Catalog/products/{id}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Catalog_GetProduct_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Catalog/products/{id}\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Catalog_GetProduct_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Catalog/products/{id}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Catalog_GetProduct_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Catalog/products/{id}\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Customers_GetCustomer_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Customers/{id}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Customers_GetCustomer_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Customers/{id}\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Customers_GetCustomer_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Customers/{id}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Customers_GetCustomer_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Customers/{id}\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Customers_GetCustomerByTelegramId_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Customers/by-telegram/{telegramUserId}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Customers_GetCustomerByTelegramId_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Customers/by-telegram/{telegramUserId}\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Customers_GetCustomerByTelegramId_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Customers/by-telegram/{telegramUserId}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Customers_GetCustomerByTelegramId_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Customers/by-telegram/{telegramUserId}\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Customers_CreateCustomer_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Customers/CreateCustomer", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Customers_CreateCustomer_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Customers/CreateCustomer\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Customers_CreateCustomer_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Customers/CreateCustomer", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Customers_CreateCustomer_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Customers/CreateCustomer\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Customers_GetOrCreateCustomer_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Customers/get-or-create", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Customers_GetOrCreateCustomer_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Customers/get-or-create\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Customers_GetOrCreateCustomer_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Customers/get-or-create", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Customers_GetOrCreateCustomer_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Customers/get-or-create\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Customers_GetOrCreateCustomer_StateDependent", + "TestType": "State Dependent", + "Endpoint": "api/Customers/get-or-create", + "HttpMethod": "POST", + "AuthenticationState": "Multiple", + "ExpectedOutcome": "Different Content Based on State", + "TestCode": "[Theory]\n[InlineData(\u0022Anonymous\u0022)]\n[InlineData(\u0022Authenticated\u0022)]\npublic async Task Customers_GetOrCreateCustomer_ShouldShowDifferentContent_BasedOnAuthState(string authState)\n{\n // Arrange\n var client = _factory.CreateClient();\n if (authState == \u0022Authenticated\u0022)\n await AuthenticateAsync(client);\n\n // Act\n var response = await client.GetAsync(\u0022api/Customers/get-or-create\u0022);\n var content = await response.Content.ReadAsStringAsync();\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n // Add specific content assertions based on authentication state\n if (authState == \u0022Authenticated\u0022)\n {\n Assert.Contains(\u0022authenticated-content\u0022, content);\n }\n else\n {\n Assert.Contains(\u0022anonymous-content\u0022, content);\n }\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Customers_UpdateCustomer_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Customers/{id}", + "HttpMethod": "PUT", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Customers_UpdateCustomer_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Customers/{id}\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Customers_UpdateCustomer_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Customers/{id}", + "HttpMethod": "PUT", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Customers_UpdateCustomer_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Customers/{id}\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Customers_BlockCustomer_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Customers/{id}/block", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Customers_BlockCustomer_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Customers/{id}/block\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Customers_BlockCustomer_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Customers/{id}/block", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Customers_BlockCustomer_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Customers/{id}/block\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Customers_UnblockCustomer_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Customers/{id}/unblock", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Customers_UnblockCustomer_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Customers/{id}/unblock\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Customers_UnblockCustomer_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Customers/{id}/unblock", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Customers_UnblockCustomer_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Customers/{id}/unblock\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Customers_DeleteCustomer_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Customers/{id}", + "HttpMethod": "DELETE", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Customers_DeleteCustomer_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Customers/{id}\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Customers_DeleteCustomer_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Customers/{id}", + "HttpMethod": "DELETE", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Customers_DeleteCustomer_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Customers/{id}\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Messages_SendMessage_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Messages/SendMessage", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Messages_SendMessage_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Messages/SendMessage\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Messages_SendMessage_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Messages/SendMessage", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Messages_SendMessage_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Messages/SendMessage\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Messages_GetMessage_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Messages/{id}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Messages_GetMessage_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Messages/{id}\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Messages_GetMessage_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Messages/{id}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Messages_GetMessage_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Messages/{id}\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Messages_GetCustomerMessages_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Messages/customer/{customerId}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Messages_GetCustomerMessages_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Messages/customer/{customerId}\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Messages_GetCustomerMessages_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Messages/customer/{customerId}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Messages_GetCustomerMessages_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Messages/customer/{customerId}\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Messages_GetOrderMessages_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Messages/order/{orderId}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Messages_GetOrderMessages_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Messages/order/{orderId}\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Messages_GetOrderMessages_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Messages/order/{orderId}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Messages_GetOrderMessages_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Messages/order/{orderId}\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Messages_MarkMessageAsSent_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Messages/{id}/mark-sent", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Messages_MarkMessageAsSent_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Messages/{id}/mark-sent\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Messages_MarkMessageAsSent_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Messages/{id}/mark-sent", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Messages_MarkMessageAsSent_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Messages/{id}/mark-sent\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Messages_MarkMessageAsDelivered_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Messages/{id}/mark-delivered", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Messages_MarkMessageAsDelivered_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Messages/{id}/mark-delivered\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Messages_MarkMessageAsDelivered_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Messages/{id}/mark-delivered", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Messages_MarkMessageAsDelivered_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Messages/{id}/mark-delivered\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Messages_MarkMessageAsFailed_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Messages/{id}/mark-failed", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Messages_MarkMessageAsFailed_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Messages/{id}/mark-failed\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Messages_MarkMessageAsFailed_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Messages/{id}/mark-failed", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Messages_MarkMessageAsFailed_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Messages/{id}/mark-failed\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_GetAllOrders_UnauthorizedAccess", + "TestType": "Authorization", + "Endpoint": "api/Orders/GetAllOrders", + "HttpMethod": "GET", + "AuthenticationState": "Anonymous", + "ExpectedOutcome": "401 Unauthorized", + "TestCode": "[Fact]\npublic async Task Orders_GetAllOrders_ShouldReturn401_WhenNotAuthenticated()\n{\n // Arrange\n var client = _factory.CreateClient();\n\n // Act\n var response = await client.GetAsync(\u0022api/Orders/GetAllOrders\u0022);\n\n // Assert\n Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "Orders_GetAllOrders_RequiresRole_Admin", + "TestType": "Authorization", + "Endpoint": "api/Orders/GetAllOrders", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated_Admin", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Orders_GetAllOrders_ShouldReturn200_WhenUserAdmin()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client, \u0022Admin\u0022);\n\n // Act\n var response = await client.GetAsync(\u0022api/Orders/GetAllOrders\u0022);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "Orders_GetOrder_UnauthorizedAccess", + "TestType": "Authorization", + "Endpoint": "api/Orders/{id}", + "HttpMethod": "GET", + "AuthenticationState": "Anonymous", + "ExpectedOutcome": "401 Unauthorized", + "TestCode": "[Fact]\npublic async Task Orders_GetOrder_ShouldReturn401_WhenNotAuthenticated()\n{\n // Arrange\n var client = _factory.CreateClient();\n\n // Act\n var response = await client.GetAsync(\u0022api/Orders/{id}\u0022);\n\n // Assert\n Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "Orders_GetOrder_RequiresRole_Admin", + "TestType": "Authorization", + "Endpoint": "api/Orders/{id}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated_Admin", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Orders_GetOrder_ShouldReturn200_WhenUserAdmin()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client, \u0022Admin\u0022);\n\n // Act\n var response = await client.GetAsync(\u0022api/Orders/{id}\u0022);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "Orders_GetOrder_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/{id}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Orders_GetOrder_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/{id}\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_GetOrder_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/{id}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Orders_GetOrder_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/{id}\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_UpdateOrderStatus_UnauthorizedAccess", + "TestType": "Authorization", + "Endpoint": "api/Orders/{id}/status", + "HttpMethod": "PUT", + "AuthenticationState": "Anonymous", + "ExpectedOutcome": "401 Unauthorized", + "TestCode": "[Fact]\npublic async Task Orders_UpdateOrderStatus_ShouldReturn401_WhenNotAuthenticated()\n{\n // Arrange\n var client = _factory.CreateClient();\n\n // Act\n var response = await client.GetAsync(\u0022api/Orders/{id}/status\u0022);\n\n // Assert\n Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "Orders_UpdateOrderStatus_RequiresRole_Admin", + "TestType": "Authorization", + "Endpoint": "api/Orders/{id}/status", + "HttpMethod": "PUT", + "AuthenticationState": "Authenticated_Admin", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Orders_UpdateOrderStatus_ShouldReturn200_WhenUserAdmin()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client, \u0022Admin\u0022);\n\n // Act\n var response = await client.GetAsync(\u0022api/Orders/{id}/status\u0022);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "Orders_UpdateOrderStatus_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/{id}/status", + "HttpMethod": "PUT", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Orders_UpdateOrderStatus_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/{id}/status\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_UpdateOrderStatus_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/{id}/status", + "HttpMethod": "PUT", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Orders_UpdateOrderStatus_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/{id}/status\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_GetOrdersByIdentity_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/by-identity/{identityReference}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Orders_GetOrdersByIdentity_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/by-identity/{identityReference}\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_GetOrdersByIdentity_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/by-identity/{identityReference}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Orders_GetOrdersByIdentity_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/by-identity/{identityReference}\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_GetOrdersByIdentity_StateDependent", + "TestType": "State Dependent", + "Endpoint": "api/Orders/by-identity/{identityReference}", + "HttpMethod": "GET", + "AuthenticationState": "Multiple", + "ExpectedOutcome": "Different Content Based on State", + "TestCode": "[Theory]\n[InlineData(\u0022Anonymous\u0022)]\n[InlineData(\u0022Authenticated\u0022)]\npublic async Task Orders_GetOrdersByIdentity_ShouldShowDifferentContent_BasedOnAuthState(string authState)\n{\n // Arrange\n var client = _factory.CreateClient();\n if (authState == \u0022Authenticated\u0022)\n await AuthenticateAsync(client);\n\n // Act\n var response = await client.GetAsync(\u0022api/Orders/by-identity/{identityReference}\u0022);\n var content = await response.Content.ReadAsStringAsync();\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n // Add specific content assertions based on authentication state\n if (authState == \u0022Authenticated\u0022)\n {\n Assert.Contains(\u0022authenticated-content\u0022, content);\n }\n else\n {\n Assert.Contains(\u0022anonymous-content\u0022, content);\n }\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_GetOrdersByCustomerId_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/by-customer/{customerId}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Orders_GetOrdersByCustomerId_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/by-customer/{customerId}\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_GetOrdersByCustomerId_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/by-customer/{customerId}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Orders_GetOrdersByCustomerId_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/by-customer/{customerId}\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_GetOrdersByCustomerId_StateDependent", + "TestType": "State Dependent", + "Endpoint": "api/Orders/by-customer/{customerId}", + "HttpMethod": "GET", + "AuthenticationState": "Multiple", + "ExpectedOutcome": "Different Content Based on State", + "TestCode": "[Theory]\n[InlineData(\u0022Anonymous\u0022)]\n[InlineData(\u0022Authenticated\u0022)]\npublic async Task Orders_GetOrdersByCustomerId_ShouldShowDifferentContent_BasedOnAuthState(string authState)\n{\n // Arrange\n var client = _factory.CreateClient();\n if (authState == \u0022Authenticated\u0022)\n await AuthenticateAsync(client);\n\n // Act\n var response = await client.GetAsync(\u0022api/Orders/by-customer/{customerId}\u0022);\n var content = await response.Content.ReadAsStringAsync();\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n // Add specific content assertions based on authentication state\n if (authState == \u0022Authenticated\u0022)\n {\n Assert.Contains(\u0022authenticated-content\u0022, content);\n }\n else\n {\n Assert.Contains(\u0022anonymous-content\u0022, content);\n }\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_GetOrderByIdentity_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/by-identity/{identityReference}/{id}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Orders_GetOrderByIdentity_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/by-identity/{identityReference}/{id}\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_GetOrderByIdentity_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/by-identity/{identityReference}/{id}", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Orders_GetOrderByIdentity_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/by-identity/{identityReference}/{id}\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_GetOrderByIdentity_StateDependent", + "TestType": "State Dependent", + "Endpoint": "api/Orders/by-identity/{identityReference}/{id}", + "HttpMethod": "GET", + "AuthenticationState": "Multiple", + "ExpectedOutcome": "Different Content Based on State", + "TestCode": "[Theory]\n[InlineData(\u0022Anonymous\u0022)]\n[InlineData(\u0022Authenticated\u0022)]\npublic async Task Orders_GetOrderByIdentity_ShouldShowDifferentContent_BasedOnAuthState(string authState)\n{\n // Arrange\n var client = _factory.CreateClient();\n if (authState == \u0022Authenticated\u0022)\n await AuthenticateAsync(client);\n\n // Act\n var response = await client.GetAsync(\u0022api/Orders/by-identity/{identityReference}/{id}\u0022);\n var content = await response.Content.ReadAsStringAsync();\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n // Add specific content assertions based on authentication state\n if (authState == \u0022Authenticated\u0022)\n {\n Assert.Contains(\u0022authenticated-content\u0022, content);\n }\n else\n {\n Assert.Contains(\u0022anonymous-content\u0022, content);\n }\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_CreateOrder_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/CreateOrder", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Orders_CreateOrder_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/CreateOrder\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_CreateOrder_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/CreateOrder", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Orders_CreateOrder_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/CreateOrder\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_CreateOrder_StateDependent", + "TestType": "State Dependent", + "Endpoint": "api/Orders/CreateOrder", + "HttpMethod": "POST", + "AuthenticationState": "Multiple", + "ExpectedOutcome": "Different Content Based on State", + "TestCode": "[Theory]\n[InlineData(\u0022Anonymous\u0022)]\n[InlineData(\u0022Authenticated\u0022)]\npublic async Task Orders_CreateOrder_ShouldShowDifferentContent_BasedOnAuthState(string authState)\n{\n // Arrange\n var client = _factory.CreateClient();\n if (authState == \u0022Authenticated\u0022)\n await AuthenticateAsync(client);\n\n // Act\n var response = await client.GetAsync(\u0022api/Orders/CreateOrder\u0022);\n var content = await response.Content.ReadAsStringAsync();\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n // Add specific content assertions based on authentication state\n if (authState == \u0022Authenticated\u0022)\n {\n Assert.Contains(\u0022authenticated-content\u0022, content);\n }\n else\n {\n Assert.Contains(\u0022anonymous-content\u0022, content);\n }\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_CreatePayment_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/{id}/payments", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Orders_CreatePayment_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/{id}/payments\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_CreatePayment_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/{id}/payments", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Orders_CreatePayment_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/{id}/payments\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_CreatePayment_StateDependent", + "TestType": "State Dependent", + "Endpoint": "api/Orders/{id}/payments", + "HttpMethod": "POST", + "AuthenticationState": "Multiple", + "ExpectedOutcome": "Different Content Based on State", + "TestCode": "[Theory]\n[InlineData(\u0022Anonymous\u0022)]\n[InlineData(\u0022Authenticated\u0022)]\npublic async Task Orders_CreatePayment_ShouldShowDifferentContent_BasedOnAuthState(string authState)\n{\n // Arrange\n var client = _factory.CreateClient();\n if (authState == \u0022Authenticated\u0022)\n await AuthenticateAsync(client);\n\n // Act\n var response = await client.GetAsync(\u0022api/Orders/{id}/payments\u0022);\n var content = await response.Content.ReadAsStringAsync();\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n // Add specific content assertions based on authentication state\n if (authState == \u0022Authenticated\u0022)\n {\n Assert.Contains(\u0022authenticated-content\u0022, content);\n }\n else\n {\n Assert.Contains(\u0022anonymous-content\u0022, content);\n }\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_GetOrderPayments_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/{id}/payments", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Orders_GetOrderPayments_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/{id}/payments\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_GetOrderPayments_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/{id}/payments", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Orders_GetOrderPayments_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/{id}/payments\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_GetPaymentStatus_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/payments/{paymentId}/status", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Orders_GetPaymentStatus_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/payments/{paymentId}/status\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_GetPaymentStatus_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/payments/{paymentId}/status", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Orders_GetPaymentStatus_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/payments/{paymentId}/status\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_CancelOrder_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/{id}/cancel", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Orders_CancelOrder_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/{id}/cancel\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_CancelOrder_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/{id}/cancel", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Orders_CancelOrder_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/{id}/cancel\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_PaymentWebhook_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/payments/webhook", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Orders_PaymentWebhook_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/payments/webhook\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_PaymentWebhook_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/payments/webhook", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Orders_PaymentWebhook_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/payments/webhook\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_Details_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/Details", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_Details_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/Details\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_Details_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/Details", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_Details_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/Details\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_CompleteWizard_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/CompleteWizard", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_CompleteWizard_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/CompleteWizard\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_CompleteWizard_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/CompleteWizard", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_CompleteWizard_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/CompleteWizard\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_Edit_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/Edit", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_Edit_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/Edit\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_Edit_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/Edit", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_Edit_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/Edit\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_Edit_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/Edit", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_Edit_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/Edit\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_Edit_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/Edit", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_Edit_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/Edit\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_Metrics_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/Metrics", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_Metrics_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/Metrics\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_Metrics_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/Metrics", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_Metrics_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/Metrics\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_Delete_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/Delete", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_Delete_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/Delete\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_Delete_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/Delete", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_Delete_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/Delete\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_Suspend_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/Suspend", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_Suspend_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/Suspend\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_Suspend_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/Suspend", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_Suspend_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/Suspend\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_Activate_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/Activate", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_Activate_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/Activate\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_Activate_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/Activate", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_Activate_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/Activate\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_RegenerateKey_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/RegenerateKey", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Bots_RegenerateKey_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/RegenerateKey\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Bots_RegenerateKey_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Bots/RegenerateKey", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Bots_RegenerateKey_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Bots/RegenerateKey\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Categories_Edit_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Categories/Edit", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Categories_Edit_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Categories/Edit\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Categories_Edit_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Categories/Edit", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Categories_Edit_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Categories/Edit\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Categories_Edit_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Categories/Edit", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Categories_Edit_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Categories/Edit\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Categories_Edit_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Categories/Edit", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Categories_Edit_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Categories/Edit\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Categories_Delete_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Categories/Delete", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Categories_Delete_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Categories/Delete\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Categories_Delete_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Categories/Delete", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Categories_Delete_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Categories/Delete\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Messages_Customer_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Messages/Customer", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Messages_Customer_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Messages/Customer\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Messages_Customer_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Messages/Customer", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Messages_Customer_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Messages/Customer\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Messages_Reply_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Messages/Reply", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Messages_Reply_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Messages/Reply\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Messages_Reply_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Messages/Reply", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Messages_Reply_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Messages/Reply\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_Details_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/Details", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Orders_Details_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/Details\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_Details_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/Details", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Orders_Details_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/Details\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_Edit_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/Edit", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Orders_Edit_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/Edit\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_Edit_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/Edit", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Orders_Edit_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/Edit\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_Edit_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/Edit", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Orders_Edit_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/Edit\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_Edit_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/Edit", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Orders_Edit_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/Edit\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_UpdateStatus_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/UpdateStatus", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Orders_UpdateStatus_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/UpdateStatus\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Orders_UpdateStatus_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Orders/UpdateStatus", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Orders_UpdateStatus_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Orders/UpdateStatus\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Products_Edit_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Products/Edit", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Products_Edit_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Products/Edit\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Products_Edit_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Products/Edit", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Products_Edit_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Products/Edit\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Products_Edit_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Products/Edit", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Products_Edit_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Products/Edit\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Products_Edit_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Products/Edit", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Products_Edit_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Products/Edit\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Products_UploadPhoto_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Products/UploadPhoto", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Products_UploadPhoto_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Products/UploadPhoto\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Products_UploadPhoto_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Products/UploadPhoto", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Products_UploadPhoto_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Products/UploadPhoto\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Products_DeletePhoto_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Products/DeletePhoto", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Products_DeletePhoto_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Products/DeletePhoto\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Products_DeletePhoto_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Products/DeletePhoto", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Products_DeletePhoto_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Products/DeletePhoto\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Products_Delete_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Products/Delete", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Products_Delete_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Products/Delete\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Products_Delete_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Products/Delete", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Products_Delete_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Products/Delete\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "ShippingRates_Edit_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/ShippingRates/Edit", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task ShippingRates_Edit_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/ShippingRates/Edit\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "ShippingRates_Edit_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/ShippingRates/Edit", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task ShippingRates_Edit_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/ShippingRates/Edit\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "ShippingRates_Edit_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/ShippingRates/Edit", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task ShippingRates_Edit_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/ShippingRates/Edit\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "ShippingRates_Edit_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/ShippingRates/Edit", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task ShippingRates_Edit_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/ShippingRates/Edit\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "ShippingRates_Delete_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/ShippingRates/Delete", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task ShippingRates_Delete_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/ShippingRates/Delete\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "ShippingRates_Delete_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/ShippingRates/Delete", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task ShippingRates_Delete_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/ShippingRates/Delete\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Users_Edit_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Users/Edit", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Users_Edit_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Users/Edit\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Users_Edit_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Users/Edit", + "HttpMethod": "GET", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Users_Edit_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Users/Edit\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Users_Edit_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Users/Edit", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Users_Edit_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Users/Edit\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Users_Edit_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Users/Edit", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Users_Edit_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Users/Edit\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Users_Delete_ValidData", + "TestType": "Data Validation", + "Endpoint": "api/Users/Delete", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "200 OK", + "TestCode": "[Fact]\npublic async Task Users_Delete_ShouldReturn200_WithValidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var validData = CreateValidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Users/Delete\u0022, validData);\n\n // Assert\n Assert.Equal(HttpStatusCode.OK, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "Users_Delete_InvalidData", + "TestType": "Data Validation", + "Endpoint": "api/Users/Delete", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "400 Bad Request", + "TestCode": "[Fact]\npublic async Task Users_Delete_ShouldReturn400_WithInvalidData()\n{\n // Arrange\n var client = _factory.CreateClient();\n await AuthenticateAsync(client);\n var invalidData = CreateInvalidTestData();\n\n // Act\n var response = await client.PostAsJsonAsync(\u0022api/Users/Delete\u0022, invalidData);\n\n // Assert\n Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);\n}", + "TestData": [], + "Priority": "Medium" + }, + { + "TestName": "AuthFlow_Login_Flow", + "TestType": "Authentication Flow", + "Endpoint": "Multiple", + "HttpMethod": "POST", + "AuthenticationState": "Anonymous", + "ExpectedOutcome": "Transition to Authenticated", + "TestCode": "[Fact]\npublic async Task Login_Flow_ShouldWork()\n{\n // Arrange\n var client = _factory.CreateClient();\n\n // Act \u0026 Assert\n // User should be able to transition from Anonymous to Authenticated via login endpoint\n // TODO: Implement specific flow testing based on scenario\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "AuthFlow_Register_Flow", + "TestType": "Authentication Flow", + "Endpoint": "Multiple", + "HttpMethod": "POST", + "AuthenticationState": "Anonymous", + "ExpectedOutcome": "Transition to Authenticated", + "TestCode": "[Fact]\npublic async Task Register_Flow_ShouldWork()\n{\n // Arrange\n var client = _factory.CreateClient();\n\n // Act \u0026 Assert\n // User should be able to transition from Anonymous to Authenticated via registration endpoint\n // TODO: Implement specific flow testing based on scenario\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "AuthFlow_Login_Flow", + "TestType": "Authentication Flow", + "Endpoint": "Multiple", + "HttpMethod": "POST", + "AuthenticationState": "Anonymous", + "ExpectedOutcome": "Transition to Authenticated", + "TestCode": "[Fact]\npublic async Task Login_Flow_ShouldWork()\n{\n // Arrange\n var client = _factory.CreateClient();\n\n // Act \u0026 Assert\n // User should be able to transition from Anonymous to Authenticated via login endpoint\n // TODO: Implement specific flow testing based on scenario\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "AuthFlow_Login_Flow", + "TestType": "Authentication Flow", + "Endpoint": "Multiple", + "HttpMethod": "POST", + "AuthenticationState": "Anonymous", + "ExpectedOutcome": "Transition to Authenticated", + "TestCode": "[Fact]\npublic async Task Login_Flow_ShouldWork()\n{\n // Arrange\n var client = _factory.CreateClient();\n\n // Act \u0026 Assert\n // User should be able to transition from Anonymous to Authenticated via login endpoint\n // TODO: Implement specific flow testing based on scenario\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "AuthFlow_Login_Flow", + "TestType": "Authentication Flow", + "Endpoint": "Multiple", + "HttpMethod": "POST", + "AuthenticationState": "Anonymous", + "ExpectedOutcome": "Transition to Authenticated", + "TestCode": "[Fact]\npublic async Task Login_Flow_ShouldWork()\n{\n // Arrange\n var client = _factory.CreateClient();\n\n // Act \u0026 Assert\n // User should be able to transition from Anonymous to Authenticated via login endpoint\n // TODO: Implement specific flow testing based on scenario\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "AuthFlow_Logout_Flow", + "TestType": "Authentication Flow", + "Endpoint": "Multiple", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "Transition to Anonymous", + "TestCode": "[Fact]\npublic async Task Logout_Flow_ShouldWork()\n{\n // Arrange\n var client = _factory.CreateClient();\n\n // Act \u0026 Assert\n // User should be able to transition from Authenticated to Anonymous via logout endpoint\n // TODO: Implement specific flow testing based on scenario\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "AuthFlow_Logout_Flow", + "TestType": "Authentication Flow", + "Endpoint": "Multiple", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated_Admin", + "ExpectedOutcome": "Transition to Anonymous", + "TestCode": "[Fact]\npublic async Task Logout_Flow_ShouldWork()\n{\n // Arrange\n var client = _factory.CreateClient();\n\n // Act \u0026 Assert\n // User should be able to transition from Authenticated_Admin to Anonymous via logout endpoint\n // TODO: Implement specific flow testing based on scenario\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "AuthFlow_Session_Timeout", + "TestType": "Authentication Flow", + "Endpoint": "Multiple", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "Transition to Anonymous", + "TestCode": "[Fact]\npublic async Task Session_Timeout_ShouldWork()\n{\n // Arrange\n var client = _factory.CreateClient();\n\n // Act \u0026 Assert\n // Verify that expired sessions are handled correctly and user is redirected to login\n // TODO: Implement specific flow testing based on scenario\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "AuthFlow_Concurrent_Sessions", + "TestType": "Authentication Flow", + "Endpoint": "Multiple", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated", + "ExpectedOutcome": "Transition to Authenticated", + "TestCode": "[Fact]\npublic async Task Concurrent_Sessions_ShouldWork()\n{\n // Arrange\n var client = _factory.CreateClient();\n\n // Act \u0026 Assert\n // Test behavior when same user logs in from multiple locations\n // TODO: Implement specific flow testing based on scenario\n}", + "TestData": [], + "Priority": "High" + }, + { + "TestName": "AuthFlow_Role_Switching", + "TestType": "Authentication Flow", + "Endpoint": "Multiple", + "HttpMethod": "POST", + "AuthenticationState": "Authenticated_User", + "ExpectedOutcome": "Transition to Authenticated_Admin", + "TestCode": "[Fact]\npublic async Task Role_Switching_ShouldWork()\n{\n // Arrange\n var client = _factory.CreateClient();\n\n // Act \u0026 Assert\n // Verify that role changes are reflected in endpoint accessibility\n // TODO: Implement specific flow testing based on scenario\n}", + "TestData": [], + "Priority": "High" + } + ], + "Summary": { + "TotalEndpoints": 115, + "FullyCoveredEndpoints": 0, + "PartiallyCoveredEndpoints": 27, + "UncoveredEndpoints": 88, + "OverallCoveragePercentage": 16.956521739130434, + "CriticalGaps": 124, + "WarningGaps": 100, + "InfoGaps": 0, + "SuggestedTests": 190, + "TopPriorities": [ + "Bots_GetAllBots_UnauthorizedAccess", + "Bots_GetAllBots_RequiresRole_Admin", + "Bots_GetBot_UnauthorizedAccess", + "Bots_GetBot_RequiresRole_Admin", + "Bots_GetBotMetrics_UnauthorizedAccess" + ] + } +} \ No newline at end of file diff --git a/LittleShop/TestAgent_Results/endpoint_discovery.json b/LittleShop/TestAgent_Results/endpoint_discovery.json new file mode 100644 index 0000000..d1f1f96 --- /dev/null +++ b/LittleShop/TestAgent_Results/endpoint_discovery.json @@ -0,0 +1,2940 @@ +{ + "Summary": { + "TotalEndpoints": 115, + "TotalControllers": 18, + "AuthenticatedEndpoints": 78, + "AnonymousEndpoints": 37, + "DetectedRoutes": 96 + }, + "Controllers": [ + "Auth", + "BotMessages", + "Bots", + "Catalog", + "Customers", + "Home", + "Messages", + "Orders", + "Test", + "Account", + "Bots", + "Categories", + "Dashboard", + "Messages", + "Orders", + "Products", + "ShippingRates", + "Users" + ], + "Endpoints": [ + { + "Controller": "Auth", + "Action": "Login", + "Template": "api/Auth/login", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "loginDto", + "Type": "LoginDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "BotMessages", + "Action": "GetPendingMessages", + "Template": "api/bot/messages/pending", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "platform", + "Type": "String", + "IsRequired": false, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "BotMessages", + "Action": "MarkMessageAsSent", + "Template": "api/bot/messages/{id}/mark-sent", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "platformMessageId", + "Type": "String", + "IsRequired": false, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "BotMessages", + "Action": "MarkMessageAsFailed", + "Template": "api/bot/messages/{id}/mark-failed", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "reason", + "Type": "String", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "BotMessages", + "Action": "CreateTestMessage", + "Template": "api/bot/messages/test-create", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "dto", + "Type": "CreateTestMessageDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "BotMessages", + "Action": "CreateCustomerMessage", + "Template": "api/bot/messages/customer-create", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "dto", + "Type": "CreateCustomerMessageFromTelegramDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "BotMessages", + "Action": "GetCustomerMessages", + "Template": "api/bot/messages/customer/{customerId}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "customerId", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Bots", + "Action": "RegisterBot", + "Template": "api/Bots/register", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "dto", + "Type": "BotRegistrationDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": true, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Bots", + "Action": "AuthenticateBot", + "Template": "api/Bots/authenticate", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "dto", + "Type": "BotAuthenticateDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": true, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Bots", + "Action": "GetBotSettings", + "Template": "api/Bots/settings", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Bots", + "Action": "UpdateBotSettings", + "Template": "api/Bots/settings", + "HttpMethods": [ + "PUT" + ], + "Parameters": [ + { + "Name": "dto", + "Type": "UpdateBotSettingsDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Bots", + "Action": "RecordHeartbeat", + "Template": "api/Bots/heartbeat", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "dto", + "Type": "BotHeartbeatDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Bots", + "Action": "UpdatePlatformInfo", + "Template": "api/Bots/platform-info", + "HttpMethods": [ + "PUT" + ], + "Parameters": [ + { + "Name": "dto", + "Type": "UpdatePlatformInfoDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Bots", + "Action": "RecordMetric", + "Template": "api/Bots/metrics", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "dto", + "Type": "CreateBotMetricDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Bots", + "Action": "RecordMetricsBatch", + "Template": "api/Bots/metrics/batch", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "dto", + "Type": "BotMetricsBatchDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Bots", + "Action": "StartSession", + "Template": "api/Bots/sessions/start", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "dto", + "Type": "CreateBotSessionDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Bots", + "Action": "UpdateSession", + "Template": "api/Bots/sessions/{sessionId}", + "HttpMethods": [ + "PUT" + ], + "Parameters": [ + { + "Name": "sessionId", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "dto", + "Type": "UpdateBotSessionDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Bots", + "Action": "EndSession", + "Template": "api/Bots/sessions/{sessionId}/end", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "sessionId", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Bots", + "Action": "GetAllBots", + "Template": "api/Bots/GetAllBots", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [ + "Admin" + ] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Bots", + "Action": "GetBot", + "Template": "api/Bots/{id}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [ + "Admin" + ] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Bots", + "Action": "GetBotMetrics", + "Template": "api/Bots/{id}/metrics", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "startDate", + "Type": "Nullable\u00601", + "IsRequired": false, + "Binding": "Query" + }, + { + "Name": "endDate", + "Type": "Nullable\u00601", + "IsRequired": false, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [ + "Admin" + ] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Bots", + "Action": "GetMetricsSummary", + "Template": "api/Bots/{id}/metrics/summary", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "startDate", + "Type": "Nullable\u00601", + "IsRequired": false, + "Binding": "Query" + }, + { + "Name": "endDate", + "Type": "Nullable\u00601", + "IsRequired": false, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [ + "Admin" + ] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Bots", + "Action": "GetBotSessions", + "Template": "api/Bots/{id}/sessions", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "activeOnly", + "Type": "Boolean", + "IsRequired": false, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [ + "Admin" + ] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Bots", + "Action": "DeleteBot", + "Template": "api/Bots/{id}", + "HttpMethods": [ + "DELETE" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [ + "Admin" + ] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Catalog", + "Action": "GetCategories", + "Template": "api/Catalog/categories", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Catalog", + "Action": "GetCategory", + "Template": "api/Catalog/categories/{id}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Catalog", + "Action": "GetProducts", + "Template": "api/Catalog/products", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "pageNumber", + "Type": "Int32", + "IsRequired": false, + "Binding": "Query" + }, + { + "Name": "pageSize", + "Type": "Int32", + "IsRequired": false, + "Binding": "Query" + }, + { + "Name": "categoryId", + "Type": "Nullable\u00601", + "IsRequired": false, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Catalog", + "Action": "GetProduct", + "Template": "api/Catalog/products/{id}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Customers", + "Action": "GetCustomers", + "Template": "api/Customers/GetCustomers", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "search", + "Type": "String", + "IsRequired": false, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Customers", + "Action": "GetCustomer", + "Template": "api/Customers/{id}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Customers", + "Action": "GetCustomerByTelegramId", + "Template": "api/Customers/by-telegram/{telegramUserId}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "telegramUserId", + "Type": "Int64", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Customers", + "Action": "CreateCustomer", + "Template": "api/Customers/CreateCustomer", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "createCustomerDto", + "Type": "CreateCustomerDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Customers", + "Action": "GetOrCreateCustomer", + "Template": "api/Customers/get-or-create", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "createCustomerDto", + "Type": "CreateCustomerDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": true, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Customers", + "Action": "UpdateCustomer", + "Template": "api/Customers/{id}", + "HttpMethods": [ + "PUT" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "updateCustomerDto", + "Type": "UpdateCustomerDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Customers", + "Action": "BlockCustomer", + "Template": "api/Customers/{id}/block", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "reason", + "Type": "String", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Customers", + "Action": "UnblockCustomer", + "Template": "api/Customers/{id}/unblock", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Customers", + "Action": "DeleteCustomer", + "Template": "api/Customers/{id}", + "HttpMethods": [ + "DELETE" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Home", + "Action": "Index", + "Template": "api/Home/Index", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "IActionResult", + "IsApiController": false, + "Area": "" + }, + { + "Controller": "Messages", + "Action": "SendMessage", + "Template": "api/Messages/SendMessage", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "createMessageDto", + "Type": "CreateCustomerMessageDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Messages", + "Action": "GetMessage", + "Template": "api/Messages/{id}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Messages", + "Action": "GetCustomerMessages", + "Template": "api/Messages/customer/{customerId}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "customerId", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Messages", + "Action": "GetOrderMessages", + "Template": "api/Messages/order/{orderId}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "orderId", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Messages", + "Action": "GetPendingMessages", + "Template": "api/Messages/pending", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "platform", + "Type": "String", + "IsRequired": false, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": true, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Messages", + "Action": "MarkMessageAsSent", + "Template": "api/Messages/{id}/mark-sent", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "platformMessageId", + "Type": "String", + "IsRequired": false, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": true, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Messages", + "Action": "MarkMessageAsDelivered", + "Template": "api/Messages/{id}/mark-delivered", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Messages", + "Action": "MarkMessageAsFailed", + "Template": "api/Messages/{id}/mark-failed", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "reason", + "Type": "String", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": true, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Orders", + "Action": "GetAllOrders", + "Template": "api/Orders/GetAllOrders", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [ + "Admin" + ] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Orders", + "Action": "GetOrder", + "Template": "api/Orders/{id}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [ + "Admin" + ] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Orders", + "Action": "UpdateOrderStatus", + "Template": "api/Orders/{id}/status", + "HttpMethods": [ + "PUT" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "updateOrderStatusDto", + "Type": "UpdateOrderStatusDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [ + "Admin" + ] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Orders", + "Action": "GetOrdersByIdentity", + "Template": "api/Orders/by-identity/{identityReference}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "identityReference", + "Type": "String", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": true, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Orders", + "Action": "GetOrdersByCustomerId", + "Template": "api/Orders/by-customer/{customerId}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "customerId", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": true, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Orders", + "Action": "GetOrderByIdentity", + "Template": "api/Orders/by-identity/{identityReference}/{id}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "identityReference", + "Type": "String", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": true, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Orders", + "Action": "CreateOrder", + "Template": "api/Orders/CreateOrder", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "createOrderDto", + "Type": "CreateOrderDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": true, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Orders", + "Action": "CreatePayment", + "Template": "api/Orders/{id}/payments", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "createPaymentDto", + "Type": "CreatePaymentDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": true, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Orders", + "Action": "GetOrderPayments", + "Template": "api/Orders/{id}/payments", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Orders", + "Action": "GetPaymentStatus", + "Template": "api/Orders/payments/{paymentId}/status", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "paymentId", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Orders", + "Action": "CancelOrder", + "Template": "api/Orders/{id}/cancel", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "cancelOrderDto", + "Type": "CancelOrderDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Orders", + "Action": "PaymentWebhook", + "Template": "api/Orders/payments/webhook", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "webhookDto", + "Type": "PaymentWebhookDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Test", + "Action": "CreateTestProduct", + "Template": "api/Test/create-product", + "HttpMethods": [ + "POST" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Test", + "Action": "SetupTestData", + "Template": "api/Test/setup-test-data", + "HttpMethods": [ + "POST" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": true, + "Area": "" + }, + { + "Controller": "Account", + "Action": "Login", + "Template": "api/Account/Login", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "IActionResult", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Account", + "Action": "Login", + "Template": "api/Account/Login", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "username", + "Type": "String", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "password", + "Type": "String", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Account", + "Action": "Logout", + "Template": "api/Account/Logout", + "HttpMethods": [ + "POST" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Account", + "Action": "AccessDenied", + "Template": "api/Account/AccessDenied", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": false, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "IActionResult", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Bots", + "Action": "Index", + "Template": "api/Bots/Index", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Bots", + "Action": "Details", + "Template": "api/Bots/Details", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Bots", + "Action": "Create", + "Template": "api/Bots/Create", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "IActionResult", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Bots", + "Action": "Wizard", + "Template": "api/Bots/Wizard", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "IActionResult", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Bots", + "Action": "Wizard", + "Template": "api/Bots/Wizard", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "dto", + "Type": "BotWizardDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Bots", + "Action": "CompleteWizard", + "Template": "api/Bots/CompleteWizard", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "dto", + "Type": "BotWizardDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Bots", + "Action": "Create", + "Template": "api/Bots/Create", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "dto", + "Type": "BotRegistrationDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Bots", + "Action": "Edit", + "Template": "api/Bots/Edit", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Bots", + "Action": "Edit", + "Template": "api/Bots/Edit", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "settingsJson", + "Type": "String", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "status", + "Type": "BotStatus", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Bots", + "Action": "Metrics", + "Template": "api/Bots/Metrics", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "startDate", + "Type": "Nullable\u00601", + "IsRequired": false, + "Binding": "Body" + }, + { + "Name": "endDate", + "Type": "Nullable\u00601", + "IsRequired": false, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Bots", + "Action": "Delete", + "Template": "api/Bots/Delete", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Bots", + "Action": "Suspend", + "Template": "api/Bots/Suspend", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Bots", + "Action": "Activate", + "Template": "api/Bots/Activate", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Bots", + "Action": "RegenerateKey", + "Template": "api/Bots/RegenerateKey", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Categories", + "Action": "Index", + "Template": "api/Categories/Index", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Categories", + "Action": "Create", + "Template": "api/Categories/Create", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "IActionResult", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Categories", + "Action": "Create", + "Template": "api/Categories/Create", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "model", + "Type": "CreateCategoryDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Categories", + "Action": "Edit", + "Template": "api/Categories/Edit", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Categories", + "Action": "Edit", + "Template": "api/Categories/Edit", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "model", + "Type": "UpdateCategoryDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Categories", + "Action": "Delete", + "Template": "api/Categories/Delete", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Dashboard", + "Action": "Index", + "Template": "api/Dashboard/Index", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Messages", + "Action": "Index", + "Template": "api/Messages/Index", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Messages", + "Action": "Customer", + "Template": "api/Messages/Customer", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Messages", + "Action": "Reply", + "Template": "api/Messages/Reply", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "customerId", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "content", + "Type": "String", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "isUrgent", + "Type": "Boolean", + "IsRequired": false, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Orders", + "Action": "Index", + "Template": "api/Orders/Index", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Orders", + "Action": "Details", + "Template": "api/Orders/Details", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Orders", + "Action": "Create", + "Template": "api/Orders/Create", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "IActionResult", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Orders", + "Action": "Create", + "Template": "api/Orders/Create", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "model", + "Type": "CreateOrderDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Orders", + "Action": "Edit", + "Template": "api/Orders/Edit", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Orders", + "Action": "Edit", + "Template": "api/Orders/Edit", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "model", + "Type": "OrderDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Orders", + "Action": "UpdateStatus", + "Template": "api/Orders/UpdateStatus", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "model", + "Type": "UpdateOrderStatusDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Products", + "Action": "Index", + "Template": "api/Products/Index", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Products", + "Action": "Create", + "Template": "api/Products/Create", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Products", + "Action": "Create", + "Template": "api/Products/Create", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "model", + "Type": "CreateProductDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Products", + "Action": "Edit", + "Template": "api/Products/Edit", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Products", + "Action": "Edit", + "Template": "api/Products/Edit", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "model", + "Type": "UpdateProductDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Products", + "Action": "UploadPhoto", + "Template": "api/Products/UploadPhoto", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "file", + "Type": "IFormFile", + "IsRequired": true, + "Binding": "Body" + }, + { + "Name": "altText", + "Type": "String", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Products", + "Action": "DeletePhoto", + "Template": "api/Products/DeletePhoto", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "photoId", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Products", + "Action": "Delete", + "Template": "api/Products/Delete", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "ShippingRates", + "Action": "Index", + "Template": "api/ShippingRates/Index", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "ShippingRates", + "Action": "Create", + "Template": "api/ShippingRates/Create", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "IActionResult", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "ShippingRates", + "Action": "Create", + "Template": "api/ShippingRates/Create", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "model", + "Type": "CreateShippingRateDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "ShippingRates", + "Action": "Edit", + "Template": "api/ShippingRates/Edit", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "ShippingRates", + "Action": "Edit", + "Template": "api/ShippingRates/Edit", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "model", + "Type": "UpdateShippingRateDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "ShippingRates", + "Action": "Delete", + "Template": "api/ShippingRates/Delete", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Users", + "Action": "Index", + "Template": "api/Users/Index", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Users", + "Action": "Create", + "Template": "api/Users/Create", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "IActionResult", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Users", + "Action": "Create", + "Template": "api/Users/Create", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "model", + "Type": "CreateUserDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Users", + "Action": "Edit", + "Template": "api/Users/Edit", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Users", + "Action": "Edit", + "Template": "api/Users/Edit", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + }, + { + "Name": "model", + "Type": "UpdateUserDto", + "IsRequired": true, + "Binding": "Body" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + }, + { + "Controller": "Users", + "Action": "Delete", + "Template": "api/Users/Delete", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + { + "Name": "id", + "Type": "Guid", + "IsRequired": true, + "Binding": "Query" + } + ], + "Authentication": { + "RequiresAuthentication": true, + "AllowsAnonymous": false, + "RequiredRoles": [] + }, + "ReturnType": "Task\u00601", + "IsApiController": false, + "Area": "Admin" + } + ], + "Routes": [ + "api/Auth/login", + "api/bot/messages/pending", + "api/bot/messages/{id}/mark-sent", + "api/bot/messages/{id}/mark-failed", + "api/bot/messages/test-create", + "api/bot/messages/customer-create", + "api/bot/messages/customer/{customerId}", + "api/Bots/register", + "api/Bots/authenticate", + "api/Bots/settings", + "api/Bots/heartbeat", + "api/Bots/platform-info", + "api/Bots/metrics", + "api/Bots/metrics/batch", + "api/Bots/sessions/start", + "api/Bots/sessions/{sessionId}", + "api/Bots/sessions/{sessionId}/end", + "api/Bots/GetAllBots", + "api/Bots/{id}", + "api/Bots/{id}/metrics", + "api/Bots/{id}/metrics/summary", + "api/Bots/{id}/sessions", + "api/Catalog/categories", + "api/Catalog/categories/{id}", + "api/Catalog/products", + "api/Catalog/products/{id}", + "api/Customers/GetCustomers", + "api/Customers/{id}", + "api/Customers/by-telegram/{telegramUserId}", + "api/Customers/CreateCustomer", + "api/Customers/get-or-create", + "api/Customers/{id}/block", + "api/Customers/{id}/unblock", + "api/Home/Index", + "api/Messages/SendMessage", + "api/Messages/{id}", + "api/Messages/customer/{customerId}", + "api/Messages/order/{orderId}", + "api/Messages/pending", + "api/Messages/{id}/mark-sent", + "api/Messages/{id}/mark-delivered", + "api/Messages/{id}/mark-failed", + "api/Orders/GetAllOrders", + "api/Orders/{id}", + "api/Orders/{id}/status", + "api/Orders/by-identity/{identityReference}", + "api/Orders/by-customer/{customerId}", + "api/Orders/by-identity/{identityReference}/{id}", + "api/Orders/CreateOrder", + "api/Orders/{id}/payments", + "api/Orders/payments/{paymentId}/status", + "api/Orders/{id}/cancel", + "api/Orders/payments/webhook", + "api/Test/create-product", + "api/Test/setup-test-data", + "api/Account/Login", + "api/Account/Logout", + "api/Account/AccessDenied", + "api/Bots/Index", + "api/Bots/Details", + "api/Bots/Create", + "api/Bots/Wizard", + "api/Bots/CompleteWizard", + "api/Bots/Edit", + "api/Bots/Metrics", + "api/Bots/Delete", + "api/Bots/Suspend", + "api/Bots/Activate", + "api/Bots/RegenerateKey", + "api/Categories/Index", + "api/Categories/Create", + "api/Categories/Edit", + "api/Categories/Delete", + "api/Dashboard/Index", + "api/Messages/Index", + "api/Messages/Customer", + "api/Messages/Reply", + "api/Orders/Index", + "api/Orders/Details", + "api/Orders/Create", + "api/Orders/Edit", + "api/Orders/UpdateStatus", + "api/Products/Index", + "api/Products/Create", + "api/Products/Edit", + "api/Products/UploadPhoto", + "api/Products/DeletePhoto", + "api/Products/Delete", + "api/ShippingRates/Index", + "api/ShippingRates/Create", + "api/ShippingRates/Edit", + "api/ShippingRates/Delete", + "api/Users/Index", + "api/Users/Create", + "api/Users/Edit", + "api/Users/Delete" + ], + "Recommendations": [ + "Generate comprehensive integration tests for all discovered endpoints", + "Implement automated testing for each authentication state combination" + ] +} \ No newline at end of file diff --git a/LittleShop/TestAgent_Results/error_detection.json b/LittleShop/TestAgent_Results/error_detection.json new file mode 100644 index 0000000..4cb0436 --- /dev/null +++ b/LittleShop/TestAgent_Results/error_detection.json @@ -0,0 +1,1386 @@ +{ + "DeadLinks": [], + "HttpErrors": [ + { + "Url": "https://localhost:5001", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:01:28.4136605Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Auth/login", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:01:32.5436482Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/bot/messages/pending", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:01:36.6469969Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/bot/messages/{id}/mark-sent", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:01:40.7476995Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/bot/messages/{id}/mark-failed", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:01:44.8542098Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/bot/messages/test-create", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:01:48.9511168Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/bot/messages/customer-create", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:01:53.0454505Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/bot/messages/customer/{customerId}", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:01:57.1338792Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/register", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:02:01.232331Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/authenticate", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:02:05.3330182Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/settings", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:02:09.4484546Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/heartbeat", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:02:13.5371766Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/platform-info", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:02:17.62977Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/metrics", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:02:21.7406881Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/metrics/batch", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:02:25.8460004Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/sessions/start", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:02:29.9369627Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/sessions/{sessionId}", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:02:34.0160421Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/sessions/{sessionId}/end", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:02:38.1270391Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/GetAllBots", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:02:42.2021072Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/{id}", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:02:46.2746696Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/{id}/metrics", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:02:50.371648Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/{id}/metrics/summary", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:02:54.4743135Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/{id}/sessions", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:02:58.5796266Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Catalog/categories", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:03:02.6935242Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Catalog/categories/{id}", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:03:06.7861415Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Catalog/products", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:03:10.8647424Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Catalog/products/{id}", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:03:14.9635341Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Customers/GetCustomers", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:03:19.0531897Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Customers/{id}", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:03:23.1449361Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Customers/by-telegram/{telegramUserId}", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:03:27.2051658Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Customers/CreateCustomer", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:03:31.2992272Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Customers/get-or-create", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:03:35.4127184Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Customers/{id}/block", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:03:39.5164822Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Customers/{id}/unblock", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:03:43.6094425Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Home/Index", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:03:47.7123897Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Messages/SendMessage", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:03:51.8111238Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Messages/{id}", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:03:55.9120061Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Messages/customer/{customerId}", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:04:00.0263436Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Messages/order/{orderId}", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:04:04.0957564Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Messages/pending", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:04:08.1837105Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Messages/{id}/mark-sent", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:04:12.2933729Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Messages/{id}/mark-delivered", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:04:16.3972755Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Messages/{id}/mark-failed", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:04:20.5078118Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Orders/GetAllOrders", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:04:24.6140465Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Orders/{id}", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:04:28.7189056Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Orders/{id}/status", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:04:32.8146936Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Orders/by-identity/{identityReference}", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:04:36.9277025Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Orders/by-customer/{customerId}", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:04:41.0367094Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Orders/by-identity/{identityReference}/{id}", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:04:45.1452805Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Orders/CreateOrder", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:04:49.2507478Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Orders/{id}/payments", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:04:53.3592069Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Orders/payments/{paymentId}/status", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:04:57.4483854Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Orders/{id}/cancel", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:05:01.5250997Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Orders/payments/webhook", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:05:05.6162125Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Test/create-product", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:05:09.7291304Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Test/setup-test-data", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:05:13.8328986Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Account/Login", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:05:17.9426604Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Account/Logout", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:05:22.0380505Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Account/AccessDenied", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:05:26.132658Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/Index", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:05:30.2398169Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/Details", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:05:34.3611802Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/Create", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:05:38.4911537Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/Wizard", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:05:42.5907293Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/CompleteWizard", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:05:46.6953453Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/Edit", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:05:50.7952952Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/Metrics", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:05:54.9143643Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/Delete", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:05:59.0163648Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/Suspend", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:06:03.1186323Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/Activate", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:06:07.2022025Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Bots/RegenerateKey", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:06:11.3097333Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Categories/Index", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:06:15.4086275Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Categories/Create", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:06:19.5136129Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Categories/Edit", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:06:23.6274057Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Categories/Delete", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:06:27.7263273Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Dashboard/Index", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:06:31.8379425Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Messages/Index", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:06:35.9331167Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Messages/Customer", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:06:40.0351949Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Messages/Reply", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:06:44.1463343Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Orders/Index", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:06:48.238581Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Orders/Details", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:06:52.3489959Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Orders/Create", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:06:56.428006Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Orders/Edit", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:07:00.5241235Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Orders/UpdateStatus", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:07:04.6177956Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Products/Index", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:07:08.6951581Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Products/Create", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:07:12.7712549Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Products/Edit", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:07:16.8580047Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Products/UploadPhoto", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:07:20.952471Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Products/DeletePhoto", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:07:25.0647841Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Products/Delete", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:07:29.1780938Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/ShippingRates/Index", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:07:33.2450233Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/ShippingRates/Create", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:07:37.3162413Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/ShippingRates/Edit", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:07:41.410048Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/ShippingRates/Delete", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:07:45.5106106Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Users/Index", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:07:49.6152188Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Users/Create", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:07:53.7222161Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Users/Edit", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:07:57.8234889Z", + "IsFormSubmission": false, + "FormData": null + }, + { + "Url": "https://localhost:5001/api/Users/Delete", + "StatusCode": 503, + "Method": "GET", + "ErrorMessage": "No connection could be made because the target machine actively refused it. (localhost:5001)", + "ResponseContent": "", + "RequestHeaders": {}, + "ResponseHeaders": {}, + "AuthenticationState": "Anonymous", + "DetectedAt": "2025-08-27T21:08:01.8909603Z", + "IsFormSubmission": false, + "FormData": null + } + ], + "JavaScriptErrors": [], + "FormErrors": [], + "ResourceErrors": [], + "Summary": { + "TotalUrls": 97, + "TestedUrls": 97, + "DeadLinks": 0, + "HttpErrors": 97, + "JavaScriptErrors": 0, + "FormErrors": 0, + "ResourceErrors": 0, + "SuccessRate": 0, + "MostCommonErrors": [ + "ServiceUnavailable (97 occurrences)" + ], + "Recommendations": [ + "Overall success rate is below 95% - prioritize fixing critical errors", + "Implement automated monitoring for dead links and errors in CI/CD pipeline" + ] + }, + "TestedUrls": [ + "https://localhost:5001", + "https://localhost:5001/api/Auth/login", + "https://localhost:5001/api/bot/messages/pending", + "https://localhost:5001/api/bot/messages/{id}/mark-sent", + "https://localhost:5001/api/bot/messages/{id}/mark-failed", + "https://localhost:5001/api/bot/messages/test-create", + "https://localhost:5001/api/bot/messages/customer-create", + "https://localhost:5001/api/bot/messages/customer/{customerId}", + "https://localhost:5001/api/Bots/register", + "https://localhost:5001/api/Bots/authenticate", + "https://localhost:5001/api/Bots/settings", + "https://localhost:5001/api/Bots/heartbeat", + "https://localhost:5001/api/Bots/platform-info", + "https://localhost:5001/api/Bots/metrics", + "https://localhost:5001/api/Bots/metrics/batch", + "https://localhost:5001/api/Bots/sessions/start", + "https://localhost:5001/api/Bots/sessions/{sessionId}", + "https://localhost:5001/api/Bots/sessions/{sessionId}/end", + "https://localhost:5001/api/Bots/GetAllBots", + "https://localhost:5001/api/Bots/{id}", + "https://localhost:5001/api/Bots/{id}/metrics", + "https://localhost:5001/api/Bots/{id}/metrics/summary", + "https://localhost:5001/api/Bots/{id}/sessions", + "https://localhost:5001/api/Catalog/categories", + "https://localhost:5001/api/Catalog/categories/{id}", + "https://localhost:5001/api/Catalog/products", + "https://localhost:5001/api/Catalog/products/{id}", + "https://localhost:5001/api/Customers/GetCustomers", + "https://localhost:5001/api/Customers/{id}", + "https://localhost:5001/api/Customers/by-telegram/{telegramUserId}", + "https://localhost:5001/api/Customers/CreateCustomer", + "https://localhost:5001/api/Customers/get-or-create", + "https://localhost:5001/api/Customers/{id}/block", + "https://localhost:5001/api/Customers/{id}/unblock", + "https://localhost:5001/api/Home/Index", + "https://localhost:5001/api/Messages/SendMessage", + "https://localhost:5001/api/Messages/{id}", + "https://localhost:5001/api/Messages/customer/{customerId}", + "https://localhost:5001/api/Messages/order/{orderId}", + "https://localhost:5001/api/Messages/pending", + "https://localhost:5001/api/Messages/{id}/mark-sent", + "https://localhost:5001/api/Messages/{id}/mark-delivered", + "https://localhost:5001/api/Messages/{id}/mark-failed", + "https://localhost:5001/api/Orders/GetAllOrders", + "https://localhost:5001/api/Orders/{id}", + "https://localhost:5001/api/Orders/{id}/status", + "https://localhost:5001/api/Orders/by-identity/{identityReference}", + "https://localhost:5001/api/Orders/by-customer/{customerId}", + "https://localhost:5001/api/Orders/by-identity/{identityReference}/{id}", + "https://localhost:5001/api/Orders/CreateOrder", + "https://localhost:5001/api/Orders/{id}/payments", + "https://localhost:5001/api/Orders/payments/{paymentId}/status", + "https://localhost:5001/api/Orders/{id}/cancel", + "https://localhost:5001/api/Orders/payments/webhook", + "https://localhost:5001/api/Test/create-product", + "https://localhost:5001/api/Test/setup-test-data", + "https://localhost:5001/api/Account/Login", + "https://localhost:5001/api/Account/Logout", + "https://localhost:5001/api/Account/AccessDenied", + "https://localhost:5001/api/Bots/Index", + "https://localhost:5001/api/Bots/Details", + "https://localhost:5001/api/Bots/Create", + "https://localhost:5001/api/Bots/Wizard", + "https://localhost:5001/api/Bots/CompleteWizard", + "https://localhost:5001/api/Bots/Edit", + "https://localhost:5001/api/Bots/Metrics", + "https://localhost:5001/api/Bots/Delete", + "https://localhost:5001/api/Bots/Suspend", + "https://localhost:5001/api/Bots/Activate", + "https://localhost:5001/api/Bots/RegenerateKey", + "https://localhost:5001/api/Categories/Index", + "https://localhost:5001/api/Categories/Create", + "https://localhost:5001/api/Categories/Edit", + "https://localhost:5001/api/Categories/Delete", + "https://localhost:5001/api/Dashboard/Index", + "https://localhost:5001/api/Messages/Index", + "https://localhost:5001/api/Messages/Customer", + "https://localhost:5001/api/Messages/Reply", + "https://localhost:5001/api/Orders/Index", + "https://localhost:5001/api/Orders/Details", + "https://localhost:5001/api/Orders/Create", + "https://localhost:5001/api/Orders/Edit", + "https://localhost:5001/api/Orders/UpdateStatus", + "https://localhost:5001/api/Products/Index", + "https://localhost:5001/api/Products/Create", + "https://localhost:5001/api/Products/Edit", + "https://localhost:5001/api/Products/UploadPhoto", + "https://localhost:5001/api/Products/DeletePhoto", + "https://localhost:5001/api/Products/Delete", + "https://localhost:5001/api/ShippingRates/Index", + "https://localhost:5001/api/ShippingRates/Create", + "https://localhost:5001/api/ShippingRates/Edit", + "https://localhost:5001/api/ShippingRates/Delete", + "https://localhost:5001/api/Users/Index", + "https://localhost:5001/api/Users/Create", + "https://localhost:5001/api/Users/Edit", + "https://localhost:5001/api/Users/Delete" + ], + "SkippedUrls": [] +} \ No newline at end of file diff --git a/LittleShop/TestAgent_Results/executive_summary.json b/LittleShop/TestAgent_Results/executive_summary.json new file mode 100644 index 0000000..814b084 --- /dev/null +++ b/LittleShop/TestAgent_Results/executive_summary.json @@ -0,0 +1,31 @@ +{ + "ProjectPath": "C:\\Production\\Source\\LittleShop\\LittleShop", + "ProjectType": "Project (ASP.NET Core)", + "TotalEndpoints": 115, + "AuthenticatedEndpoints": 78, + "TestableStates": 3, + "IdentifiedGaps": 224, + "SuggestedTests": 190, + "DeadLinks": 0, + "HttpErrors": 97, + "VisualIssues": 0, + "SecurityInsights": 1, + "PerformanceInsights": 1, + "OverallTestCoverage": 16.956521739130434, + "VisualConsistencyScore": 0, + "CriticalRecommendations": [ + "CRITICAL: Test coverage is only 17.0% - implement comprehensive test suite", + "HIGH: Address 97 HTTP errors in the application", + "MEDIUM: Improve visual consistency - current score 0.0%", + "HIGH: Address 224 testing gaps for comprehensive coverage" + ], + "GeneratedFiles": [ + "C:\\Production\\Source\\LittleShop\\LittleShop\\TestAgent_Results\\project_structure.json", + "C:\\Production\\Source\\LittleShop\\LittleShop\\TestAgent_Results\\authentication_analysis.json", + "C:\\Production\\Source\\LittleShop\\LittleShop\\TestAgent_Results\\endpoint_discovery.json", + "C:\\Production\\Source\\LittleShop\\LittleShop\\TestAgent_Results\\coverage_analysis.json", + "C:\\Production\\Source\\LittleShop\\LittleShop\\TestAgent_Results\\error_detection.json", + "C:\\Production\\Source\\LittleShop\\LittleShop\\TestAgent_Results\\visual_testing.json", + "C:\\Production\\Source\\LittleShop\\LittleShop\\TestAgent_Results\\intelligent_analysis.json" + ] +} \ No newline at end of file diff --git a/LittleShop/TestAgent_Results/intelligent_analysis.json b/LittleShop/TestAgent_Results/intelligent_analysis.json new file mode 100644 index 0000000..d2adbb6 --- /dev/null +++ b/LittleShop/TestAgent_Results/intelligent_analysis.json @@ -0,0 +1,79 @@ +{ + "BusinessLogicInsights": [ + { + "Component": "Claude CLI Integration", + "Insight": "Error analyzing business logic: Failed to execute Claude CLI: An error occurred trying to start process \u0027claude\u0027 with working directory \u0027C:\\Production\\Source\\TestAgent\u0027. The system cannot find the file specified.", + "Complexity": "Unknown", + "PotentialIssues": [], + "TestingRecommendations": [], + "Priority": "Medium" + } + ], + "TestScenarioSuggestions": [ + { + "ScenarioName": "Claude CLI Integration Error", + "Description": "Error generating test scenarios: Failed to execute Claude CLI: An error occurred trying to start process \u0027claude\u0027 with working directory \u0027C:\\Production\\Source\\TestAgent\u0027. The system cannot find the file specified.", + "TestType": "", + "Steps": [], + "ExpectedOutcomes": [], + "Priority": "Medium", + "RequiredData": [], + "Dependencies": [] + } + ], + "SecurityInsights": [ + { + "VulnerabilityType": "Analysis Error", + "Location": "", + "Description": "Error analyzing security: Failed to execute Claude CLI: An error occurred trying to start process \u0027claude\u0027 with working directory \u0027C:\\Production\\Source\\TestAgent\u0027. The system cannot find the file specified.", + "Severity": "Medium", + "Recommendations": [], + "TestingApproaches": [] + } + ], + "PerformanceInsights": [ + { + "Component": "Analysis Error", + "PotentialBottleneck": "Error analyzing performance: Failed to execute Claude CLI: An error occurred trying to start process \u0027claude\u0027 with working directory \u0027C:\\Production\\Source\\TestAgent\u0027. The system cannot find the file specified.", + "Impact": "Unknown", + "OptimizationSuggestions": [], + "TestingStrategies": [] + } + ], + "ArchitecturalRecommendations": [ + { + "Category": "Analysis Error", + "Recommendation": "Error generating architectural recommendations: Failed to execute Claude CLI: An error occurred trying to start process \u0027claude\u0027 with working directory \u0027C:\\Production\\Source\\TestAgent\u0027. The system cannot find the file specified.", + "Rationale": "", + "Impact": "Unknown", + "ImplementationSteps": [] + } + ], + "GeneratedTestCases": [ + { + "TestName": "Claude CLI Integration Error", + "TestCategory": "Error", + "Description": "Error generating test cases: Failed to execute Claude CLI: An error occurred trying to start process \u0027claude\u0027 with working directory \u0027C:\\Production\\Source\\TestAgent\u0027. The system cannot find the file specified.", + "TestCode": "", + "TestData": [], + "ExpectedOutcome": "", + "Reasoning": "" + } + ], + "Summary": { + "TotalInsights": 4, + "HighPriorityItems": 0, + "GeneratedTestCases": 1, + "SecurityIssuesFound": 1, + "PerformanceOptimizations": 1, + "KeyFindings": [ + "Performance optimization opportunities identified" + ], + "NextSteps": [ + "Review and prioritize security recommendations", + "Implement generated test cases", + "Address high-priority business logic testing gaps", + "Consider architectural improvements for better testability" + ] + } +} \ No newline at end of file diff --git a/LittleShop/TestAgent_Results/project_structure.json b/LittleShop/TestAgent_Results/project_structure.json new file mode 100644 index 0000000..02fc734 --- /dev/null +++ b/LittleShop/TestAgent_Results/project_structure.json @@ -0,0 +1,1669 @@ +{ + "ProjectPath": "C:\\Production\\Source\\LittleShop\\LittleShop", + "ProjectType": "Project (ASP.NET Core)", + "Controllers": [ + "AuthController", + "BotMessagesController", + "BotsController", + "CatalogController", + "CustomersController", + "HomeController", + "MessagesController", + "OrdersController", + "TestController", + "AccountController", + "BotsController", + "CategoriesController", + "DashboardController", + "MessagesController", + "OrdersController", + "ProductsController", + "ShippingRatesController", + "UsersController" + ], + "Endpoints": [ + { + "Controller": "AuthController", + "Action": "Login", + "Route": "login", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "LoginDto loginDto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotMessagesController", + "Action": "GetPendingMessages", + "Route": "pending", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "string platform" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotMessagesController", + "Action": "MarkMessageAsSent", + "Route": "{id}/mark-sent", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id", + "string? platformMessageId" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotMessagesController", + "Action": "MarkMessageAsFailed", + "Route": "{id}/mark-failed", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id", + "string reason" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotMessagesController", + "Action": "CreateTestMessage", + "Route": "test-create", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "CreateTestMessageDto dto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotMessagesController", + "Action": "CreateCustomerMessage", + "Route": "customer-create", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "CreateCustomerMessageFromTelegramDto dto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotMessagesController", + "Action": "GetCustomerMessages", + "Route": "customer/{customerId}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid customerId" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "RegisterBot", + "Route": "register", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "BotRegistrationDto dto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": true + }, + { + "Controller": "BotsController", + "Action": "AuthenticateBot", + "Route": "authenticate", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "BotAuthenticateDto dto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": true + }, + { + "Controller": "BotsController", + "Action": "GetBotSettings", + "Route": "settings", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "UpdateBotSettings", + "Route": "settings", + "HttpMethods": [ + "PUT" + ], + "Parameters": [ + "UpdateBotSettingsDto dto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "RecordHeartbeat", + "Route": "heartbeat", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "BotHeartbeatDto dto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "UpdatePlatformInfo", + "Route": "platform-info", + "HttpMethods": [ + "PUT" + ], + "Parameters": [ + "UpdatePlatformInfoDto dto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "RecordMetric", + "Route": "metrics", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "CreateBotMetricDto dto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "RecordMetricsBatch", + "Route": "metrics/batch", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "BotMetricsBatchDto dto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "StartSession", + "Route": "sessions/start", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "CreateBotSessionDto dto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "UpdateSession", + "Route": "sessions/{sessionId}", + "HttpMethods": [ + "PUT" + ], + "Parameters": [ + "Guid sessionId", + "UpdateBotSessionDto dto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "EndSession", + "Route": "sessions/{sessionId}/end", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid sessionId" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "GetAllBots", + "Route": "Bots/GetAllBots", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": true, + "RequiredRoles": [ + "Admin" + ], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "GetBot", + "Route": "{id}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": true, + "RequiredRoles": [ + "Admin" + ], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "GetBotMetrics", + "Route": "{id}/metrics", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id", + "DateTime? startDate", + "DateTime? endDate" + ], + "RequiresAuthentication": true, + "RequiredRoles": [ + "Admin" + ], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "GetMetricsSummary", + "Route": "{id}/metrics/summary", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id", + "DateTime? startDate", + "DateTime? endDate" + ], + "RequiresAuthentication": true, + "RequiredRoles": [ + "Admin" + ], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "GetBotSessions", + "Route": "{id}/sessions", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id", + "bool activeOnly" + ], + "RequiresAuthentication": true, + "RequiredRoles": [ + "Admin" + ], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "DeleteBot", + "Route": "{id}", + "HttpMethods": [ + "DELETE" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": true, + "RequiredRoles": [ + "Admin" + ], + "AllowsAnonymous": false + }, + { + "Controller": "CatalogController", + "Action": "GetCategories", + "Route": "categories", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "CatalogController", + "Action": "GetCategory", + "Route": "categories/{id}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "CatalogController", + "Action": "GetProducts", + "Route": "products", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "int pageNumber", + "int pageSize", + "Guid? categoryId" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "CatalogController", + "Action": "GetProduct", + "Route": "products/{id}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "CustomersController", + "Action": "GetCustomers", + "Route": "Customers/GetCustomers", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "string? search" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "CustomersController", + "Action": "GetCustomer", + "Route": "{id}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "CustomersController", + "Action": "GetCustomerByTelegramId", + "Route": "by-telegram/{telegramUserId}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "long telegramUserId" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "CustomersController", + "Action": "CreateCustomer", + "Route": "Customers/CreateCustomer", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "CreateCustomerDto createCustomerDto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "CustomersController", + "Action": "GetOrCreateCustomer", + "Route": "get-or-create", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "CreateCustomerDto createCustomerDto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": true + }, + { + "Controller": "CustomersController", + "Action": "UpdateCustomer", + "Route": "{id}", + "HttpMethods": [ + "PUT" + ], + "Parameters": [ + "Guid id", + "UpdateCustomerDto updateCustomerDto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "CustomersController", + "Action": "BlockCustomer", + "Route": "{id}/block", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id", + "string reason" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "CustomersController", + "Action": "UnblockCustomer", + "Route": "{id}/unblock", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "CustomersController", + "Action": "DeleteCustomer", + "Route": "{id}", + "HttpMethods": [ + "DELETE" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "HomeController", + "Action": "Index", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "MessagesController", + "Action": "SendMessage", + "Route": "Messages/SendMessage", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "CreateCustomerMessageDto createMessageDto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "MessagesController", + "Action": "GetMessage", + "Route": "{id}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "MessagesController", + "Action": "GetCustomerMessages", + "Route": "customer/{customerId}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid customerId" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "MessagesController", + "Action": "GetOrderMessages", + "Route": "order/{orderId}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid orderId" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "MessagesController", + "Action": "GetPendingMessages", + "Route": "pending", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "string platform" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": true + }, + { + "Controller": "MessagesController", + "Action": "MarkMessageAsSent", + "Route": "{id}/mark-sent", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id", + "string? platformMessageId" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": true + }, + { + "Controller": "MessagesController", + "Action": "MarkMessageAsDelivered", + "Route": "{id}/mark-delivered", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "MessagesController", + "Action": "MarkMessageAsFailed", + "Route": "{id}/mark-failed", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id", + "string reason" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": true + }, + { + "Controller": "OrdersController", + "Action": "GetAllOrders", + "Route": "Orders/GetAllOrders", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": true, + "RequiredRoles": [ + "Admin" + ], + "AllowsAnonymous": false + }, + { + "Controller": "OrdersController", + "Action": "GetOrder", + "Route": "{id}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": true, + "RequiredRoles": [ + "Admin" + ], + "AllowsAnonymous": false + }, + { + "Controller": "OrdersController", + "Action": "UpdateOrderStatus", + "Route": "{id}/status", + "HttpMethods": [ + "PUT" + ], + "Parameters": [ + "Guid id", + "UpdateOrderStatusDto updateOrderStatusDto" + ], + "RequiresAuthentication": true, + "RequiredRoles": [ + "Admin" + ], + "AllowsAnonymous": false + }, + { + "Controller": "OrdersController", + "Action": "GetOrdersByIdentity", + "Route": "by-identity/{identityReference}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "string identityReference" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": true + }, + { + "Controller": "OrdersController", + "Action": "GetOrdersByCustomerId", + "Route": "by-customer/{customerId}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid customerId" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": true + }, + { + "Controller": "OrdersController", + "Action": "GetOrderByIdentity", + "Route": "by-identity/{identityReference}/{id}", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "string identityReference", + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": true + }, + { + "Controller": "OrdersController", + "Action": "CreateOrder", + "Route": "Orders/CreateOrder", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "CreateOrderDto createOrderDto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": true + }, + { + "Controller": "OrdersController", + "Action": "CreatePayment", + "Route": "{id}/payments", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id", + "CreatePaymentDto createPaymentDto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": true + }, + { + "Controller": "OrdersController", + "Action": "GetOrderPayments", + "Route": "{id}/payments", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "OrdersController", + "Action": "GetPaymentStatus", + "Route": "payments/{paymentId}/status", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid paymentId" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "OrdersController", + "Action": "CancelOrder", + "Route": "{id}/cancel", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id", + "CancelOrderDto cancelOrderDto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "OrdersController", + "Action": "PaymentWebhook", + "Route": "payments/webhook", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "PaymentWebhookDto webhookDto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "TestController", + "Action": "CreateTestProduct", + "Route": "create-product", + "HttpMethods": [ + "POST" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "TestController", + "Action": "SetupTestData", + "Route": "setup-test-data", + "HttpMethods": [ + "POST" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "AccountController", + "Action": "Login", + "Route": "Account/Login", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "AccountController", + "Action": "Login", + "Route": "Account/Login", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "string username", + "string password" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "AccountController", + "Action": "Logout", + "Route": "Account/Logout", + "HttpMethods": [ + "POST" + ], + "Parameters": [], + "RequiresAuthentication": true, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "AccountController", + "Action": "AccessDenied", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "Index", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "Details", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "Create", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "Wizard", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "Wizard", + "Route": "Bots/Wizard", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "BotWizardDto dto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "CompleteWizard", + "Route": "Bots/CompleteWizard", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "BotWizardDto dto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "Create", + "Route": "Bots/Create", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "BotRegistrationDto dto" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "Edit", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "Edit", + "Route": "Bots/Edit", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id", + "string settingsJson", + "BotStatus status" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "Metrics", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id", + "DateTime? startDate", + "DateTime? endDate" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "Delete", + "Route": "Bots/Delete", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "Suspend", + "Route": "Bots/Suspend", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "Activate", + "Route": "Bots/Activate", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "BotsController", + "Action": "RegenerateKey", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "CategoriesController", + "Action": "Index", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "CategoriesController", + "Action": "Create", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "CategoriesController", + "Action": "Create", + "Route": "Categories/Create", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "CreateCategoryDto model" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "CategoriesController", + "Action": "Edit", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "CategoriesController", + "Action": "Edit", + "Route": "Categories/Edit", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id", + "UpdateCategoryDto model" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "CategoriesController", + "Action": "Delete", + "Route": "Categories/Delete", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "DashboardController", + "Action": "Index", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "MessagesController", + "Action": "Index", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "MessagesController", + "Action": "Customer", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "MessagesController", + "Action": "Reply", + "Route": "Messages/Reply", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid customerId", + "string content", + "bool isUrgent" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "OrdersController", + "Action": "Index", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "OrdersController", + "Action": "Details", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "OrdersController", + "Action": "Create", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "OrdersController", + "Action": "Create", + "Route": "Orders/Create", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "CreateOrderDto model" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "OrdersController", + "Action": "Edit", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "OrdersController", + "Action": "Edit", + "Route": "Orders/Edit", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id", + "OrderDto model" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "OrdersController", + "Action": "UpdateStatus", + "Route": "Orders/UpdateStatus", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id", + "UpdateOrderStatusDto model" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "ProductsController", + "Action": "Index", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "ProductsController", + "Action": "Create", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "ProductsController", + "Action": "Create", + "Route": "Products/Create", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "CreateProductDto model" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "ProductsController", + "Action": "Edit", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "ProductsController", + "Action": "Edit", + "Route": "Products/Edit", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id", + "UpdateProductDto model" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "ProductsController", + "Action": "UploadPhoto", + "Route": "Products/UploadPhoto", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id", + "IFormFile file", + "string? altText" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "ProductsController", + "Action": "DeletePhoto", + "Route": "Products/DeletePhoto", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id", + "Guid photoId" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "ProductsController", + "Action": "Delete", + "Route": "Products/Delete", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "ShippingRatesController", + "Action": "Index", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "ShippingRatesController", + "Action": "Create", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "ShippingRatesController", + "Action": "Create", + "Route": "ShippingRates/Create", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "CreateShippingRateDto model" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "ShippingRatesController", + "Action": "Edit", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "ShippingRatesController", + "Action": "Edit", + "Route": "ShippingRates/Edit", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id", + "UpdateShippingRateDto model" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "ShippingRatesController", + "Action": "Delete", + "Route": "ShippingRates/Delete", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "UsersController", + "Action": "Index", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "UsersController", + "Action": "Create", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "UsersController", + "Action": "Create", + "Route": "Users/Create", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "CreateUserDto model" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "UsersController", + "Action": "Edit", + "Route": "", + "HttpMethods": [ + "GET" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "UsersController", + "Action": "Edit", + "Route": "Users/Edit", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id", + "UpdateUserDto model" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + }, + { + "Controller": "UsersController", + "Action": "Delete", + "Route": "Users/Delete", + "HttpMethods": [ + "POST" + ], + "Parameters": [ + "Guid id" + ], + "RequiresAuthentication": false, + "RequiredRoles": [], + "AllowsAnonymous": false + } + ], + "Authentication": { + "HasAuthentication": true, + "AuthenticationSchemes": [ + "Identity", + "JWT", + "Cookies" + ], + "HasAuthorizeAttributes": true, + "HasIdentity": true, + "HasJWT": true, + "HasCookieAuth": true + }, + "Dependencies": [ + "Microsoft.AspNetCore.Authentication.JwtBearer", + "Microsoft.EntityFrameworkCore.Design", + "Microsoft.EntityFrameworkCore.Sqlite", + "AutoMapper", + "FluentValidation", + "FluentValidation.AspNetCore", + "Serilog.AspNetCore", + "Serilog.Sinks.File", + "Swashbuckle.AspNetCore", + "Microsoft.AspNetCore.Identity.EntityFrameworkCore", + "System.IdentityModel.Tokens.Jwt", + "BTCPayServer.Client", + "NBitcoin", + "Newtonsoft.Json" + ], + "HasIdentity": true, + "HasSwagger": true, + "StartupClass": "Program" +} \ No newline at end of file diff --git a/LittleShop/TestAgent_Results/visual_testing.json b/LittleShop/TestAgent_Results/visual_testing.json new file mode 100644 index 0000000..97a5885 --- /dev/null +++ b/LittleShop/TestAgent_Results/visual_testing.json @@ -0,0 +1,17 @@ +{ + "ConsistencyTests": [], + "AuthStateComparisons": [], + "ResponsiveTests": [], + "ComponentTests": [], + "Regressions": [], + "Summary": { + "TotalTests": 0, + "PassedTests": 0, + "FailedTests": 0, + "ConsistencyViolations": 0, + "ResponsiveIssues": 0, + "VisualRegressions": 0, + "OverallScore": 0, + "Recommendations": [] + } +} \ No newline at end of file diff --git a/LittleShop/appsettings.Production.json b/LittleShop/appsettings.Production.json.bak similarity index 100% rename from LittleShop/appsettings.Production.json rename to LittleShop/appsettings.Production.json.bak diff --git a/LittleShop/littleshop.db-shm b/LittleShop/littleshop.db-shm index 4b16b3fcb387ec85555b6fb829af1b242f9418f9..f15ac3c07062184826f37e80fec6601d902e4a29 100644 GIT binary patch literal 32768 zcmeI*$5Iqg6vpubBbWsRbN~ZEg&D-0Frk<;MhuuSj#}l$z0c#qNAOA9xN+9LfPUSG zWmzt!scvugz5lNIYNn=cpL@=aHTRakj#~6|C{1SVZ}oXhnf}=F`Q7(#m1?Q>sXkMm ztWCZD@}b^VD<@p9Qt=bj{qe{1>*wDe&H7eS`jr7?P-#^bDxFG~vQAmA>{j+DdzF34 zeq~HKpd3^VDTkFKN?GYvhLmBYqC|D0_vSu(^u1T9DkI7kWvjAH*{ntrmsyA+W|y=A)6^chPLM-1j)!;3l0ubj=$*M3pt5fz`)pKapT!X2H-gBMsHyZ`{<3akis z^n{a_>~+F7Se|!*Hr?~FL3ePB+j+ZacWl~T=DlS{{VlLJj&^3-tOVM#D(qd|7K`o_ z;_*pfrBA~!3j&D*R@u=+>sgF|KLQ=`y@USD!z2haF3@QcjV}&*Ww)IUdVU{=@3P}Q zj+MboJ$5F8s+4pou-Z LzLdLG&Mr`* delta 461 zcmb7=J5K^Z6ot>sfXm_o5L8@5MO1u%h%fMkqC}!7v9z`EFPPZ4Cicdxh5x{UMzX(v z*xC>iD=TAbtf(~61EHYxCST^9xp(f|8Pk-eDKCTX2{gh*1mG=k&5?X8`1Gj#l*^g$ z+sVyq`T73zuKM9o|E*`MW;FW#wnb}O!nnN(g$>#ikwlRQ86#0*SVAP7&5AZv5oyaI z;;nr;J1@_&*0H?SeHcap85HcCtV^vIBbdXgT{(Xd%wH%07c<{dN$6HiKIndoB8fHZ zHxK9mUO$g@9MDFDzXRRq!5~7I#0-|PjXV=oq4#mb6gE(7)@dFLVHPWPtq>Jz3Og2C z`!w{!;4@-az$QQTkhPyuAHX;kk;M^hUFtzhUqhWLa diff --git a/LittleShop/littleshop.db-wal b/LittleShop/littleshop.db-wal index b28be277589bda8fd19f131502755aa8a755ac8c..df04f2369a47d09462e38d538b31f513f24ddfa2 100644 GIT binary patch literal 453232 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 RZW_91=%hiTp+nPBsekIRYPtXb literal 321392 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

_ zi9kUbIzP&wJ2xsT5AK5ApSrsm zmy$z&SYSw~PhjtK>EpecKd`?#cthK$d8Jtf!(}myE5)wnLrp@Kzzt1C!UmbhSSE{f z|3zwkW_EUNX4d_4uMHDd@7}dmQ3r1q(APQ<7K0h7BCb z8b7>i&3397r>e-nYTtIaC_mb3p_d&PYM~pCTn5Hi8RIbM8Nzt8G%yeva~2VisR%|q zsZliBF5A2AA*DNg^7zTsdq&pUB&{(nv|zgs^q!!np^0vOl7@SSXec%g-%NypFJ5PA z0ZdaB!uOT$A11JFKU|wmUtm36VC>P;-}!Fq&QGoD3q0$6&-;$|jQ36NY47Xa6W*iV z!=O3vWp|^+1qmPlB!C2v01`j~NB{{S0VIF~kN^^R`3X3&fFD3#V5hU7A20B)4*f;t z@BYl^{$dQaRmNUb@~ZVq;XhoE01`j~NB{{S0VIF~kN^@u0h+MKmKCp)|;A(0HC+tqP40aVYr-+b1JzW9xfl= z6%1Od8VbS;;8P%2Kouw*Y*@SLQ>)8msP6+;?Avz+Ye5B|76)0HiWDMRlmv+a1~LYb z2x6ji%tg$oq*=D>?Z3Cr1@A3)n~Ql!Q^;#aUw~x^j9&?Z`U0pgfcgTU za^8Q^LVW?JeS-P|1il-GTCIb6;=! z^9cUTTl!n;swUWzE!H99{W~(7IGEtgY1M)L6*X6>i0wLLg_v3K7|VsKmter z2_OL^fCP{L5G=u3!pV|k5xM9*PhkLwG8viyDKmter z2_OL^fCP{L5Oml}uO5fQr8G2b@752pkzabx zRu3|m%z5{g4zejpaczqS8Oozu-Qq!p5`FI4;z5QoX71eTK?YOfj&AWFLn$Ih@`Du7 zTpVn%o02S6ws?@CG`Bk}TsyTFeDDRTnQ%b@2jK z7cWqC@d8yBFHm*y0#z3;P<8PFRTnQ%b@2k@&i1}v;H|p#?cc3l`?I-Upni9${{H%X z_0{^_-s9eb-hH{U0O$7x?*q{xAPz@1Lw5e!+MF)E78c zE+IS*B!C2v01`j~NB{{S0VIF~kN^^Rg%dcFZ^dnU5&8mo#=*W{;0wR@x-b9A@Bc}J zet}nb!$R|s01`j~NB{{S0VIF~kN^@u0!ZMzAg~R70p<+t`vv~qKYZg)pT6`jzR~jw z{LY#45q#eJviCdZ1s*&}B!C2v01`j~NB{{S0VIF~kN^@u0v9lW(Mq{ofvFg^^4|O{ z=nK@GzCg{z3)GyxK+Wk3)SSLR&FKr&oW4NK=?m1HzCg|C3*?yv`hJ1${^w^d|MOqE z^HaHBVC-8ZP!xEuej3yT%i_PT;P2_;KXL4<)aa70DII8nsNL~=$`&Z*v$7qnp-DH#xE)0oIe3lg(f z6PBn*Tb{t54|ltQSsEGmJrzOLo#UOIyO?OF2?{Qo!S6HWjC