mirror of
https://github.com/bitwarden/server.git
synced 2025-02-08 00:31:27 +01:00
[pm-16528] Fix entity framework query (#5333)
This commit is contained in:
parent
e43a8011f1
commit
bd394eabe9
@ -46,27 +46,17 @@ public class OrganizationDomainRepository : Repository<Core.Entities.Organizatio
|
||||
using var scope = ServiceScopeFactory.CreateScope();
|
||||
var dbContext = GetDatabaseContext(scope);
|
||||
|
||||
var domains = await dbContext.OrganizationDomains
|
||||
.Where(x => x.VerifiedDate == null
|
||||
&& x.JobRunCount != 3
|
||||
&& x.NextRunDate.Year == date.Year
|
||||
&& x.NextRunDate.Month == date.Month
|
||||
&& x.NextRunDate.Day == date.Day
|
||||
&& x.NextRunDate.Hour == date.Hour)
|
||||
.AsNoTracking()
|
||||
var start36HoursWindow = date.AddHours(-36);
|
||||
var end36HoursWindow = date;
|
||||
|
||||
var pastDomains = await dbContext.OrganizationDomains
|
||||
.Where(x => x.NextRunDate >= start36HoursWindow
|
||||
&& x.NextRunDate <= end36HoursWindow
|
||||
&& x.VerifiedDate == null
|
||||
&& x.JobRunCount != 3)
|
||||
.ToListAsync();
|
||||
|
||||
//Get records that have ignored/failed by the background service
|
||||
var pastDomains = dbContext.OrganizationDomains
|
||||
.AsEnumerable()
|
||||
.Where(x => (date - x.NextRunDate).TotalHours > 36
|
||||
&& x.VerifiedDate == null
|
||||
&& x.JobRunCount != 3)
|
||||
.ToList();
|
||||
|
||||
var results = domains.Union(pastDomains);
|
||||
|
||||
return Mapper.Map<List<Core.Entities.OrganizationDomain>>(results);
|
||||
return Mapper.Map<List<Core.Entities.OrganizationDomain>>(pastDomains);
|
||||
}
|
||||
|
||||
public async Task<OrganizationDomainSsoDetailsData?> GetOrganizationDomainSsoDetailsAsync(string email)
|
||||
|
@ -188,4 +188,122 @@ public class OrganizationDomainRepositoryTests
|
||||
var expectedDomain2 = domains.FirstOrDefault(domain => domain.DomainName == organizationDomain2.DomainName);
|
||||
Assert.Null(expectedDomain2);
|
||||
}
|
||||
|
||||
[DatabaseTheory, DatabaseData]
|
||||
public async Task GetManyByNextRunDateAsync_ShouldReturnUnverifiedDomains(
|
||||
IOrganizationRepository organizationRepository,
|
||||
IOrganizationDomainRepository organizationDomainRepository)
|
||||
{
|
||||
// Arrange
|
||||
var id = Guid.NewGuid();
|
||||
|
||||
var organization1 = await organizationRepository.CreateAsync(new Organization
|
||||
{
|
||||
Name = $"Test Org {id}",
|
||||
BillingEmail = $"test+{id}@example.com",
|
||||
Plan = "Test",
|
||||
PrivateKey = "privatekey",
|
||||
|
||||
});
|
||||
|
||||
var organizationDomain = new OrganizationDomain
|
||||
{
|
||||
OrganizationId = organization1.Id,
|
||||
DomainName = $"domain2+{id}@example.com",
|
||||
Txt = "btw+12345"
|
||||
};
|
||||
|
||||
var within36HoursWindow = 1;
|
||||
organizationDomain.SetNextRunDate(within36HoursWindow);
|
||||
|
||||
await organizationDomainRepository.CreateAsync(organizationDomain);
|
||||
|
||||
var date = organizationDomain.NextRunDate;
|
||||
|
||||
// Act
|
||||
var domains = await organizationDomainRepository.GetManyByNextRunDateAsync(date);
|
||||
|
||||
// Assert
|
||||
var expectedDomain = domains.FirstOrDefault(domain => domain.DomainName == organizationDomain.DomainName);
|
||||
Assert.NotNull(expectedDomain);
|
||||
}
|
||||
|
||||
[DatabaseTheory, DatabaseData]
|
||||
public async Task GetManyByNextRunDateAsync_ShouldNotReturnUnverifiedDomains_WhenNextRunDateIsOutside36hoursWindow(
|
||||
IOrganizationRepository organizationRepository,
|
||||
IOrganizationDomainRepository organizationDomainRepository)
|
||||
{
|
||||
// Arrange
|
||||
var id = Guid.NewGuid();
|
||||
|
||||
var organization1 = await organizationRepository.CreateAsync(new Organization
|
||||
{
|
||||
Name = $"Test Org {id}",
|
||||
BillingEmail = $"test+{id}@example.com",
|
||||
Plan = "Test",
|
||||
PrivateKey = "privatekey",
|
||||
|
||||
});
|
||||
|
||||
var organizationDomain = new OrganizationDomain
|
||||
{
|
||||
OrganizationId = organization1.Id,
|
||||
DomainName = $"domain2+{id}@example.com",
|
||||
Txt = "btw+12345"
|
||||
};
|
||||
|
||||
var outside36HoursWindow = 20;
|
||||
organizationDomain.SetNextRunDate(outside36HoursWindow);
|
||||
|
||||
await organizationDomainRepository.CreateAsync(organizationDomain);
|
||||
|
||||
var date = DateTimeOffset.UtcNow.Date.AddDays(1);
|
||||
|
||||
// Act
|
||||
var domains = await organizationDomainRepository.GetManyByNextRunDateAsync(date);
|
||||
|
||||
// Assert
|
||||
var expectedDomain = domains.FirstOrDefault(domain => domain.DomainName == organizationDomain.DomainName);
|
||||
Assert.Null(expectedDomain);
|
||||
}
|
||||
|
||||
[DatabaseTheory, DatabaseData]
|
||||
public async Task GetManyByNextRunDateAsync_ShouldNotReturnVerifiedDomains(
|
||||
IOrganizationRepository organizationRepository,
|
||||
IOrganizationDomainRepository organizationDomainRepository)
|
||||
{
|
||||
// Arrange
|
||||
var id = Guid.NewGuid();
|
||||
|
||||
var organization1 = await organizationRepository.CreateAsync(new Organization
|
||||
{
|
||||
Name = $"Test Org {id}",
|
||||
BillingEmail = $"test+{id}@example.com",
|
||||
Plan = "Test",
|
||||
PrivateKey = "privatekey",
|
||||
|
||||
});
|
||||
|
||||
var organizationDomain = new OrganizationDomain
|
||||
{
|
||||
OrganizationId = organization1.Id,
|
||||
DomainName = $"domain2+{id}@example.com",
|
||||
Txt = "btw+12345"
|
||||
};
|
||||
|
||||
var within36HoursWindow = 1;
|
||||
organizationDomain.SetNextRunDate(within36HoursWindow);
|
||||
organizationDomain.SetVerifiedDate();
|
||||
|
||||
await organizationDomainRepository.CreateAsync(organizationDomain);
|
||||
|
||||
var date = DateTimeOffset.UtcNow.Date.AddDays(1);
|
||||
|
||||
// Act
|
||||
var domains = await organizationDomainRepository.GetManyByNextRunDateAsync(date);
|
||||
|
||||
// Assert
|
||||
var expectedDomain = domains.FirstOrDefault(domain => domain.DomainName == organizationDomain.DomainName);
|
||||
Assert.Null(expectedDomain);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user