diff --git a/dotnet-client-libraries/BogusNugetPackage/BogusNugetPackage/BogusNugetPackage.csproj b/dotnet-client-libraries/BogusNugetPackage/BogusNugetPackage/BogusNugetPackage.csproj index 6f3921722a..c731a61324 100644 --- a/dotnet-client-libraries/BogusNugetPackage/BogusNugetPackage/BogusNugetPackage.csproj +++ b/dotnet-client-libraries/BogusNugetPackage/BogusNugetPackage/BogusNugetPackage.csproj @@ -2,19 +2,20 @@ Exe - net7.0 + net10.0 enable enable - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + + diff --git a/dotnet-client-libraries/BogusNugetPackage/BogusNugetPackage/DataGenerator.cs b/dotnet-client-libraries/BogusNugetPackage/BogusNugetPackage/DataGenerator.cs index 969831b6be..d6ffc2e22b 100644 --- a/dotnet-client-libraries/BogusNugetPackage/BogusNugetPackage/DataGenerator.cs +++ b/dotnet-client-libraries/BogusNugetPackage/BogusNugetPackage/DataGenerator.cs @@ -7,8 +7,8 @@ namespace BogusNugetPackage; public static class DataGenerator { - public static readonly List Employees = new(); - public static readonly List Vehicles = new(); + public static readonly List Employees = []; + public static readonly List Vehicles = []; public const int NumberOfEmployees = 5; public const int NumberOfVehiclesPerEmployee = 2; @@ -17,7 +17,7 @@ public static List GetSeededEmployeesFromDb() { using var employeeDbContext = new EmployeeContext(); - employeeDbContext.Database.EnsureCreated(); + employeeDbContext.Database.Migrate(); var dbEmployeesWithVehicles = employeeDbContext.Employees .Include(e => e.Vehicles) @@ -31,14 +31,23 @@ public static void InitBogusData() var employeeGenerator = GetEmployeeGenerator(); var generatedEmployees = employeeGenerator.Generate(NumberOfEmployees); Employees.AddRange(generatedEmployees); - generatedEmployees.ForEach(e => Vehicles.AddRange(GetBogusVehicleData(e.Id))); + } + + public static List GenerateRepeatableVehicles(int seed) + { + return new Faker() + .UseSeed(seed) + .RuleFor(v => v.Id, f => f.Random.Guid()) + .RuleFor(v => v.Manufacturer, f => f.Vehicle.Manufacturer()) + .RuleFor(v => v.Fuel, f => f.Vehicle.Fuel()) + .Generate(NumberOfVehiclesPerEmployee); } private static List GetBogusVehicleData(Guid employeeId) { var vehicleGenerator = GetVehicleGenerator(employeeId); var generatedVehicles = vehicleGenerator.Generate(NumberOfVehiclesPerEmployee); - + Vehicles.AddRange(generatedVehicles); return generatedVehicles; } @@ -52,7 +61,11 @@ private static Faker GetEmployeeGenerator() .RuleFor(e => e.Email, (f, e) => f.Internet.Email(e.FirstName, e.LastName)) .RuleFor(e => e.AboutMe, f => f.Lorem.Paragraph(1)) .RuleFor(e => e.YearsOld, f => f.Random.Int(18, 90)) - .RuleFor(e => e.Personality, f => f.PickRandom()); + .RuleFor(e => e.Personality, f => f.PickRandom()) + .RuleFor(e => e.Vehicles, (_, e) => + { + return GetBogusVehicleData(e.Id); + }); } private static Faker GetVehicleGenerator(Guid employeeId) diff --git a/dotnet-client-libraries/BogusNugetPackage/BogusNugetPackage/Database/EmployeeContext.cs b/dotnet-client-libraries/BogusNugetPackage/BogusNugetPackage/Database/EmployeeContext.cs index f0647a5f2a..597ddfcf33 100644 --- a/dotnet-client-libraries/BogusNugetPackage/BogusNugetPackage/Database/EmployeeContext.cs +++ b/dotnet-client-libraries/BogusNugetPackage/BogusNugetPackage/Database/EmployeeContext.cs @@ -9,15 +9,17 @@ public sealed class EmployeeContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder options) { - options.UseSqlServer("Server=localhost;Database=EmployeeDb;Trusted_Connection=True;MultipleActiveResultSets=True;TrustServerCertificate=True"); - options.EnableSensitiveDataLogging(); - } + options.UseSqlServer("Server=localhost;Database=EmployeeDb;Trusted_Connection=True;MultipleActiveResultSets=True;TrustServerCertificate=True") + .UseSeeding((context, _) => + { + if (context.Set().Any()) + { + return; + } - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - base.OnModelCreating(modelBuilder); - - modelBuilder.Entity().HasData(DataGenerator.Employees); - modelBuilder.Entity().HasData(DataGenerator.Vehicles); + context.Set().AddRange(DataGenerator.Employees); + context.SaveChanges(); + }); + options.EnableSensitiveDataLogging(); } } diff --git a/dotnet-client-libraries/BogusNugetPackage/Tests/Tests.cs b/dotnet-client-libraries/BogusNugetPackage/Tests/Tests.cs index a03051e2d3..82532e978a 100644 --- a/dotnet-client-libraries/BogusNugetPackage/Tests/Tests.cs +++ b/dotnet-client-libraries/BogusNugetPackage/Tests/Tests.cs @@ -1,4 +1,5 @@ -using BogusNugetPackage; +using Bogus; +using BogusNugetPackage; using System; using System.Collections.Generic; using System.Linq; @@ -29,12 +30,22 @@ public void WhenGettingSingleVehicle_ThenObjectIsNotNull() } [Fact] - public void WhenGettingSingleEmployee_ThenEmailContainsLastName() + public void WhenGettingSingleEmployee_ThenEmailStartsWithFirstName() { DataGenerator.InitBogusData(); var employee = DataGenerator.Employees.First(); - Assert.Contains(employee.LastName, employee.Email); + // Bogus slugifies the name for the email, so D'angelo becomes Dangelo + Assert.StartsWith(Utils.Slugify(employee.FirstName), employee.Email); + } + + [Fact] + public void WhenGeneratingWithTheSameSeed_ThenVehiclesAreEqual() + { + var first = DataGenerator.GenerateRepeatableVehicles(1338); + var second = DataGenerator.GenerateRepeatableVehicles(1338); + + Assert.Equal(first.Select(v => v.ToString()), second.Select(v => v.ToString())); } } diff --git a/dotnet-client-libraries/BogusNugetPackage/Tests/Tests.csproj b/dotnet-client-libraries/BogusNugetPackage/Tests/Tests.csproj index 81a6582d3f..5eac8b4304 100644 --- a/dotnet-client-libraries/BogusNugetPackage/Tests/Tests.csproj +++ b/dotnet-client-libraries/BogusNugetPackage/Tests/Tests.csproj @@ -1,7 +1,7 @@ - net7.0 + net10.0 enable enable @@ -9,13 +9,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all