Repository tests

This commit is contained in:
2024-09-18 19:45:38 +03:00
parent aa4ff9f18a
commit 9d08a36c79
12 changed files with 563 additions and 29 deletions

View File

@@ -0,0 +1,29 @@
using ApplicationLayer.InfrastructureServicesInterfaces;
using Bogus;
using Domains.VisaApplicationDomain;
namespace VisaApi.Fakers.VisaApplications
{
/// <summary>
/// Generates past visas
/// </summary>
public sealed class PastVisaFaker : Faker<PastVisa>
{
private IDateTimeProvider dateTimeProvider;
public PastVisaFaker(IDateTimeProvider dateTimeProvider)
{
this.dateTimeProvider = dateTimeProvider;
RuleFor(pv => pv.Name, f => f.Random.Words());
}
public PastVisa GenerateValid()
{
var result = Generate();
result.IssueDate = dateTimeProvider.Now().AddDays(Random.Shared.Next(11, 900));
result.ExpirationDate = result.IssueDate.AddDays(Random.Shared.Next(1, 11));
return result;
}
}
}

View File

@@ -0,0 +1,29 @@
using ApplicationLayer.InfrastructureServicesInterfaces;
using Bogus;
using Domains.VisaApplicationDomain;
namespace VisaApi.Fakers.VisaApplications
{
/// <summary>
/// Generates past visas
/// </summary>
public sealed class PastVisitFaker : Faker<PastVisit>
{
private IDateTimeProvider dateTimeProvider;
public PastVisitFaker(IDateTimeProvider dateTimeProvider)
{
this.dateTimeProvider = dateTimeProvider;
RuleFor(pv => pv.DestinationCountry, f => f.Address.Country());
}
public PastVisit GenerateValid()
{
var result = Generate();
result.StartDate = dateTimeProvider.Now().AddDays(Random.Shared.Next(11, 900));
result.EndDate = result.StartDate.AddDays(Random.Shared.Next(1, 11));
return result;
}
}
}

View File

@@ -0,0 +1,20 @@
using ApplicationLayer.InfrastructureServicesInterfaces;
using Bogus;
using Domains.VisaApplicationDomain;
namespace VisaApi.Fakers.VisaApplications
{
/// <summary>
/// Generates permissions to destination Country
/// </summary>
public sealed class PermissionToDestCountryFaker : Faker<PermissionToDestCountry>
{
public PermissionToDestCountryFaker(IDateTimeProvider dateTimeProvider)
{
RuleFor(p => p.Issuer, f => f.Company.CompanyName());
RuleFor(p => p.ExpirationDate,
f => f.Date.Future(4, dateTimeProvider.Now()));
}
}
}

View File

@@ -0,0 +1,22 @@
using ApplicationLayer.InfrastructureServicesInterfaces;
using Bogus;
using Domains;
using Domains.VisaApplicationDomain;
namespace VisaApi.Fakers.VisaApplications
{
/// <summary>
/// Generates re-entry permissions
/// </summary>
public sealed class ReentryPermitFaker : Faker<ReentryPermit>
{
public ReentryPermitFaker(IDateTimeProvider dateTimeProvider)
{
RuleFor(p => p.Number,
f => f.Random.String(ConfigurationConstraints.ReentryPermitNumberLength));
RuleFor(p => p.ExpirationDate,
f => f.Date.Future(4, dateTimeProvider.Now()));
}
}
}

View File

@@ -1,10 +1,65 @@
namespace VisaApi.Fakers.VisaApplications
using ApplicationLayer.InfrastructureServicesInterfaces;
using Bogus;
using Domains;
using Domains.ApplicantDomain;
using Domains.VisaApplicationDomain;
namespace VisaApi.Fakers.VisaApplications
{
/// <summary>
/// Generates visa applications
/// </summary>
public class VisaApplicationFaker
public sealed class VisaApplicationFaker : Faker<VisaApplication>
{
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<ApplicationStatus>());
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<VisaCategory>());
RuleFor(va => va.ForGroup, f => f.Random.Bool());
RuleFor(va => va.RequestedNumberOfEntries,
f => f.Random.Enum<RequestedNumberOfEntries>());
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;
}
}
}