-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* 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
1 parent
b3bfc11
commit cfb92da
Showing
11 changed files
with
619 additions
and
184 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
143 changes: 143 additions & 0 deletions
143
src/CSESoftware.Repository.EntityFrameworkCore.TestProject/CreateTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)); | ||
} | ||
} | ||
} |
132 changes: 132 additions & 0 deletions
132
src/CSESoftware.Repository.EntityFrameworkCore.TestProject/DeleteTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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>()); | ||
} | ||
} | ||
} |
Oops, something went wrong.