1
0
mirror of https://github.com/bitwarden/server.git synced 2025-02-16 01:51:21 +01:00

[pm-5966] Fix Entity Framework query for MySQL (#5170)

Problem: The Entity Framework query was causing a compile-time error.

Changes:
1. Fixed the query.
2. Renamed the variable to replace the comment.
This commit is contained in:
Jimmy Vo 2025-01-07 10:01:23 -05:00 committed by GitHub
parent 2a6abb928d
commit 0e801ca622
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 195 additions and 5 deletions

View File

@ -147,14 +147,13 @@ public class OrganizationDomainRepository : Repository<Core.Entities.Organizatio
using var scope = ServiceScopeFactory.CreateScope();
var dbContext = GetDatabaseContext(scope);
//Get domains that have not been verified after 72 hours
var domains = await dbContext.OrganizationDomains
.Where(x => (DateTime.UtcNow - x.CreationDate).Days == 4
&& x.VerifiedDate == null)
var threeDaysOldUnverifiedDomains = await dbContext.OrganizationDomains
.Where(x => x.CreationDate.Date == DateTime.UtcNow.AddDays(-4).Date
&& x.VerifiedDate == null)
.AsNoTracking()
.ToListAsync();
return Mapper.Map<List<Core.Entities.OrganizationDomain>>(domains);
return Mapper.Map<List<Core.Entities.OrganizationDomain>>(threeDaysOldUnverifiedDomains);
}
public async Task<bool> DeleteExpiredAsync(int expirationPeriod)

View File

@ -0,0 +1,191 @@
using Bit.Core.AdminConsole.Entities;
using Bit.Core.Entities;
using Bit.Core.Repositories;
using Xunit;
namespace Bit.Infrastructure.IntegrationTest.Repositories;
public class OrganizationDomainRepositoryTests
{
[DatabaseTheory, DatabaseData]
public async Task GetExpiredOrganizationDomainsAsync_ShouldReturn3DaysOldUnverifiedDomains(
IUserRepository userRepository,
IOrganizationRepository organizationRepository,
IOrganizationDomainRepository organizationDomainRepository)
{
// Arrange
var id = Guid.NewGuid();
var user1 = await userRepository.CreateAsync(new User
{
Name = "Test User 1",
Email = $"test+{id}@example.com",
ApiKey = "TEST",
SecurityStamp = "stamp",
});
var organization1 = await organizationRepository.CreateAsync(new Organization
{
Name = $"Test Org {id}",
BillingEmail = user1.Email,
Plan = "Test",
PrivateKey = "privatekey",
});
var organizationDomain1 = new OrganizationDomain
{
OrganizationId = organization1.Id,
DomainName = $"domain2+{id}@example.com",
Txt = "btw+12345"
};
var dummyInterval = 1;
organizationDomain1.SetNextRunDate(dummyInterval);
var beforeValidationDate = DateTime.UtcNow.AddDays(-4).Date;
await organizationDomainRepository.CreateAsync(organizationDomain1);
var organization2 = await organizationRepository.CreateAsync(new Organization
{
Name = $"Test Org {id}",
BillingEmail = user1.Email,
Plan = "Test",
PrivateKey = "privatekey",
CreationDate = beforeValidationDate
});
var organizationDomain2 = new OrganizationDomain
{
OrganizationId = organization2.Id,
DomainName = $"domain2+{id}@example.com",
Txt = "btw+12345",
CreationDate = beforeValidationDate
};
organizationDomain2.SetNextRunDate(dummyInterval);
await organizationDomainRepository.CreateAsync(organizationDomain2);
// Act
var domains = await organizationDomainRepository.GetExpiredOrganizationDomainsAsync();
// Assert
var expectedDomain1 = domains.FirstOrDefault(domain => domain.DomainName == organizationDomain1.DomainName);
Assert.NotNull(expectedDomain1);
var expectedDomain2 = domains.FirstOrDefault(domain => domain.DomainName == organizationDomain2.DomainName);
Assert.NotNull(expectedDomain2);
}
[DatabaseTheory, DatabaseData]
public async Task GetExpiredOrganizationDomainsAsync_ShouldNotReturnDomainsUnder3DaysOld(
IUserRepository userRepository,
IOrganizationRepository organizationRepository,
IOrganizationDomainRepository organizationDomainRepository)
{
// Arrange
var id = Guid.NewGuid();
var user = await userRepository.CreateAsync(new User
{
Name = "Test User",
Email = $"test+{id}@example.com",
ApiKey = "TEST",
SecurityStamp = "stamp",
});
var organization = await organizationRepository.CreateAsync(new Organization
{
Name = $"Test Org {id}",
BillingEmail = user.Email,
Plan = "Test",
PrivateKey = "privatekey",
});
var beforeValidationDate = DateTime.UtcNow.AddDays(-1).Date;
var organizationDomain = new OrganizationDomain
{
OrganizationId = organization.Id,
DomainName = $"domain{id}@example.com",
Txt = "btw+12345",
CreationDate = beforeValidationDate
};
var dummyInterval = 1;
organizationDomain.SetNextRunDate(dummyInterval);
await organizationDomainRepository.CreateAsync(organizationDomain);
// Act
var domains = await organizationDomainRepository.GetExpiredOrganizationDomainsAsync();
// Assert
var expectedDomain2 = domains.FirstOrDefault(domain => domain.DomainName == organizationDomain.DomainName);
Assert.Null(expectedDomain2);
}
[DatabaseTheory, DatabaseData]
public async Task GetExpiredOrganizationDomainsAsync_ShouldNotReturnVerifiedDomains(
IUserRepository userRepository,
IOrganizationRepository organizationRepository,
IOrganizationDomainRepository organizationDomainRepository)
{
// Arrange
var id = Guid.NewGuid();
var user = await userRepository.CreateAsync(new User
{
Name = "Test User 1",
Email = $"test+{id}@example.com",
ApiKey = "TEST",
SecurityStamp = "stamp",
});
var organization1 = await organizationRepository.CreateAsync(new Organization
{
Name = $"Test Org {id}",
BillingEmail = user.Email,
Plan = "Test",
PrivateKey = "privatekey",
});
var organizationDomain1 = new OrganizationDomain
{
OrganizationId = organization1.Id,
DomainName = $"domain2+{id}@example.com",
Txt = "btw+12345"
};
organizationDomain1.SetVerifiedDate();
var dummyInterval = 1;
organizationDomain1.SetNextRunDate(dummyInterval);
await organizationDomainRepository.CreateAsync(organizationDomain1);
var organization2 = await organizationRepository.CreateAsync(new Organization
{
Name = $"Test Org {id}",
BillingEmail = user.Email,
Plan = "Test",
PrivateKey = "privatekey",
});
var organizationDomain2 = new OrganizationDomain
{
OrganizationId = organization2.Id,
DomainName = $"domain2+{id}@example.com",
Txt = "btw+12345"
};
organizationDomain2.SetNextRunDate(dummyInterval);
organizationDomain2.SetVerifiedDate();
await organizationDomainRepository.CreateAsync(organizationDomain2);
// Act
var domains = await organizationDomainRepository.GetExpiredOrganizationDomainsAsync();
// Assert
var expectedDomain1 = domains.FirstOrDefault(domain => domain.DomainName == organizationDomain1.DomainName);
Assert.Null(expectedDomain1);
var expectedDomain2 = domains.FirstOrDefault(domain => domain.DomainName == organizationDomain2.DomainName);
Assert.Null(expectedDomain2);
}
}