littleshop/LittleShop.Tests/Infrastructure/TestWebApplicationFactory.cs
SysAdmin 127be759c8 Refactor payment verification to manual workflow and add comprehensive cleanup tools
Major changes:
• Remove BTCPay Server integration in favor of SilverPAY manual verification
• Add test data cleanup mechanisms (API endpoints and shell scripts)
• Fix compilation errors in TestController (IdentityReference vs CustomerIdentity)
• Add deployment automation scripts for Hostinger VPS
• Enhance integration testing with comprehensive E2E validation
• Add Blazor components and mobile-responsive CSS for admin interface
• Create production environment configuration scripts

Key Features Added:
• Manual payment verification through Admin panel Order Details
• Bulk test data cleanup with proper cascade handling
• Deployment automation with systemd service configuration
• Comprehensive E2E testing suite with SilverPAY integration validation
• Mobile-first admin interface improvements

Security & Production:
• Environment variable configuration for production secrets
• Proper JWT and VAPID key management
• SilverPAY API integration with live credentials
• Database cleanup and maintenance tools

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-25 19:29:00 +01:00

69 lines
2.6 KiB
C#

using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.EntityFrameworkCore.InMemory;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using LittleShop.Data;
using LittleShop.Services;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Moq;
using System.Linq;
namespace LittleShop.Tests.Infrastructure;
public class TestWebApplicationFactory : WebApplicationFactory<Program>
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.ConfigureServices(services =>
{
// Remove the existing DbContext registration
var descriptor = services.SingleOrDefault(d => d.ServiceType == typeof(DbContextOptions<LittleShopContext>));
if (descriptor != null)
services.Remove(descriptor);
// Add InMemory database for testing
services.AddDbContext<LittleShopContext>(options =>
options.UseInMemoryDatabase("InMemoryDbForTesting")
.ConfigureWarnings(warnings => warnings.Default(WarningBehavior.Ignore)));
// Mock external services that might cause issues in tests
services.Replace(ServiceDescriptor.Scoped<IPushNotificationService>(_ => Mock.Of<IPushNotificationService>()));
services.Replace(ServiceDescriptor.Scoped<ITelegramBotManagerService>(_ => Mock.Of<ITelegramBotManagerService>()));
// Build service provider
var sp = services.BuildServiceProvider();
// Create scope for database initialization
using (var scope = sp.CreateScope())
{
var scopedServices = scope.ServiceProvider;
var db = scopedServices.GetRequiredService<LittleShopContext>();
var logger = scopedServices.GetRequiredService<ILogger<TestWebApplicationFactory>>();
// Ensure database is created
db.Database.EnsureCreated();
try
{
// Seed test data if needed
SeedTestData(db);
}
catch (Exception ex)
{
logger.LogError(ex, "An error occurred seeding the database with test data.");
}
}
});
builder.UseEnvironment("Testing");
}
private static void SeedTestData(LittleShopContext context)
{
// Seed test data will be added as needed for specific tests
context.SaveChanges();
}
}