using System; using System.Linq; using EPS.Common.Repositories; using NUnit.Framework; namespace EPS.Common.Tests { [TestFixture] public class RepositoryTests { [Test] public void CanDeleteRepoFromRepoFactory() { IRepository repo = new Repository(); repo.Save(new Customer { FirstName = "Chris", LastName = "Carter" }); Assert.AreEqual(1, repo.FindAll().Count()); RepoFactory.Delete(); repo = RepoFactory.Get(); Assert.AreEqual(0, repo.FindAll().Count()); } [Test] public void OrderByCanTakeObjectValues() { IRepository repo = new Repository(); repo.Save(new Customer { FirstName = "Chris", LastName = "Carter" }); repo.Save(new Customer { FirstName = "Anja", LastName = "Carter" }); var sorted = repo.OrderBy(new { Property = "FirstName", SortAscending = true }); Assert.AreEqual("Anja", sorted.First().FirstName); } [Test] [ExpectedException(typeof(ArgumentNullException))] public void OrderBy_MissingPropertyNameThrowsArgNullException() { IRepository repo = new Repository(); repo.OrderBy(null, Sort.Descending); } [Test] public void OriginalListIsUnmodifiedAfterSort() { IRepository repo = new Repository(); repo.Save(new Customer { FirstName = "Chris", LastName = "Carter" }); repo.Save(new Customer { FirstName = "Anja", LastName = "Carter" }); Assert.AreEqual("Anja", repo.OrderBy("FirstName", Sort.Ascending).First().FirstName); Assert.AreEqual("Chris", repo.FindAll().First().FirstName); } [Test] public void CanSortByProperty() { IRepository repo = new Repository(); repo.Save(new Customer { FirstName = "Chris", LastName = "Carter" }); repo.Save(new Customer { FirstName = "Anja", LastName = "Carter" }); Assert.AreEqual("Chris", repo.FindAll().First().FirstName); Assert.AreEqual("Anja", repo.OrderBy("FirstName", Sort.Ascending).First().FirstName); } [Test] public void FindTopTen() { IRepository repo = new Repository(); for (int i = 0; i < 25; i++) { repo.Save(new Customer() { FirstName = "FirstName" + i, LastName = "LastName" + i }); } Assert.AreEqual(25, repo.Count); var query = repo.FindAll().Where(c => { return c.ID > 10; }); Assert.AreEqual(15, query.Count()); } [Test] public void CanAddAndRemoveCustomersFromARepo() { //first create a customer repository IRepository repo = new Repository(); //now add some customers repo.Save(new Customer() { FirstName = "Chris", LastName = "Carter" }); repo.Save(new Customer() { FirstName = "Emmitt", LastName = "Carter" }); //make sure they are in there Assert.AreEqual(2, repo.Count); Assert.AreEqual("Emmitt", repo.Find(2).FirstName); //let's remove one repo.Delete(repo.Find(2)); //make sure it's gone Assert.AreEqual(1, repo.Count); Assert.IsNull(repo.Find(2)); } [Test] public void MakeSureTheIDCounterKeepsIncrementing() { IRepository repo = new Repository(); Customer c = new Customer() { FirstName = "Chris", LastName = "Carter" }; repo.Save(c); Assert.AreEqual(1, c.ID); repo.Delete(c); Customer c2 = new Customer() { FirstName = "Emmitt", LastName = "Carter" }; repo.Save(c2); Assert.AreEqual(2, c2.ID); } [Test] public void CanAddCustomersInSaveMethod() { IRepository repo = RepoFactory.Get(); repo.Save(new Customer() { FirstName = "Chris", LastName = "Carter" }); Assert.IsNotNull(repo.Find(1)); repo.Save(new Customer() { FirstName = "Emmitt", LastName = "Carter" }); Assert.AreEqual(2, repo.Count); } } }