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:
parent
2a6abb928d
commit
0e801ca622
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user