public void DeleteInstanceReturnsFalseIfNoRecordsDeleted() { var customer = new Customer { Id = 14556 }; var mockCommand = new Mock<IDbCommand>(); mockCommand.Setup(x => x.ExecuteNonQuery()).Returns(0); mockCommand.As<IDisposable>().Setup(x => x.Dispose()); var mockSqlDialect = new Mock<ISqlDialect>(); mockSqlDialect.Setup(x => x.BuildDeleteSqlQuery(It.IsNotNull<IObjectInfo>(), customer.Id)).Returns(new SqlQuery("")); var mockDbDriver = new Mock<IDbDriver>(); mockDbDriver.Setup(x => x.GetConnection(ConnectionScope.PerTransaction)).Returns(new Mock<IDbConnection>().Object); mockDbDriver.Setup(x => x.BuildCommand(It.IsNotNull<SqlQuery>())).Returns(mockCommand.Object); var session = new Session( ConnectionScope.PerTransaction, mockSqlDialect.Object, mockDbDriver.Object, new IListener[0]); Assert.False(session.Delete(customer)); mockSqlDialect.VerifyAll(); mockDbDriver.VerifyAll(); mockCommand.VerifyAll(); }
public void InsertInstanceQueryForIdentifierStrategyAssigned() { ObjectInfo.MappingConvention = new ConventionMappingConvention( UnitTest.GetConventionMappingSettings(IdentifierStrategy.Assigned)); var customer = new Customer { Created = new DateTime(2011, 12, 24), CreditLimit = 10500.00M, DateOfBirth = new System.DateTime(1975, 9, 18), Id = 134875, Name = "Joe Bloggs", Status = CustomerStatus.Active, Updated = DateTime.Now, Website = new Uri("http://microliteorm.wordpress.com") }; var sqlDialect = new MySqlDialect(); var sqlQuery = sqlDialect.BuildInsertSqlQuery(ObjectInfo.For(typeof(Customer)), customer); Assert.Equal("INSERT INTO `Sales`.`Customers` (`Created`,`CreditLimit`,`DateOfBirth`,`Id`,`Name`,`CustomerStatusId`,`Website`) VALUES (@p0,@p1,@p2,@p3,@p4,@p5,@p6)", sqlQuery.CommandText); Assert.Equal(7, sqlQuery.Arguments.Count); Assert.Equal(customer.Created, sqlQuery.Arguments[0]); Assert.Equal(customer.CreditLimit, sqlQuery.Arguments[1]); Assert.Equal(customer.DateOfBirth, sqlQuery.Arguments[2]); Assert.Equal(customer.Id, sqlQuery.Arguments[3]); Assert.Equal(customer.Name, sqlQuery.Arguments[4]); Assert.Equal(1, sqlQuery.Arguments[5]); Assert.Equal("http://microliteorm.wordpress.com/", sqlQuery.Arguments[6]); }
public void InsertInstanceQueryForIdentifierStrategyDbGenerated() { ObjectInfo.MappingConvention = new ConventionMappingConvention( UnitTest.GetConventionMappingSettings(IdentifierStrategy.DbGenerated)); var customer = new Customer { Created = new DateTime(2011, 12, 24), CreditLimit = 10500.00M, DateOfBirth = new System.DateTime(1975, 9, 18), Id = 134875, Name = "Joe Bloggs", Status = CustomerStatus.Active, Updated = DateTime.Now, Website = new Uri("http://microliteorm.wordpress.com") }; var sqlDialect = new SqlServerCeDialect(); var sqlQuery = sqlDialect.BuildInsertSqlQuery(ObjectInfo.For(typeof(Customer)), customer); Assert.Equal("INSERT INTO \"Sales\".\"Customers\" (\"Created\",\"CreditLimit\",\"DateOfBirth\",\"Name\",\"CustomerStatusId\",\"Website\") VALUES (@p0,@p1,@p2,@p3,@p4,@p5)", sqlQuery.CommandText); Assert.Equal(6, sqlQuery.Arguments.Count); Assert.Equal(customer.Created, sqlQuery.Arguments[0]); Assert.Equal(customer.CreditLimit, sqlQuery.Arguments[1]); Assert.Equal(customer.DateOfBirth, sqlQuery.Arguments[2]); Assert.Equal(customer.Name, sqlQuery.Arguments[3]); Assert.Equal(1, sqlQuery.Arguments[4]); Assert.Equal("http://microliteorm.wordpress.com/", sqlQuery.Arguments[5]); }
public void AfterInsertDoesNotSetIdentifierIfExecuteScalarResultIsNullAndIdentifierStrategySequence() { ObjectInfo.MappingConvention = new ConventionMappingConvention( UnitTest.GetConventionMappingSettings(IdentifierStrategy.Sequence)); var listener = new IdentifierStrategyListener(); var customer = new Customer(); Assert.DoesNotThrow(() => listener.AfterInsert(customer, null)); Assert.Equal(0, customer.Id); }
public void AfterInsertSetsIdentifierValueConvertingItToThePropertyType() { ObjectInfo.MappingConvention = new ConventionMappingConvention( UnitTest.GetConventionMappingSettings(IdentifierStrategy.DbGenerated)); var customer = new Customer(); decimal scalarResult = 4354; var listener = new DbGeneratedListener(); listener.AfterInsert(customer, scalarResult); Assert.Equal(Convert.ToInt32(scalarResult), customer.Id); }
public void AfterInsertSetsIdentifierValue() { ObjectInfo.MappingConvention = new ConventionMappingConvention( UnitTest.GetConventionMappingSettings(IdentifierStrategy.DbGenerated)); var customer = new Customer(); int scalarResult = 4354; var listener = new DbGeneratedListener(); listener.AfterInsert(customer, scalarResult); Assert.Equal(scalarResult, customer.Id); }
public void InsertInstanceQueryForIdentifierStrategyAssigned() { ObjectInfo.MappingConvention = new ConventionMappingConvention( UnitTest.GetConventionMappingSettings(IdentifierStrategy.Assigned)); var sqlDialect = new MsSql2005Dialect(); var customer = new Customer { Created = new DateTime(2011, 12, 24), CreditLimit = 10500.00M, DateOfBirth = new System.DateTime(1975, 9, 18), Id = 134875, Name = "Joe Bloggs", Status = CustomerStatus.Active, Updated = DateTime.Now, Website = new Uri("http://microliteorm.wordpress.com") }; var sqlQuery = sqlDialect.BuildInsertSqlQuery(ObjectInfo.For(typeof(Customer)), customer); Assert.Equal("INSERT INTO [Sales].[Customers] ([Created],[CreditLimit],[DateOfBirth],[Id],[Name],[CustomerStatusId],[Website]) VALUES (@p0,@p1,@p2,@p3,@p4,@p5,@p6)", sqlQuery.CommandText); Assert.Equal(7, sqlQuery.Arguments.Count); Assert.Equal(DbType.DateTime2, sqlQuery.Arguments[0].DbType); Assert.Equal(customer.Created, sqlQuery.Arguments[0].Value); Assert.Equal(DbType.Decimal, sqlQuery.Arguments[1].DbType); Assert.Equal(customer.CreditLimit, sqlQuery.Arguments[1].Value); Assert.Equal(DbType.DateTime2, sqlQuery.Arguments[2].DbType); Assert.Equal(customer.DateOfBirth, sqlQuery.Arguments[2].Value); Assert.Equal(DbType.Int32, sqlQuery.Arguments[3].DbType); Assert.Equal(customer.Id, sqlQuery.Arguments[3].Value); Assert.Equal(DbType.String, sqlQuery.Arguments[4].DbType); Assert.Equal(customer.Name, sqlQuery.Arguments[4].Value); Assert.Equal(DbType.Int32, sqlQuery.Arguments[5].DbType); Assert.Equal((int)customer.Status, sqlQuery.Arguments[5].Value); Assert.Equal(DbType.String, sqlQuery.Arguments[6].DbType); Assert.Equal("http://microliteorm.wordpress.com/", sqlQuery.Arguments[6].Value); }
public void DeleteInstanceInvokesListeners() { var customer = new Customer { Id = 187224 }; var mockSqlDialect = new Mock<ISqlDialect>(); mockSqlDialect.Setup(x => x.BuildDeleteSqlQuery(It.IsNotNull<IObjectInfo>(), customer.Id)).Returns(new SqlQuery("")); var mockCommand = new Mock<IDbCommand>(); mockCommand.Setup(x => x.ExecuteNonQuery()).Returns(1); var mockConnection = new Mock<IDbConnection>(); mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object); var mockDbDriver = new Mock<IDbDriver>(); mockDbDriver.Setup(x => x.CreateConnection()).Returns(mockConnection.Object); int counter = 0; var mockListener1 = new Mock<IDeleteListener>(); mockListener1.Setup(x => x.AfterDelete(customer, 1)).Callback(() => Assert.Equal(4, ++counter)); mockListener1.Setup(x => x.BeforeDelete(customer)).Callback(() => Assert.Equal(1, ++counter)); var mockListener2 = new Mock<IDeleteListener>(); mockListener2.Setup(x => x.AfterDelete(customer, 1)).Callback(() => Assert.Equal(3, ++counter)); mockListener2.Setup(x => x.BeforeDelete(customer)).Callback(() => Assert.Equal(2, ++counter)); var session = new Session( ConnectionScope.PerTransaction, mockSqlDialect.Object, mockDbDriver.Object, new SessionListeners( new[] { mockListener1.Object, mockListener2.Object }, new IInsertListener[0], new IUpdateListener[0])); session.Delete(customer); mockListener1.VerifyAll(); mockListener2.VerifyAll(); }
public void UpdateInstanceQueryForIdentifierStrategyDbGenerated() { ObjectInfo.MappingConvention = new ConventionMappingConvention( UnitTest.GetConventionMappingSettings(IdentifierStrategy.DbGenerated)); var customer = new Customer { Created = new DateTime(2011, 12, 24), CreditLimit = 10500.00M, DateOfBirth = new System.DateTime(1975, 9, 18), Id = 134875, Name = "Joe Bloggs", Status = CustomerStatus.Active, Updated = DateTime.Now, Website = new Uri("http://microliteorm.wordpress.com") }; var sqlDialect = new MsSqlDialect(); var sqlQuery = sqlDialect.BuildUpdateSqlQuery(ObjectInfo.For(typeof(Customer)), customer); Assert.Equal("UPDATE [Sales].[Customers] SET [CreditLimit] = @p0,[DateOfBirth] = @p1,[Name] = @p2,[CustomerStatusId] = @p3,[Updated] = @p4,[Website] = @p5 WHERE [Id] = @p6", sqlQuery.CommandText); Assert.Equal(7, sqlQuery.Arguments.Count); Assert.Equal(customer.CreditLimit, sqlQuery.Arguments[0]); Assert.Equal(customer.DateOfBirth, sqlQuery.Arguments[1]); Assert.Equal(customer.Name, sqlQuery.Arguments[2]); Assert.Equal(1, sqlQuery.Arguments[3]); Assert.Equal(customer.Updated, sqlQuery.Arguments[4]); Assert.Equal("http://microliteorm.wordpress.com/", sqlQuery.Arguments[5]); Assert.Equal(customer.Id, sqlQuery.Arguments[6]); }
public void UpdateInstanceReturnsTrueIfRecordUpdated() { var customer = new Customer { Id = 187224 }; var mockSqlDialect = new Mock<ISqlDialect>(); mockSqlDialect.Setup(x => x.BuildUpdateSqlQuery(It.IsNotNull<IObjectInfo>(), customer)).Returns(new SqlQuery("")); var mockCommand = new Mock<IDbCommand>(); mockCommand.Setup(x => x.ExecuteNonQuery()).Returns(1); var mockConnection = new Mock<IDbConnection>(); mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object); var mockDbDriver = new Mock<IDbDriver>(); mockDbDriver.Setup(x => x.CreateConnection()).Returns(new MockDbConnectionWrapper(mockConnection.Object)); var session = new AsyncSession( ConnectionScope.PerTransaction, mockSqlDialect.Object, mockDbDriver.Object, new IDeleteListener[0], new IInsertListener[0], new IUpdateListener[0]); Assert.True(session.UpdateAsync(customer).Result); mockSqlDialect.VerifyAll(); mockDbDriver.VerifyAll(); mockCommand.VerifyAll(); }
public void InsertInvokesListeners() { var customer = new Customer(); object identifier = 23543; var mockSqlDialect = new Mock<ISqlDialect>(); mockSqlDialect.Setup(x => x.BuildInsertSqlQuery(It.IsNotNull<IObjectInfo>(), customer)).Returns(new SqlQuery("")); mockSqlDialect.Setup(x => x.BuildSelectInsertIdSqlQuery(It.IsNotNull<IObjectInfo>())).Returns(new SqlQuery("")); var mockCommand = new Mock<IDbCommand>(); mockCommand.Setup(x => x.ExecuteScalar()).Returns(identifier); var mockConnection = new Mock<IDbConnection>(); mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object); var mockDbDriver = new Mock<IDbDriver>(); mockDbDriver.Setup(x => x.CreateConnection()).Returns(new MockDbConnectionWrapper(mockConnection.Object)); int counter = 0; var mockListener1 = new Mock<IInsertListener>(); mockListener1.Setup(x => x.AfterInsert(customer, identifier)).Callback(() => Assert.Equal(4, ++counter)); mockListener1.Setup(x => x.BeforeInsert(customer)).Callback(() => Assert.Equal(1, ++counter)); var mockListener2 = new Mock<IInsertListener>(); mockListener2.Setup(x => x.AfterInsert(customer, identifier)).Callback(() => Assert.Equal(3, ++counter)); mockListener2.Setup(x => x.BeforeInsert(customer)).Callback(() => Assert.Equal(2, ++counter)); var session = new AsyncSession( ConnectionScope.PerTransaction, mockSqlDialect.Object, mockDbDriver.Object, new IDeleteListener[0], new[] { mockListener1.Object, mockListener2.Object }, new IUpdateListener[0]); session.InsertAsync(customer).Wait(); mockListener1.VerifyAll(); mockListener2.VerifyAll(); }
public void InsertBuildsAndExecutesAnInsertCommandOnlyIfIdentifierStrategyAssigned() { ObjectInfo.MappingConvention = new ConventionMappingConvention( UnitTest.GetConventionMappingSettings(IdentifierStrategy.Assigned)); var customer = new Customer { Id = 12345 }; var insertSqlQuery = new SqlQuery("INSERT"); var mockSqlDialect = new Mock<ISqlDialect>(); mockSqlDialect.Setup(x => x.BuildInsertSqlQuery(It.IsNotNull<IObjectInfo>(), customer)).Returns(insertSqlQuery); mockSqlDialect.Setup(x => x.SupportsSelectInsertedIdentifier).Returns(false); var mockCommand = new Mock<IDbCommand>(); mockCommand.Setup(x => x.ExecuteNonQuery()).Returns(1); var mockConnection = new Mock<IDbConnection>(); mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object); var mockDbDriver = new Mock<IDbDriver>(); mockDbDriver.Setup(x => x.CreateConnection()).Returns(new MockDbConnectionWrapper(mockConnection.Object)); var session = new AsyncSession( ConnectionScope.PerTransaction, mockSqlDialect.Object, mockDbDriver.Object, new IDeleteListener[0], new IInsertListener[0], new IUpdateListener[0]); session.InsertAsync(customer).Wait(); mockSqlDialect.Verify(x => x.BuildInsertSqlQuery(It.IsNotNull<IObjectInfo>(), customer), Times.Once()); mockSqlDialect.Verify(x => x.BuildSelectInsertIdSqlQuery(It.IsAny<IObjectInfo>()), Times.Never()); mockDbDriver.VerifyAll(); mockCommand.VerifyAll(); }
public void GetUpdateValues_ReturnsPropertyValues_WhenUsingDbGenerated() { ObjectInfo.MappingConvention = new ConventionMappingConvention( UnitTest.GetConventionMappingSettings(IdentifierStrategy.DbGenerated)); var objectInfo = ObjectInfo.For(typeof(Customer)); var customer = new Customer { Created = new DateTime(2011, 12, 24), CreditLimit = 10500.00M, DateOfBirth = new System.DateTime(1975, 9, 18), Id = 134875, Name = "Joe Bloggs", Status = CustomerStatus.Active, Updated = DateTime.Now, Website = new Uri("http://microliteorm.wordpress.com") }; var values = objectInfo.GetUpdateValues(customer); Assert.Equal(7, values.Length); Assert.Equal(DbType.Decimal, values[0].DbType); Assert.Equal(customer.CreditLimit, values[0].Value); Assert.Equal(DbType.DateTime2, values[1].DbType); Assert.Equal(customer.DateOfBirth, values[1].Value); Assert.Equal(DbType.String, values[2].DbType); Assert.Equal(customer.Name, values[2].Value); Assert.Equal(DbType.Int32, values[3].DbType); Assert.Equal((int)customer.Status, values[3].Value); Assert.Equal(DbType.DateTime2, values[4].DbType); Assert.Equal(customer.Updated, values[4].Value); Assert.Equal(DbType.String, values[5].DbType); Assert.Equal(customer.Website.ToString(), values[5].Value); Assert.Equal(DbType.Int32, values[6].DbType); Assert.Equal(customer.Id, values[6].Value); }
public void GetIdentifierValue_ReturnsPropertyValueOfIdentifierProperty() { var objectInfo = ObjectInfo.For(typeof(Customer)); var customer = new Customer { Id = 122323 }; var identifierValue = (int)objectInfo.GetIdentifierValue(customer); Assert.Equal(customer.Id, identifierValue); }
public void InsertInstanceQueryForIdentifierStrategySequence() { ObjectInfo.MappingConvention = new ConventionMappingConvention( UnitTest.GetConventionMappingSettings(IdentifierStrategy.Sequence)); var sqlDialect = new FirebirdSqlDialect(); var customer = new Customer { Created = new DateTime(2011, 12, 24), CreditLimit = 10500.00M, DateOfBirth = new System.DateTime(1975, 9, 18), Name = "Joe Bloggs", Status = CustomerStatus.Active, Updated = DateTime.Now, Website = new Uri("http://microliteorm.wordpress.com") }; var sqlQuery = sqlDialect.BuildInsertSqlQuery(ObjectInfo.For(typeof(Customer)), customer); Assert.Equal("INSERT INTO \"Sales\".\"Customers\" (\"Id\",\"Created\",\"CreditLimit\",\"DateOfBirth\",\"Name\",\"CustomerStatusId\",\"Website\") VALUES (GEN_ID(Customer_Id_Sequence, 1),@p0,@p1,@p2,@p3,@p4,@p5) RETURNING Id", sqlQuery.CommandText); Assert.Equal(6, sqlQuery.Arguments.Count); Assert.Equal(DbType.DateTime, sqlQuery.Arguments[0].DbType); Assert.Equal(customer.Created, sqlQuery.Arguments[0].Value); Assert.Equal(DbType.Decimal, sqlQuery.Arguments[1].DbType); Assert.Equal(customer.CreditLimit, sqlQuery.Arguments[1].Value); Assert.Equal(DbType.DateTime, sqlQuery.Arguments[2].DbType); Assert.Equal(customer.DateOfBirth, sqlQuery.Arguments[2].Value); Assert.Equal(DbType.String, sqlQuery.Arguments[3].DbType); Assert.Equal(customer.Name, sqlQuery.Arguments[3].Value); Assert.Equal(DbType.Int32, sqlQuery.Arguments[4].DbType); Assert.Equal((int)customer.Status, sqlQuery.Arguments[4].Value); Assert.Equal(DbType.String, sqlQuery.Arguments[5].DbType); Assert.Equal("http://microliteorm.wordpress.com/", sqlQuery.Arguments[5].Value); }
public void InsertInstanceQueryForIdentifierStrategyDbGenerated() { ObjectInfo.MappingConvention = new ConventionMappingConvention( UnitTest.GetConventionMappingSettings(IdentifierStrategy.DbGenerated)); var customer = new Customer { Created = new DateTime(2011, 12, 24), CreditLimit = 10500.00M, DateOfBirth = new System.DateTime(1975, 9, 18), Id = 134875, Name = "Joe Bloggs", Status = CustomerStatus.Active, Updated = DateTime.Now, Website = new Uri("http://microliteorm.wordpress.com") }; var mockSqlDialect = new Mock<SqlDialect>(SqlCharacters.Empty); mockSqlDialect.CallBase = true; var sqlQuery = mockSqlDialect.Object.BuildInsertSqlQuery(ObjectInfo.For(typeof(Customer)), customer); Assert.Equal("INSERT INTO Sales.Customers (Created,CreditLimit,DateOfBirth,Name,CustomerStatusId,Website) VALUES (?,?,?,?,?,?)", sqlQuery.CommandText); Assert.Equal(6, sqlQuery.Arguments.Count); Assert.Equal(customer.Created, sqlQuery.Arguments[0]); Assert.Equal(customer.CreditLimit, sqlQuery.Arguments[1]); Assert.Equal(customer.DateOfBirth, sqlQuery.Arguments[2]); Assert.Equal(customer.Name, sqlQuery.Arguments[3]); Assert.Equal((int)customer.Status, sqlQuery.Arguments[4]); Assert.Equal("http://microliteorm.wordpress.com/", sqlQuery.Arguments[5]); // Do a second query to check that the caching doesn't cause a problem. customer = new Customer { Created = new DateTime(2012, 08, 13), CreditLimit = 6250.00M, DateOfBirth = new System.DateTime(1984, 3, 11), Id = 998866, Name = "John Smith", Status = CustomerStatus.Inactive, Updated = DateTime.Now, Website = new Uri("http://microliteorm.wordpress.com/about") }; var sqlQuery2 = mockSqlDialect.Object.BuildInsertSqlQuery(ObjectInfo.For(typeof(Customer)), customer); Assert.Equal("INSERT INTO Sales.Customers (Created,CreditLimit,DateOfBirth,Name,CustomerStatusId,Website) VALUES (?,?,?,?,?,?)", sqlQuery2.CommandText); Assert.Equal(6, sqlQuery2.Arguments.Count); Assert.Equal(customer.Created, sqlQuery2.Arguments[0]); Assert.Equal(customer.CreditLimit, sqlQuery2.Arguments[1]); Assert.Equal(customer.DateOfBirth, sqlQuery2.Arguments[2]); Assert.Equal(customer.Name, sqlQuery2.Arguments[3]); Assert.Equal((int)customer.Status, sqlQuery2.Arguments[4]); Assert.Equal("http://microliteorm.wordpress.com/about", sqlQuery2.Arguments[5]); }
public void UpdateInstanceBuildsAndExecutesQuery() { var customer = new Customer { Id = 187224 }; var rowsAffected = 1; var mockSqlDialect = new Mock<ISqlDialect>(); mockSqlDialect.Setup(x => x.BuildUpdateSqlQuery(It.IsNotNull<IObjectInfo>(), customer)).Returns(new SqlQuery("")); var mockCommand = new Mock<IDbCommand>(); mockCommand.Setup(x => x.ExecuteNonQuery()).Returns(rowsAffected); var mockConnection = new Mock<IDbConnection>(); mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object); var mockDbDriver = new Mock<IDbDriver>(); mockDbDriver.Setup(x => x.CreateConnection()).Returns(mockConnection.Object); var session = new Session( ConnectionScope.PerTransaction, mockSqlDialect.Object, mockDbDriver.Object, new IDeleteListener[0], new IInsertListener[0], new IUpdateListener[0]); session.Update(customer); mockSqlDialect.VerifyAll(); mockDbDriver.VerifyAll(); mockCommand.VerifyAll(); }
public void DeleteInstanceThrowsMicroLiteExceptionIfExecuteNonQueryThrowsException() { var customer = new Customer { Id = 187224 }; var mockSqlDialect = new Mock<ISqlDialect>(); mockSqlDialect.Setup(x => x.BuildDeleteSqlQuery(It.IsNotNull<IObjectInfo>(), customer.Id)).Returns(new SqlQuery("")); var mockCommand = new Mock<IDbCommand>(); mockCommand.Setup(x => x.ExecuteNonQuery()).Throws<InvalidOperationException>(); var mockConnection = new Mock<IDbConnection>(); mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object); var mockDbDriver = new Mock<IDbDriver>(); mockDbDriver.Setup(x => x.CreateConnection()).Returns(mockConnection.Object); var session = new Session( ConnectionScope.PerTransaction, mockSqlDialect.Object, mockDbDriver.Object, new IDeleteListener[0], new IInsertListener[0], new IUpdateListener[0]); var exception = Assert.Throws<MicroLiteException>(() => session.Delete(customer)); Assert.NotNull(exception.InnerException); Assert.Equal(exception.InnerException.Message, exception.Message); // Command should still be disposed. mockCommand.VerifyAll(); }
public void UpdateInstanceThrowsMicroLiteExceptionIfIdentifierNotSet() { var customer = new Customer { Id = 0 }; var mockDbDriver = new Mock<IDbDriver>(); mockDbDriver.Setup(x => x.CreateConnection()).Returns(new Mock<IDbConnection>().Object); var session = new Session( ConnectionScope.PerTransaction, new Mock<ISqlDialect>().Object, mockDbDriver.Object, new IDeleteListener[0], new IInsertListener[0], new IUpdateListener[0]); var exception = Assert.Throws<MicroLiteException>(() => session.Update(customer)); Assert.Equal(ExceptionMessages.Session_IdentifierNotSetForUpdate, exception.Message); }
public void UpdateInstanceQuery() { ObjectInfo.MappingConvention = new ConventionMappingConvention( UnitTest.GetConventionMappingSettings(IdentifierStrategy.Assigned)); var sqlDialect = new SQLiteDialect(); var customer = new Customer { Created = new DateTime(2011, 12, 24), CreditLimit = 10500.00M, DateOfBirth = new System.DateTime(1975, 9, 18), Id = 134875, Name = "Joe Bloggs", Status = CustomerStatus.Active, Updated = DateTime.Now, Website = new Uri("http://microliteorm.wordpress.com") }; var sqlQuery = sqlDialect.BuildUpdateSqlQuery(ObjectInfo.For(typeof(Customer)), customer); Assert.Equal("UPDATE \"Sales\".\"Customers\" SET \"CreditLimit\" = @p0,\"DateOfBirth\" = @p1,\"Name\" = @p2,\"CustomerStatusId\" = @p3,\"Updated\" = @p4,\"Website\" = @p5 WHERE (\"Id\" = @p6)", sqlQuery.CommandText); Assert.Equal(7, sqlQuery.Arguments.Count); Assert.Equal(DbType.Decimal, sqlQuery.Arguments[0].DbType); Assert.Equal(customer.CreditLimit, sqlQuery.Arguments[0].Value); Assert.Equal(DbType.DateTime2, sqlQuery.Arguments[1].DbType); Assert.Equal(customer.DateOfBirth, sqlQuery.Arguments[1].Value); Assert.Equal(DbType.String, sqlQuery.Arguments[2].DbType); Assert.Equal(customer.Name, sqlQuery.Arguments[2].Value); Assert.Equal(DbType.Int32, sqlQuery.Arguments[3].DbType); Assert.Equal((int)customer.Status, sqlQuery.Arguments[3].Value); Assert.Equal(DbType.DateTime2, sqlQuery.Arguments[4].DbType); Assert.Equal(customer.Updated, sqlQuery.Arguments[4].Value); Assert.Equal(DbType.String, sqlQuery.Arguments[5].DbType); Assert.Equal("http://microliteorm.wordpress.com/", sqlQuery.Arguments[5].Value); Assert.Equal(DbType.Int32, sqlQuery.Arguments[6].DbType); Assert.Equal(customer.Id, sqlQuery.Arguments[6].Value); }
public void HasDefaultIdentifierValue_WhenIdentifierIsInteger() { var objectInfo = ObjectInfo.For(typeof(Customer)); var customer = new Customer(); customer.Id = 0; Assert.True(objectInfo.HasDefaultIdentifierValue(customer)); customer.Id = 123; Assert.False(objectInfo.HasDefaultIdentifierValue(customer)); }
public void SetIdentifierValue_SetsPropertyValue() { var objectInfo = ObjectInfo.For(typeof(Customer)); var customer = new Customer(); objectInfo.SetIdentifierValue(customer, 122323); Assert.Equal(122323, customer.Id); }
public void DeleteInstanceThrowsMicroLiteExceptionIfIdentifierNotSet() { var customer = new Customer { Id = 0 }; var mockConnection = new Mock<IDbConnection>(); mockConnection.Setup(x => x.CreateCommand()).Returns(new Mock<IDbCommand>().Object); var mockDbDriver = new Mock<IDbDriver>(); mockDbDriver.Setup(x => x.CreateConnection()).Returns(new MockDbConnectionWrapper(mockConnection.Object)); var session = new AsyncSession( ConnectionScope.PerTransaction, new Mock<ISqlDialect>().Object, mockDbDriver.Object, new IDeleteListener[0], new IInsertListener[0], new IUpdateListener[0]); var exception = Assert.Throws<AggregateException>( () => session.DeleteAsync(customer).Result); Assert.IsType<MicroLiteException>(exception.InnerException); Assert.Equal(ExceptionMessages.Session_IdentifierNotSetForDelete, exception.InnerException.Message); }
public void InsertBuildsAndExecutesCombinedCommandIfIdentifierStrategyNotAssignedAndSqlDialectSupportsSelectInsertedIdentifierAndDbDriverSupportsBatchedQueries() { ObjectInfo.MappingConvention = new ConventionMappingConvention( UnitTest.GetConventionMappingSettings(IdentifierStrategy.DbGenerated)); var customer = new Customer(); var insertSqlQuery = new SqlQuery("INSERT"); var selectIdSqlQuery = new SqlQuery("SELECT"); var combinedSqlQuery = new SqlQuery("INSERT;SELECT"); object identifier = 23543; var mockSqlDialect = new Mock<ISqlDialect>(); mockSqlDialect.Setup(x => x.BuildInsertSqlQuery(It.IsNotNull<IObjectInfo>(), customer)).Returns(insertSqlQuery); mockSqlDialect.Setup(x => x.BuildSelectInsertIdSqlQuery(It.IsNotNull<IObjectInfo>())).Returns(selectIdSqlQuery); mockSqlDialect.Setup(x => x.SupportsSelectInsertedIdentifier).Returns(true); var mockCommand = new Mock<IDbCommand>(); mockCommand.Setup(x => x.ExecuteScalar()).Returns(identifier); var mockConnection = new Mock<IDbConnection>(); mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object); var mockDbDriver = new Mock<IDbDriver>(); mockDbDriver.Setup(x => x.CreateConnection()).Returns(mockConnection.Object); mockDbDriver.Setup(x => x.SupportsBatchedQueries).Returns(true); mockDbDriver.Setup(x => x.Combine(insertSqlQuery, selectIdSqlQuery)).Returns(combinedSqlQuery); var session = new Session( ConnectionScope.PerTransaction, mockSqlDialect.Object, mockDbDriver.Object, new SessionListeners()); session.Insert(customer); mockSqlDialect.VerifyAll(); mockDbDriver.VerifyAll(); mockCommand.VerifyAll(); }
public void InsertBuildsAndExecutesIndividualCommandsIfIdentifierStrategyNotAssignedAndSqlDialectSupportsSelectInsertedIdentifierAndDbDriverDoesNotSupportBatchedQueries() { ObjectInfo.MappingConvention = new ConventionMappingConvention( UnitTest.GetConventionMappingSettings(IdentifierStrategy.DbGenerated)); var customer = new Customer(); var insertSqlQuery = new SqlQuery("INSERT"); var selectIdSqlQuery = new SqlQuery("SELECT"); object identifier = 23543; var mockSqlDialect = new Mock<ISqlDialect>(); mockSqlDialect.Setup(x => x.BuildInsertSqlQuery(It.IsNotNull<IObjectInfo>(), customer)).Returns(insertSqlQuery); mockSqlDialect.Setup(x => x.BuildSelectInsertIdSqlQuery(It.IsNotNull<IObjectInfo>())).Returns(selectIdSqlQuery); mockSqlDialect.Setup(x => x.SupportsSelectInsertedIdentifier).Returns(true); var mockCommand = new Mock<IDbCommand>(); mockCommand.Setup(x => x.ExecuteNonQuery()); mockCommand.Setup(x => x.ExecuteScalar()).Returns(identifier); var mockConnection = new Mock<IDbConnection>(); mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object); var mockDbDriver = new Mock<IDbDriver>(); mockDbDriver.Setup(x => x.CreateConnection()).Returns(new MockDbConnectionWrapper(mockConnection.Object)); mockDbDriver.Setup(x => x.SupportsBatchedQueries).Returns(false); var session = new AsyncSession( ConnectionScope.PerTransaction, mockSqlDialect.Object, mockDbDriver.Object, new IDeleteListener[0], new IInsertListener[0], new IUpdateListener[0]); session.InsertAsync(customer).Wait(); mockSqlDialect.VerifyAll(); mockDbDriver.VerifyAll(); mockCommand.VerifyAll(); }
public void VerifyInstanceForInsertThrowsMicroLiteException_WhenIdentifierStrategySequence_AndIdentifierSet() { ObjectInfo.MappingConvention = new ConventionMappingConvention( UnitTest.GetConventionMappingSettings(IdentifierStrategy.Sequence)); var customer = new Customer { Id = 147843 }; var objectInfo = ObjectInfo.For(typeof(Customer)); var exception = Assert.Throws<MicroLiteException>(() => objectInfo.VerifyInstanceForInsert(customer)); Assert.Equal(ExceptionMessages.PocoObjectInfo_IdentifierSetForInsert, exception.Message); }
public void InsertThrowsMicroLiteExceptionIfExecuteScalarThrowsException() { var customer = new Customer(); var mockSqlDialect = new Mock<ISqlDialect>(); mockSqlDialect.Setup(x => x.BuildInsertSqlQuery(It.IsNotNull<IObjectInfo>(), customer)).Returns(new SqlQuery("")); mockSqlDialect.Setup(x => x.BuildSelectInsertIdSqlQuery(It.IsNotNull<IObjectInfo>())).Returns(new SqlQuery("")); var mockCommand = new Mock<IDbCommand>(); mockCommand.Setup(x => x.ExecuteScalar()).Throws<InvalidOperationException>(); var mockConnection = new Mock<IDbConnection>(); mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object); var mockDbDriver = new Mock<IDbDriver>(); mockDbDriver.Setup(x => x.CreateConnection()).Returns(new MockDbConnectionWrapper(mockConnection.Object)); var session = new AsyncSession( ConnectionScope.PerTransaction, mockSqlDialect.Object, mockDbDriver.Object, new IDeleteListener[0], new IInsertListener[0], new IUpdateListener[0]); var exception = Assert.Throws<AggregateException>(() => session.InsertAsync(customer).Wait()); Assert.IsType<MicroLiteException>(exception.InnerException); Assert.IsType<InvalidOperationException>(exception.InnerException.InnerException); Assert.Equal(exception.InnerException.InnerException.Message, exception.InnerException.Message); // Command should still be disposed. mockCommand.VerifyAll(); }
public void UpdateInstanceQuery() { ObjectInfo.MappingConvention = new ConventionMappingConvention( UnitTest.GetConventionMappingSettings(IdentifierStrategy.DbGenerated)); var mockSqlDialect = new Mock<SqlDialect>(SqlCharacters.Empty); mockSqlDialect.CallBase = true; var customer = new Customer { Created = new DateTime(2011, 12, 24), CreditLimit = 10500.00M, DateOfBirth = new DateTime(1975, 9, 18), Id = 134875, Name = "Joe Bloggs", Status = CustomerStatus.Active, Updated = DateTime.Now, Website = new Uri("http://microliteorm.wordpress.com") }; var sqlQuery = mockSqlDialect.Object.BuildUpdateSqlQuery(ObjectInfo.For(typeof(Customer)), customer); Assert.Equal("UPDATE Sales.Customers SET CreditLimit = ?,DateOfBirth = ?,Name = ?,CustomerStatusId = ?,Updated = ?,Website = ? WHERE (Id = ?)", sqlQuery.CommandText); Assert.Equal(7, sqlQuery.Arguments.Count); Assert.Equal(DbType.Decimal, sqlQuery.Arguments[0].DbType); Assert.Equal(customer.CreditLimit, sqlQuery.Arguments[0].Value); Assert.Equal(DbType.DateTime2, sqlQuery.Arguments[1].DbType); Assert.Equal(customer.DateOfBirth, sqlQuery.Arguments[1].Value); Assert.Equal(DbType.String, sqlQuery.Arguments[2].DbType); Assert.Equal(customer.Name, sqlQuery.Arguments[2].Value); Assert.Equal(DbType.Int32, sqlQuery.Arguments[3].DbType); Assert.Equal((int)customer.Status, sqlQuery.Arguments[3].Value); Assert.Equal(DbType.DateTime2, sqlQuery.Arguments[4].DbType); Assert.Equal(customer.Updated, sqlQuery.Arguments[4].Value); Assert.Equal(DbType.String, sqlQuery.Arguments[5].DbType); Assert.Equal("http://microliteorm.wordpress.com/", sqlQuery.Arguments[5].Value); Assert.Equal(DbType.Int32, sqlQuery.Arguments[6].DbType); Assert.Equal(customer.Id, sqlQuery.Arguments[6].Value); // Do a second query to check that the caching doesn't cause a problem. customer = new Customer { Created = new DateTime(2012, 08, 13), CreditLimit = 6250.00M, DateOfBirth = new DateTime(1984, 3, 11), Id = 998866, Name = "John Smith", Status = CustomerStatus.Inactive, Updated = DateTime.Now, Website = new Uri("http://microliteorm.wordpress.com/about") }; var sqlQuery2 = mockSqlDialect.Object.BuildUpdateSqlQuery(ObjectInfo.For(typeof(Customer)), customer); Assert.Equal("UPDATE Sales.Customers SET CreditLimit = ?,DateOfBirth = ?,Name = ?,CustomerStatusId = ?,Updated = ?,Website = ? WHERE (Id = ?)", sqlQuery2.CommandText); Assert.Equal(7, sqlQuery2.Arguments.Count); Assert.Equal(DbType.Decimal, sqlQuery2.Arguments[0].DbType); Assert.Equal(customer.CreditLimit, sqlQuery2.Arguments[0].Value); Assert.Equal(DbType.DateTime2, sqlQuery2.Arguments[1].DbType); Assert.Equal(customer.DateOfBirth, sqlQuery2.Arguments[1].Value); Assert.Equal(DbType.String, sqlQuery2.Arguments[2].DbType); Assert.Equal(customer.Name, sqlQuery2.Arguments[2].Value); Assert.Equal(DbType.Int32, sqlQuery2.Arguments[3].DbType); Assert.Equal((int)customer.Status, sqlQuery2.Arguments[3].Value); Assert.Equal(DbType.DateTime2, sqlQuery2.Arguments[4].DbType); Assert.Equal(customer.Updated, sqlQuery2.Arguments[4].Value); Assert.Equal(DbType.String, sqlQuery2.Arguments[5].DbType); Assert.Equal("http://microliteorm.wordpress.com/about", sqlQuery2.Arguments[5].Value); Assert.Equal(DbType.Int32, sqlQuery2.Arguments[6].DbType); Assert.Equal(customer.Id, sqlQuery2.Arguments[6].Value); }
public void VerifyInstanceForInsertDoesNotThrowMicroLiteException_WhenIdentifierStrategySequence_AndIdentifierNotSet() { ObjectInfo.MappingConvention = new ConventionMappingConvention( UnitTest.GetConventionMappingSettings(IdentifierStrategy.Sequence)); var customer = new Customer { Id = 0 }; var objectInfo = ObjectInfo.For(typeof(Customer)); Assert.DoesNotThrow(() => objectInfo.VerifyInstanceForInsert(customer)); }
public void UpdateInstanceReturnsFalseIfNoRecordsUpdated() { var customer = new Customer { Id = 187224 }; var mockSqlDialect = new Mock<ISqlDialect>(); mockSqlDialect.Setup(x => x.BuildUpdateSqlQuery(It.IsNotNull<IObjectInfo>(), customer)).Returns(new SqlQuery("")); var mockCommand = new Mock<IDbCommand>(); mockCommand.Setup(x => x.ExecuteNonQuery()).Returns(0); var mockConnection = new Mock<IDbConnection>(); mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object); var mockDbDriver = new Mock<IDbDriver>(); mockDbDriver.Setup(x => x.CreateConnection()).Returns(mockConnection.Object); var session = new Session( ConnectionScope.PerTransaction, mockSqlDialect.Object, mockDbDriver.Object, new SessionListeners()); Assert.False(session.Update(customer)); mockSqlDialect.VerifyAll(); mockDbDriver.VerifyAll(); mockCommand.VerifyAll(); }