using Infrastructure.Entities; using Microsoft.EntityFrameworkCore; using Shared; namespace Infrastructure.Stub; public class StubbedContext : OptifitDbContext { public StubbedContext(DbContextOptions options) : base(options) { } public StubbedContext(): this(new DbContextOptionsBuilder() .UseSqlite("DataSource=:memory:") .Options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); var users = new List( [ new User { Id = GenerateGuid().ToString(), Name = "Test", Age = GenerateRandomInt(18, 99), Height = GenerateRandomInt(150, 200), Weight = GenerateRandomInt(50, 150), Sexe = GenerateRandomBool(), Logo = GenerateRandomString(10), NbSessionPerWeek = GenerateRandomInt(1, 7), EGoal = GenerateRandomString(10), ESleepLevel = ESleepLevel.GOOD, ESportLevel = EDifficulty.BEGINNER, HashPassword = GenerateRandomString(10), OAuthProvider = null, OAuthId = null }, new User { Id = GenerateGuid().ToString(), Name = "Test", Age = GenerateRandomInt(18, 99), Height = GenerateRandomInt(150, 200), Weight = GenerateRandomInt(50, 150), Sexe = GenerateRandomBool(), Logo = GenerateRandomString(10), NbSessionPerWeek = GenerateRandomInt(1, 7), EGoal = GenerateRandomString(10), ESleepLevel = ESleepLevel.GOOD, ESportLevel = EDifficulty.BEGINNER, HashPassword = GenerateRandomString(10), OAuthProvider = null, OAuthId = null } ] ); modelBuilder.Entity().HasData(users); } // Methods to generate random data to stub the database public Guid GenerateGuid() { return Guid.NewGuid(); } public string GenerateRandomString(int length) { var random = new Random(); const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; return new string(Enumerable.Repeat(chars, length) .Select(s => s[random.Next(s.Length)]).ToArray()); } public int GenerateRandomInt(int min, int max) { var random = new Random(); return random.Next(min, max); } public DateTime GenerateRandomDate() { var random = new Random(); var start = new DateTime(1995, 1, 1); var range = (DateTime.Today - start).Days; return start.AddDays(random.Next(range)); } public bool GenerateRandomBool() { var random = new Random(); return random.Next(0, 2) > 0; } }