using ApplicationLayer.InfrastructureServicesInterfaces; using Bogus; using Domains; using Domains.ApplicantDomain; using Domains.VisaApplicationDomain; namespace VisaApi.Fakers.VisaApplications { /// /// Generates visa applications /// public sealed class VisaApplicationFaker : Faker { private static ReentryPermitFaker reentryPermitFaker = null!; private static PermissionToDestCountryFaker permissionToDestCountryFaker = null!; public VisaApplicationFaker(IDateTimeProvider dateTimeProvider) { reentryPermitFaker = new(dateTimeProvider); permissionToDestCountryFaker = new(dateTimeProvider); var pastVisaFaker = new PastVisaFaker(dateTimeProvider); var pastVisitFaker = new PastVisitFaker(dateTimeProvider); RuleFor(va => va.Status, f => f.Random.Enum()); RuleFor(va => va.DestinationCountry, f => f.Address.Country()); RuleFor(va => va.PastVisas, f => f.PickRandom(pastVisaFaker.Generate(3), f.Random.Int(0, 3)).ToList()); RuleFor(va => va.PastVisits, f => f.PickRandom(pastVisitFaker.Generate(3), f.Random.Int(0, 3)).ToList()); RuleFor(va => va.VisaCategory, f => f.Random.Enum()); RuleFor(va => va.ForGroup, f => f.Random.Bool()); RuleFor(va => va.RequestedNumberOfEntries, f => f.Random.Enum()); RuleFor(va => va.RequestDate, dateTimeProvider.Now); RuleFor(va => va.ValidDaysRequested, f => f.Random.Int(1, ConfigurationConstraints.MaxValidDays)); } public VisaApplication GenerateValid(Applicant applicant) { var result = Generate(); result.ApplicantId = applicant.Id; if (applicant.IsNonResident) { result.ReentryPermit = reentryPermitFaker.Generate(); } if (result.VisaCategory is VisaCategory.Transit) { result.PermissionToDestCountry = permissionToDestCountryFaker.Generate(); } return result; } } }