public void GetObjectsFromDb_Materializes_Correctly() { var props = new List <IDictionary <string, object> > { new Dictionary <string, object> { { "Id", 1 }, { "FirstName", "Mike" }, { "LastName", "Rosoft" }, { "Age", 1337 } } }; var mockDriver = new Mock <IDatabaseDriver>(); mockDriver.Setup(x => x.RunSelectStatement(It.IsAny <string>())) .Returns(props); var mockSqlBuilder = new Mock <ISqlStatementBuilder>(); var mockChangeTracker = new Mock <IChangeTracker>(); mockChangeTracker.Setup(x => x.GetEntry(It.IsAny <int>(), typeof(Person))) .Returns((ChangeTrackerEntry)null); var orm = new MyOrm(mockDriver.Object, mockSqlBuilder.Object, mockChangeTracker.Object); var result = orm.GetObjectsFromDb <Person>(mockSqlBuilder.Object); var person = result.Single().ShouldBeOfType <Person>(); person.Id.ShouldBe(1); person.FirstName.ShouldBe("Mike"); person.LastName.ShouldBe("Rosoft"); person.Age.ShouldBe(1337); }
public void SubmitChanges_PersonInserted_SetsNewId() { var person = new Person { Id = -1 }; var entry = new ChangeTrackerEntry { Item = person, State = ChangeTrackerEntry.States.Inserted }; var mockDriver = new Mock <IDatabaseDriver>(); mockDriver.Setup(x => x.RunInsertStatement(It.IsAny <string>())).Returns(1); var mockSqlBuilder = new Mock <ISqlStatementBuilder>(); var mockChangeTracker = new Mock <IChangeTracker>(); mockChangeTracker.Setup(x => x.GetEntry(person)).Returns(entry); mockChangeTracker.Setup(x => x.InsertedObjects).Returns(new List <object> { person }); var orm = new MyOrm(mockDriver.Object, mockSqlBuilder.Object, mockChangeTracker.Object); orm.SubmitChanges(); person.Id.ShouldBe(1); }
public void Insert_AddsChangeTrackerEntry_Once() { var person = new Person(); var mockDriver = new Mock <IDatabaseDriver>(); var mockSqlBuilder = new Mock <ISqlStatementBuilder>(); var mockChangeTracker = new Mock <IChangeTracker>(); var orm = new MyOrm(mockDriver.Object, mockSqlBuilder.Object, mockChangeTracker.Object); orm.Insert(person); mockChangeTracker.Verify(x => x.AddEntry(It.IsAny <ChangeTrackerEntry>()), Times.Once); }
public void Insert_SetsId_NegativeOne() { var person = new Person(); var mockDriver = new Mock <IDatabaseDriver>(); var mockSqlBuilder = new Mock <ISqlStatementBuilder>(); var mockChangeTracker = new Mock <IChangeTracker>(); var orm = new MyOrm(mockDriver.Object, mockSqlBuilder.Object, mockChangeTracker.Object); orm.Insert(person); person.Id.ShouldBe(-1); }
public void GetObjectsFromDb_InvokesDriverRunSelectStatement() { var mockDriver = new Mock <IDatabaseDriver>(); mockDriver.Setup(x => x.RunSelectStatement(It.IsAny <string>())) .Returns(new List <IDictionary <string, object> >()); var mockSqlBuilder = new Mock <ISqlStatementBuilder>(); var mockChangeTracker = new Mock <IChangeTracker>(); var orm = new MyOrm(mockDriver.Object, mockSqlBuilder.Object, mockChangeTracker.Object); orm.GetObjectsFromDb <object>(mockSqlBuilder.Object); mockDriver.Verify(x => x.RunSelectStatement(It.IsAny <string>()), Times.Once); }
public void Delete_GetsChangeTrackerEntry_SetsDeleted() { var person = new Person(); var entry = new ChangeTrackerEntry { Item = person, State = ChangeTrackerEntry.States.Unmodified }; var mockDriver = new Mock <IDatabaseDriver>(); var mockSqlBuilder = new Mock <ISqlStatementBuilder>(); var mockChangeTracker = new Mock <IChangeTracker>(); mockChangeTracker.Setup(x => x.GetEntry(person)).Returns(entry); var orm = new MyOrm(mockDriver.Object, mockSqlBuilder.Object, mockChangeTracker.Object); orm.Delete(person); mockChangeTracker.Verify(x => x.GetEntry(person), Times.Once); entry.State.ShouldBe(ChangeTrackerEntry.States.Deleted); }
public void SubmitChanges_PersonInserted_SetsStateUnmodified() { var person = new Person(); var entry = new ChangeTrackerEntry { Item = person, State = ChangeTrackerEntry.States.Inserted }; var mockDriver = new Mock <IDatabaseDriver>(); var mockSqlBuilder = new Mock <ISqlStatementBuilder>(); var mockChangeTracker = new Mock <IChangeTracker>(); mockChangeTracker.Setup(x => x.GetEntry(person)).Returns(entry); mockChangeTracker.Setup(x => x.InsertedObjects).Returns(new List <object> { person }); var orm = new MyOrm(mockDriver.Object, mockSqlBuilder.Object, mockChangeTracker.Object); orm.SubmitChanges(); entry.State.ShouldBe(ChangeTrackerEntry.States.Unmodified); }
public void SubmitChanges_PersonInserted_InvokesDriverRunInsertStatement() { var person = new Person(); var entry = new ChangeTrackerEntry { Item = person, State = ChangeTrackerEntry.States.Inserted }; var mockDriver = new Mock <IDatabaseDriver>(); var mockSqlBuilder = new Mock <ISqlStatementBuilder>(); var mockChangeTracker = new Mock <IChangeTracker>(); mockChangeTracker.Setup(x => x.GetEntry(person)).Returns(entry); mockChangeTracker.Setup(x => x.InsertedObjects).Returns(new List <object> { person }); var orm = new MyOrm(mockDriver.Object, mockSqlBuilder.Object, mockChangeTracker.Object); orm.SubmitChanges(); mockDriver.Verify(x => x.RunInsertStatement(It.IsAny <string>()), Times.AtLeastOnce()); }
public void GetObjectsFromDb_ObjectExists_UsesSameObject() { var id = new Random().Next(1, int.MaxValue); var person = new Person { Id = id, FirstName = "Mike", LastName = "Rosoft", Age = 1337 }; var entry = new ChangeTrackerEntry { Item = person, State = ChangeTrackerEntry.States.Unmodified }; var props = new List <IDictionary <string, object> > { new Dictionary <string, object> { { "Id", id }, { "FirstName", "Mike" }, { "LastName", "Rosoft" }, { "Age", 1337 } } }; var mockDriver = new Mock <IDatabaseDriver>(); mockDriver.Setup(x => x.RunSelectStatement(It.IsAny <string>())) .Returns(props); var mockSqlBuilder = new Mock <ISqlStatementBuilder>(); var mockChangeTracker = new Mock <IChangeTracker>(); mockChangeTracker.Setup(x => x.GetEntry(id, typeof(Person))).Returns(entry); var orm = new MyOrm(mockDriver.Object, mockSqlBuilder.Object, mockChangeTracker.Object); var result = orm.GetObjectsFromDb <Person>(mockSqlBuilder.Object); result.Single().ShouldBe(person); }
private static void Main(string[] args) { var sqlBuilder = new MySqlStatementBuilder(); var driver = new MySqlDriver(""); IChangeTracker changeTracker = new ChangeTracking.ChangeTracker(); var orm = new MyOrm(driver, sqlBuilder, changeTracker); var qry = orm.GetQuery <Person>(); var filtered = qry .Where(i => i.Age > 18 || i.Age < 30) .Where(i => i.FirstName == "Peter") .Where(i => i.FirstName != "Otto" && i.Age <= 100); //var filtered = qry.OrderBy(i => i.Age); var lst = filtered.ToList(); //foreach (var person1 in lst) //{ // person1.Age++; //} //orm.SubmitChanges(); //var person = new Person //{ // Age = 18, // FirstName = "Manfred", // LastName = "Fredmann" //}; // orm.Insert(person); Console.ReadKey(); }
public void Insert_Update_Delete_Select() { const string validConnectionString = "server=127.0.0.1;uid=root;pwd=root;database=test"; var options = new DbContextOptionsBuilder <MysqlContext>() .UseMySQL(validConnectionString) .Options; var context = new MysqlContext(options); context.RemoveRange(context.Persons); context.SaveChanges(); var driver = new MySqlDriver(validConnectionString); var sqlBuilder = new MySqlStatementBuilder(); var changeTracker = new ChangeTracking.ChangeTracker(); var orm = new MyOrm(driver, sqlBuilder, changeTracker); orm.ChangeTracker.Count.ShouldBe(0); var person1 = new Person { FirstName = "Mike", LastName = "Rosoft", Age = 1337 }; var person2 = new Person { FirstName = "Tux", LastName = "L. Oves", Age = 80085 }; var person3 = new Person { FirstName = "Mac", LastName = "N. Tosh", Age = 1234 }; //Insert person1.Id.ShouldBe(0); orm.Insert(person1); person1.Id.ShouldBe(-1); person2.Id.ShouldBe(0); orm.Insert(person2); person2.Id.ShouldBe(-2); person3.Id.ShouldBe(0); orm.Insert(person3); person3.Id.ShouldBe(-3); orm.ChangeTracker.Count.ShouldBe(3); orm.ChangeTracker.InsertedObjects.Count().ShouldBe(3); GetFreshContext(options).Persons.ShouldBeEmpty(); orm.SubmitChanges(); person1.Id.ShouldBeGreaterThan(0); person2.Id.ShouldBe(person1.Id + 1); person3.Id.ShouldBe(person2.Id + 1); GetFreshContext(options).Persons.Count().ShouldBe(3); orm.ChangeTracker.InsertedObjects.ShouldBeEmpty(); orm.ChangeTracker.UnmodifiedObjects.Count().ShouldBe(3); //Update var rand = new Random(); var newAge = rand.Next(1, int.MaxValue); person1.Age = newAge; GetFreshContext(options).Persons.Single(x => x.Id == person1.Id).Age.ShouldBe(1337); orm.SubmitChanges(); orm.ChangeTracker.UnmodifiedObjects.Count().ShouldBe(3); GetFreshContext(options).Persons.Single(x => x.Id == person1.Id).Age.ShouldBe(newAge); GetFreshContext(options).Persons.Count().ShouldBe(3); //Delete GetFreshContext(options).Persons.Count().ShouldBe(3); orm.ChangeTracker.UnmodifiedObjects.Count().ShouldBe(3); orm.Delete(person3); orm.ChangeTracker.Entries.Count().ShouldBe(3); orm.ChangeTracker.DeletedObjects.Count().ShouldBe(1); orm.ChangeTracker.GetEntry(person3).State.ShouldBe(ChangeTrackerEntry.States.Deleted); GetFreshContext(options).Persons.Count().ShouldBe(3); orm.SubmitChanges(); orm.ChangeTracker.Entries.Count().ShouldBe(3); orm.ChangeTracker.DeletedObjects.Count().ShouldBe(1); orm.ChangeTracker.GetEntry(person3).State.ShouldBe(ChangeTrackerEntry.States.Deleted); GetFreshContext(options).Persons.Count().ShouldBe(2); //GetObjectsFromDb var anotherPerson1 = orm.GetQuery <Person>() .Where(p => p.FirstName == "Mike" && p.LastName == "Rosoft") .Where(p => p.Age == newAge).ToList().First(); anotherPerson1.ShouldNotBeNull(); anotherPerson1.Id.ShouldBe(person1.Id); person1.ShouldBe(anotherPerson1); var person1AndPerson2 = orm.GetQuery <Person>() .Where(p => p.FirstName == "Mike" || p.FirstName == "Tux" && p.LastName == "Rosoft" || p.LastName == "L. Oves") .Where(p => p.Age == newAge || p.Age == 80085).ToList(); person1AndPerson2[0].ShouldNotBeNull(); person1AndPerson2[1].ShouldNotBeNull(); person1AndPerson2[0].ShouldBe(anotherPerson1); person1AndPerson2[0].ShouldBe(person1); person1AndPerson2[1].ShouldBe(person2); }
public void Select_Multiple() { const string validConnectionString = "server=127.0.0.1;uid=root;pwd=root;database=test"; var options = new DbContextOptionsBuilder <MysqlContext>() .UseMySQL(validConnectionString) .Options; var context = new MysqlContext(options); context.RemoveRange(context.Persons); context.SaveChanges(); var driver = new MySqlDriver(validConnectionString); var sqlBuilder = new MySqlStatementBuilder(); var changeTracker = new ChangeTracking.ChangeTracker(); var orm = new MyOrm(driver, sqlBuilder, changeTracker); orm.ChangeTracker.Entries.ShouldBeEmpty(); var person1 = new Person { FirstName = "Mike", LastName = "Rosoft", Age = 1337 }; var person2 = new Person { FirstName = "Tux", LastName = "L. Oves", Age = 80085 }; var person3 = new Person { FirstName = "Mac", LastName = "N. Tosh", Age = 1234 }; var inserterContext = GetFreshContext(options); inserterContext.Persons.Add(person1); inserterContext.Persons.Add(person2); inserterContext.Persons.Add(person3); inserterContext.SaveChanges(); GetFreshContext(options).Persons.Count().ShouldBe(3); orm.ChangeTracker.Entries.ShouldBeEmpty(); var people = orm.GetQuery <Person>().ToList(); orm.ChangeTracker.Entries.Count().ShouldBe(3); orm.ChangeTracker.GetEntry(people[0]).ShouldNotBeNull(); orm.ChangeTracker.GetEntry(people[1]).ShouldNotBeNull(); orm.ChangeTracker.GetEntry(people[2]).ShouldNotBeNull(); people[0].Id.ShouldBe(person1.Id); people[1].Id.ShouldBe(person2.Id); people[2].Id.ShouldBe(person3.Id); people[0].ShouldNotBe(person1); people[1].ShouldNotBe(person2); people[2].ShouldNotBe(person3); var evenMorePeople = orm.GetQuery <Person>().ToList(); people[0].ShouldBe(evenMorePeople[0]); people[1].ShouldBe(evenMorePeople[1]); people[2].ShouldBe(evenMorePeople[2]); }