Skip to content

Commit

Permalink
BREAKING CHANGE Removed default EntityBehaviour UtcDateTimePropertyEn…
Browse files Browse the repository at this point in the history
…tityBehaviorConfiguration, now datetimes are not defaulted to utc. This is a breaking change! (#8)

Made all references dependent on targetframework
Removed Source Link package from net8.0 targetframework ( https://github.com/dotnet/sourcelink?tab=readme-ov-file#using-source-link-in-net-projects)
Removed option DisableUtcDateTimePropertyEntityBehavior
Refactored unittests to use IClassFixture for setup DbContext to avoid random failing tests
Added test project per target framework

Co-authored-by: Henk Kin <[email protected]>
  • Loading branch information
HenkKin and Henk Kin authored Jan 22, 2024
1 parent e35e745 commit 8e75f3b
Show file tree
Hide file tree
Showing 87 changed files with 4,146 additions and 457 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,21 @@ namespace DataAccessClient.EntityFrameworkCore.SqlServer.Tests.Configuration.Ent
{
public class CreatableIntegrationTests : DbContextTestBase
{
public CreatableIntegrationTests() : base(nameof(CreatableIntegrationTests))
public CreatableIntegrationTests(DatabaseFixture databaseFixture) : base(nameof(CreatableIntegrationTests), databaseFixture)
{
}

[Fact]
public async Task Creatable_WhenCalled_ItShouldSetCreatablePropertiesOnInsert()
{
// Arrange
var userIdentifierProvider = (TestUserIdentifierProvider)ServiceProvider.GetRequiredService<IUserIdentifierProvider<int>>();
var userIdentifierProvider = (TestUserIdentifierProvider)DatabaseFixture.ServiceProvider.GetRequiredService<IUserIdentifierProvider<int>>();

var userIdentifier = 15;
userIdentifierProvider.ChangeUserIdentifier(userIdentifier);
var testEntity = new TestEntity();
TestEntityRepository.Add(testEntity);
await UnitOfWork.SaveAsync();
DatabaseFixture.TestEntityRepository.Add(testEntity);
await DatabaseFixture.UnitOfWork.SaveAsync();

Assert.Equal(userIdentifier, testEntity.CreatedById);
Assert.NotEqual(DateTime.MinValue, testEntity.CreatedOn);
Expand All @@ -35,7 +35,7 @@ public async Task Creatable_WhenCalled_ItShouldSetCreatablePropertiesOnInsert()
userIdentifierProvider.ChangeUserIdentifier(16);
testEntity.Description = "updated";

await UnitOfWork.SaveAsync();
await DatabaseFixture.UnitOfWork.SaveAsync();

Assert.Equal(createdById, testEntity.CreatedById);
Assert.Equal(createdOn, testEntity.CreatedOn);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace DataAccessClient.EntityFrameworkCore.SqlServer.Tests.Configuration.Ent
{
public class IdentiableIntegrationTests : DbContextTestBase
{
public IdentiableIntegrationTests() : base(nameof(IdentiableIntegrationTests))
public IdentiableIntegrationTests(DatabaseFixture databaseFixture) : base(nameof(IdentiableIntegrationTests), databaseFixture)
{
}

Expand All @@ -19,15 +19,15 @@ public async Task Identiable_WhenCalled_ItShouldSetIdentiablePropertiesOnInsert(
var testEntity2 = new TestEntity();
var testEntity3 = new TestEntity();

TestEntityRepository.Add(testEntity1);
TestEntityRepository.Add(testEntity2);
TestEntityRepository.Add(testEntity3);
DatabaseFixture.TestEntityRepository.Add(testEntity1);
DatabaseFixture.TestEntityRepository.Add(testEntity2);
DatabaseFixture.TestEntityRepository.Add(testEntity3);

Assert.Equal(1, testEntity1.Id);
Assert.Equal(2, testEntity2.Id);
Assert.Equal(3, testEntity3.Id);

await UnitOfWork.SaveAsync();
await DatabaseFixture.UnitOfWork.SaveAsync();

Assert.Equal(1, testEntity1.Id);
Assert.Equal(2, testEntity2.Id);
Expand All @@ -37,7 +37,7 @@ public async Task Identiable_WhenCalled_ItShouldSetIdentiablePropertiesOnInsert(
testEntity2.Description = "updated2";
testEntity3.Description = "updated3";

await UnitOfWork.SaveAsync();
await DatabaseFixture.UnitOfWork.SaveAsync();

Assert.Equal(1, testEntity1.Id);
Assert.Equal(2, testEntity2.Id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,27 @@ namespace DataAccessClient.EntityFrameworkCore.SqlServer.Tests.Configuration.Ent
{
public class ModifiableIntegrationTests : DbContextTestBase
{
public ModifiableIntegrationTests() : base(nameof(ModifiableIntegrationTests))
public ModifiableIntegrationTests(DatabaseFixture databaseFixture) : base(nameof(ModifiableIntegrationTests), databaseFixture)
{
}

[Fact]
public async Task Modifiable_WhenCalled_ItShouldSetModifiablePropertiesOnUpdate()
{
// Arrange
var userIdentifierProvider = (TestUserIdentifierProvider)ServiceProvider.GetRequiredService<IUserIdentifierProvider<int>>();
var userIdentifierProvider = (TestUserIdentifierProvider)DatabaseFixture.ServiceProvider.GetRequiredService<IUserIdentifierProvider<int>>();

var userIdentifier = 15;
userIdentifierProvider.ChangeUserIdentifier(userIdentifier);
var testEntity = new TestEntity();
TestEntityRepository.Add(testEntity);
await UnitOfWork.SaveAsync();
DatabaseFixture.TestEntityRepository.Add(testEntity);
await DatabaseFixture.UnitOfWork.SaveAsync();

Assert.Null(testEntity.ModifiedById);
Assert.Null(testEntity.ModifiedOn);

testEntity.Description = "Updated";
await UnitOfWork.SaveAsync();
await DatabaseFixture.UnitOfWork.SaveAsync();

Assert.Equal(userIdentifier, testEntity.ModifiedById);
Assert.NotNull(testEntity.ModifiedOn);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,23 @@ namespace DataAccessClient.EntityFrameworkCore.SqlServer.Tests.Configuration.Ent
{
public class RowVersionableIntegrationTests : DbContextTestBase
{
public RowVersionableIntegrationTests() : base(nameof(RowVersionableIntegrationTests))
public RowVersionableIntegrationTests(DatabaseFixture databaseFixture) : base(nameof(RowVersionableIntegrationTests), databaseFixture)
{
}

[Fact]
public async Task RowVersionable_WhenCalled_ItShouldApplyRowVersioning()
{
// Arrange
var userIdentifierProvider = (TestUserIdentifierProvider)ServiceProvider.GetRequiredService<IUserIdentifierProvider<int>>();
var userIdentifierProvider = (TestUserIdentifierProvider)DatabaseFixture.ServiceProvider.GetRequiredService<IUserIdentifierProvider<int>>();

userIdentifierProvider.ChangeUserIdentifier(10);
var testEntity = new TestEntity
{
RowVersion = new byte[] { 1 }
};
TestEntityRepository.Add(testEntity);
await UnitOfWork.SaveAsync();
DatabaseFixture.TestEntityRepository.Add(testEntity);
await DatabaseFixture.UnitOfWork.SaveAsync();

var rowVersion = testEntity.RowVersion;
var newRowVersion = new byte[] { 2 };
Expand All @@ -35,7 +35,7 @@ public async Task RowVersionable_WhenCalled_ItShouldApplyRowVersioning()
testEntity.Description = $"Updated with rowVersion {newRowVersion}";
testEntity.RowVersion = newRowVersion;

await Assert.ThrowsAsync<RowVersioningException>(() => UnitOfWork.SaveAsync());
await Assert.ThrowsAsync<RowVersioningException>(() => DatabaseFixture.UnitOfWork.SaveAsync());

Assert.NotEqual(rowVersion, testEntity.RowVersion);
Assert.Equal(newRowVersion, testEntity.RowVersion);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,30 +12,30 @@ namespace DataAccessClient.EntityFrameworkCore.SqlServer.Tests.Configuration.Ent
{
public class SoftDeletableIntegrationTests : DbContextTestBase
{
public SoftDeletableIntegrationTests() : base(nameof(SoftDeletableIntegrationTests))
public SoftDeletableIntegrationTests(DatabaseFixture databaseFixture) : base(nameof(SoftDeletableIntegrationTests), databaseFixture)
{
}

[Fact]
public async Task SoftDeletableQueryFilter_WhenCalled_ItShouldApplyQueryFilter()
{
// Arrange
var userIdentifierProvider = (TestUserIdentifierProvider)ServiceProvider.GetRequiredService<IUserIdentifierProvider<int>>();
var softDeletableConfiguration = ServiceProvider.GetRequiredService<ISoftDeletableConfiguration>();
var userIdentifierProvider = (TestUserIdentifierProvider)DatabaseFixture.ServiceProvider.GetRequiredService<IUserIdentifierProvider<int>>();
var softDeletableConfiguration = DatabaseFixture.ServiceProvider.GetRequiredService<ISoftDeletableConfiguration>();

var userIdentifier = 15;
userIdentifierProvider.ChangeUserIdentifier(userIdentifier);

var testEntity1 = new TestEntity();
TestEntityRepository.Add(testEntity1);
DatabaseFixture.TestEntityRepository.Add(testEntity1);
var testEntity2 = new TestEntity();
TestEntityRepository.Add(testEntity2);
DatabaseFixture.TestEntityRepository.Add(testEntity2);

await UnitOfWork.SaveAsync();
await DatabaseFixture.UnitOfWork.SaveAsync();

TestEntityRepository.Remove(testEntity1);
DatabaseFixture.TestEntityRepository.Remove(testEntity1);

await UnitOfWork.SaveAsync();
await DatabaseFixture.UnitOfWork.SaveAsync();
Assert.True(testEntity1.IsDeleted);
Assert.Equal(userIdentifier, testEntity1.DeletedById);
Assert.NotNull(testEntity1.DeletedOn);
Expand All @@ -49,7 +49,7 @@ public async Task SoftDeletableQueryFilter_WhenCalled_ItShouldApplyQueryFilter()
// IsEnabled overrides IsQueryFilterEnabled
Assert.True(softDeletableConfiguration.IsQueryFilterEnabled);

var allEntities = await TestEntityRepository.GetReadOnlyQuery().ToListAsync();
var allEntities = await DatabaseFixture.TestEntityRepository.GetReadOnlyQuery().ToListAsync();
Assert.Equal(2, allEntities.Count);
}
Assert.True(softDeletableConfiguration.IsEnabled);
Expand All @@ -59,21 +59,21 @@ public async Task SoftDeletableQueryFilter_WhenCalled_ItShouldApplyQueryFilter()
{
Assert.False(softDeletableConfiguration.IsQueryFilterEnabled);

var allEntities = await TestEntityRepository.GetReadOnlyQuery().ToListAsync();
var allEntities = await DatabaseFixture.TestEntityRepository.GetReadOnlyQuery().ToListAsync();
Assert.Equal(2, allEntities.Count);
}

Assert.True(softDeletableConfiguration.IsQueryFilterEnabled);

var notDeletedEntities = await TestEntityRepository.GetReadOnlyQuery().ToListAsync();
var notDeletedEntities = await DatabaseFixture.TestEntityRepository.GetReadOnlyQuery().ToListAsync();
Assert.Single(notDeletedEntities);
Assert.False(notDeletedEntities.Single().IsDeleted);

using (softDeletableConfiguration.DisableQueryFilter())
{
Assert.False(softDeletableConfiguration.IsQueryFilterEnabled);

var deletedEntities = await TestEntityRepository.GetReadOnlyQuery()
var deletedEntities = await DatabaseFixture.TestEntityRepository.GetReadOnlyQuery()
.Where(x=>x.IsDeleted).ToListAsync();
Assert.Single(deletedEntities);
Assert.True(deletedEntities.Single().IsDeleted);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,26 +12,26 @@ namespace DataAccessClient.EntityFrameworkCore.SqlServer.Tests.Configuration.Ent
{
public class TenantScopableIntegrationTests : DbContextTestBase
{
public TenantScopableIntegrationTests() : base(nameof(TenantScopableIntegrationTests))
public TenantScopableIntegrationTests(DatabaseFixture databaseFixture) : base(nameof(TenantScopableIntegrationTests), databaseFixture)
{
}

[Fact]
public async Task TenantScopableQueryFilter_WhenCalled_ItShouldApplyQueryFilter()
{
// Arrange
var tenantIdentifierProvider = (TestTenantIdentifierProvider)ServiceProvider.GetRequiredService<ITenantIdentifierProvider<int>>();
var multiTenancyConfiguration = ServiceProvider.GetRequiredService<IMultiTenancyConfiguration>();
var tenantIdentifierProvider = (TestTenantIdentifierProvider)DatabaseFixture.ServiceProvider.GetRequiredService<ITenantIdentifierProvider<int>>();
var multiTenancyConfiguration = DatabaseFixture.ServiceProvider.GetRequiredService<IMultiTenancyConfiguration>();

tenantIdentifierProvider.ChangeTenantIdentifier(1);
var testEntityTenant1 = new TestEntity();
TestEntityRepository.Add(testEntityTenant1);
await UnitOfWork.SaveAsync();
DatabaseFixture.TestEntityRepository.Add(testEntityTenant1);
await DatabaseFixture.UnitOfWork.SaveAsync();

tenantIdentifierProvider.ChangeTenantIdentifier(2);
var testEntityTenant2 = new TestEntity();
TestEntityRepository.Add(testEntityTenant2);
await UnitOfWork.SaveAsync();
DatabaseFixture.TestEntityRepository.Add(testEntityTenant2);
await DatabaseFixture.UnitOfWork.SaveAsync();

multiTenancyConfiguration.EnableQueryFilter();
Assert.True(multiTenancyConfiguration.IsQueryFilterEnabled);
Expand All @@ -40,19 +40,19 @@ public async Task TenantScopableQueryFilter_WhenCalled_ItShouldApplyQueryFilter(
{
Assert.False(multiTenancyConfiguration.IsQueryFilterEnabled);

var allTenantEntities = await TestEntityRepository.GetReadOnlyQuery().ToListAsync();
var allTenantEntities = await DatabaseFixture.TestEntityRepository.GetReadOnlyQuery().ToListAsync();
Assert.Equal(2, allTenantEntities.Count);
}

Assert.True(multiTenancyConfiguration.IsQueryFilterEnabled);

tenantIdentifierProvider.ChangeTenantIdentifier(1);
var tenant1Entities = await TestEntityRepository.GetReadOnlyQuery().ToListAsync();
var tenant1Entities = await DatabaseFixture.TestEntityRepository.GetReadOnlyQuery().ToListAsync();
Assert.Single(tenant1Entities);
Assert.Equal(1, tenant1Entities.Single().TenantId);

tenantIdentifierProvider.ChangeTenantIdentifier(2);
var tenant2Entities = await TestEntityRepository.GetReadOnlyQuery().ToListAsync();
var tenant2Entities = await DatabaseFixture.TestEntityRepository.GetReadOnlyQuery().ToListAsync();
Assert.Single(tenant2Entities);
Assert.Equal(2, tenant2Entities.Single().TenantId);
}
Expand Down

This file was deleted.

Loading

0 comments on commit 8e75f3b

Please sign in to comment.