Skip to content

Commit

Permalink
Version 2 updates (#2)
Browse files Browse the repository at this point in the history
* Now works with smaller BaseEntity objects (from Core version 2.0) so your tables no longer have to have all the properties from BaseEntity
* Expanded ReadOnlyRepository to accept Query or Expression based filtering for almost all functions
* Queries that returned IEnumerable<> now return List<>
* Create, Update, and Delete operations can now accept List
* Delete can now accept an Expression to delete one or many entities
  • Loading branch information
TieDyeGeek authored Jul 23, 2020
1 parent b3bfc11 commit cfb92da
Show file tree
Hide file tree
Showing 11 changed files with 619 additions and 184 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="CSESoftware.Core" Version="1.0.0" />
<PackageReference Include="CSESoftware.Repository" Version="1.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="3.1.3" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
<PackageReference Include="MSTest.TestAdapter" Version="2.1.1" />
<PackageReference Include="MSTest.TestFramework" Version="2.1.1" />
<PackageReference Include="CSESoftware.Core" Version="2.0.0" />
<PackageReference Include="CSESoftware.Repository" Version="2.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="3.1.5" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" />
<PackageReference Include="MSTest.TestAdapter" Version="2.1.2" />
<PackageReference Include="MSTest.TestFramework" Version="2.1.2" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using CSESoftware.Repository.EntityFrameworkCore.TestProject.Setup;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace CSESoftware.Repository.EntityFrameworkCore.TestProject
{
[TestClass]
public class CreateTests : BaseTest
{
[TestMethod]
public async Task CreateOneTest()
{
var options = GetOptions();
var createRepository = GetRepository(options);

createRepository.Create(new Topping
{
Name = "Canadian Bacon",
AdditionalCost = 2.5,
IsActive = false
});
await createRepository.SaveAsync();

var readRepository = GetRepository(options);
var result = (await readRepository.GetAllAsync<Topping>()).ToList();

Assert.AreEqual(1, result.Count);
Assert.AreEqual("Canadian Bacon", result.FirstOrDefault()?.Name);
Assert.AreEqual(2.5, result.FirstOrDefault()?.AdditionalCost);
Assert.IsTrue(result.FirstOrDefault()?.IsActive ?? false);
Assert.IsTrue(result.FirstOrDefault()?.CreatedDate > DateTime.UtcNow.AddSeconds(-3));
Assert.IsTrue(result.FirstOrDefault()?.ModifiedDate > DateTime.UtcNow.AddSeconds(-3));
Assert.IsTrue(result.First().IsActive);
}

[TestMethod]
public async Task CreateOneNoActiveOrDateChangeTest()
{
var options = GetOptions();
var createRepository = GetRepository(options);

createRepository.Create(new Crust
{
Name = "Pan",
AdditionalCost = 2.5,
});
await createRepository.SaveAsync();

var readRepository = GetRepository(options);
var result = (await readRepository.GetAllAsync<Crust>()).ToList();

Assert.AreEqual(1, result.Count);
Assert.AreEqual("Pan", result.FirstOrDefault()?.Name);
Assert.AreEqual(2.5, result.FirstOrDefault()?.AdditionalCost);
}

[TestMethod]
public async Task CreateManyTest()
{
var options = GetOptions();

var topping1 = new Topping
{
Name = "Sausage",
AdditionalCost = 0.5,
IsActive = false
};
var topping2 = new Topping
{
Name = "Bacon",
AdditionalCost = 0.75,
IsActive = false
};
var topping3 = new Topping
{
Name = "Canadian Bacon",
AdditionalCost = 0.75
};
var topping4 = new Topping
{
Name = "Olives",
AdditionalCost = 1.25
};

var toppings = new List<Topping> {topping1, topping2, topping3, topping4};

var createRepository = GetRepository(options);
createRepository.Create(toppings);
await createRepository.SaveAsync();

var readRepository = GetRepository(options);
var result = (await readRepository.GetAllAsync<Topping>()).ToList();

Assert.AreEqual(4, result.Count);
Assert.AreEqual(2, result.Count(x => Math.Abs(x.AdditionalCost - 0.75) < 0.001));
Assert.IsFalse(result.Any(x => !x.IsActive));
Assert.IsFalse(result.Any(x => x.CreatedDate < DateTime.UtcNow.AddSeconds(-3)));
}

[TestMethod]
public async Task CreateManyNoActiveOrDateChangeTest()
{
var options = GetOptions();

var crust1 = new Crust
{
Name = "Thin",
AdditionalCost = 0.5
};
var crust2 = new Crust
{
Name = "Crispy",
AdditionalCost = 0.75

};
var crust3 = new Crust
{
Name = "Thin & Crispy",
AdditionalCost = 0.75
};
var crust4 = new Crust
{
Name = "Pan",
AdditionalCost = 1.25
};

var crusts = new List<Crust> {crust1, crust2, crust3, crust4};

var createRepository = GetRepository(options);
createRepository.Create(crusts);
await createRepository.SaveAsync();

var readRepository = GetRepository(options);
var result = (await readRepository.GetAllAsync<Crust>()).ToList();

Assert.AreEqual(4, result.Count);
Assert.AreEqual(2, result.Count(x => Math.Abs(x.AdditionalCost - 0.75) < 0.001));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using CSESoftware.Repository.EntityFrameworkCore.TestProject.Setup;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace CSESoftware.Repository.EntityFrameworkCore.TestProject
{
[TestClass]
public class DeleteTests : BaseTest
{
[TestMethod]
public async Task DeleteByEntityTest()
{
var options = GetOptions();
var repository = GetRepository(options);

repository.Create(new Topping
{
Name = "Canadian Bacon",
AdditionalCost = 2.5
});
await repository.SaveAsync();


var deleteRepository = GetRepository(options);
deleteRepository.Delete(await deleteRepository.GetFirstAsync<Topping>());
await deleteRepository.SaveAsync();


var readRepository = GetRepository(options);
Assert.AreEqual(false, await readRepository.GetExistsAsync<Topping>(x => x.Id == 1));
Assert.AreEqual(0, await readRepository.GetCountAsync<Topping>());
}

[TestMethod]
public async Task DeleteByIdTest()
{
var options = GetOptions();
var createRepository = GetRepository(options);

createRepository.Create(new Topping
{
Name = "Canadian Bacon",
AdditionalCost = 2.5
});
await createRepository.SaveAsync();


var deleteRepository = GetRepository(options);
deleteRepository.Delete<Topping, int>(1);
await deleteRepository.SaveAsync();


var readRepository = GetRepository(options);
Assert.AreEqual(false, await readRepository.GetExistsAsync<Topping>(x => x.Id == 1));
Assert.AreEqual(0, await readRepository.GetCountAsync<Topping>());
}

[TestMethod]
public async Task DeleteByListTest()
{
var options = GetOptions();

var topping1 = new Topping
{
Name = "Canadian Bacon",
AdditionalCost = 2.5
};
var topping2 = new Topping
{
Name = "Bacon",
AdditionalCost = 1
};
var topping3 = new Topping
{
Name = "Sausage",
AdditionalCost = 2.25
};

var createRepository = GetRepository(options);
createRepository.Create(new List<Topping>{topping1, topping2, topping3});
await createRepository.SaveAsync();


var deleteRepository = GetRepository(options);
var toppingsToDelete = await deleteRepository.GetAllAsync<Topping>(x => x.AdditionalCost > 2);
deleteRepository.Delete(toppingsToDelete);
await deleteRepository.SaveAsync();


var readRepository = GetRepository(options);
Assert.AreEqual(topping2.Id, (await readRepository.GetFirstAsync<Topping>()).Id);
Assert.AreEqual(1, await readRepository.GetCountAsync<Topping>());
}

[TestMethod]
public async Task DeleteByExpressionTest()
{
var options = GetOptions();

var topping1 = new Topping
{
Name = "Canadian Bacon",
AdditionalCost = 2.5
};
var topping2 = new Topping
{
Name = "Bacon",
AdditionalCost = 1
};
var topping3 = new Topping
{
Name = "Sausage",
AdditionalCost = 2.25
};

var createRepository = GetRepository(options);
createRepository.Create(new List<Topping>{topping1, topping2, topping3});
await createRepository.SaveAsync();


var deleteRepository = GetRepository(options);
deleteRepository.Delete<Topping>(x => x.AdditionalCost > 2);
await deleteRepository.SaveAsync();


var readRepository = GetRepository(options);
Assert.AreEqual(topping2.Id, (await readRepository.GetFirstAsync<Topping>()).Id);
Assert.AreEqual(1, await readRepository.GetCountAsync<Topping>());
}
}
}
Loading

0 comments on commit cfb92da

Please sign in to comment.