public void Should_Be_Able_To_Update() { NormalModel entity = new NormalModel(); NormalModel newEntity = new NormalModel { Id = entity.Id, Description = rdg.Get <string>() }; using (TestTrackerContext newContext2 = GetNewContextInstance()) { newContext2.NormalModels.Attach(newEntity); newContext2.Entry(newEntity).State = EntityState.Modified; newContext2.SaveChanges(); newEntity.AssertAuditForModification(newContext2, newEntity.Id, null, new AuditLogDetail { NewValue = newEntity.Description, OriginalValue = entity.Description, PropertyName = nameof(NormalModel.Description) }); } }
public void CanRaiseDeleteEvent() { using (TestTrackerContext context = GetNewContextInstance()) { EntityTracker.TrackAllProperties <NormalModel>(); bool eventRaised = false; context.OnAuditLogGenerated += (sender, args) => { NormalModel eventEntity = args.Entity as NormalModel; if (args.Log.EventType == EventType.Deleted && args.Log.TypeFullName == typeof(NormalModel).FullName && eventEntity != null) { eventRaised = true; } }; NormalModel existingEntity = ObjectFactory .Create <NormalModel>(save: true, testDbContext: context); context.NormalModels.Remove(existingEntity); context.SaveChanges(); //assert Assert.IsTrue(eventRaised); existingEntity.AssertAuditForDeletion(context, existingEntity.Id, null, x => x.Description, x => x.Id); } }
public async Task Can_get_all_logs() { string descr = RandomText; NormalModel model = ObjectFactory.Create <NormalModel>(); model.Description = descr; Db.NormalModels.Add(model); await Db.SaveChangesAsync(RandomText); model.Id.AssertIsNotZero(); IEnumerable <AuditLog> logs = Db .GetLogs("TrackerEnabledDbContext.Common.Testing.Models.NormalModel") .ToList(); logs.AssertCountIsNotZero("logs not found"); AuditLog lastLog = logs.LastOrDefault().AssertIsNotNull("last log is null"); IEnumerable <AuditLogDetail> details = lastLog.LogDetails .AssertIsNotNull("log details is null"); details.AssertCountIsNotZero("no log details found"); }
public void Can_track_local_propery_change() { //add enity string oldDescription = RandomText; string newDescription = RandomText; var entity = new NormalModel { Description = oldDescription }; Db.Entry(entity).State = EntityState.Added; Db.SaveChanges(); //modify entity entity.Description = newDescription; Db.SaveChanges(); AuditLogDetail[] expectedLog = new List <AuditLogDetail> { new AuditLogDetail { NewValue = newDescription, OriginalValue = oldDescription, PropertyName = "Description" } }.ToArray(); //assert entity.AssertAuditForModification(Db, entity.Id, null, expectedLog); }
public async Task Can_get_all_logs() { var options = new DbContextOptionsBuilder <TestTrackerContext>() .UseSqlServer(TestConnectionString) .Options; string descr = rdg.Get <string>(); NormalModel model = new NormalModel(); model.Description = descr; using (TestTrackerContext ttc = new TestTrackerContext(options)) { ttc.NormalModels.Add(model); await ttc.SaveChangesAsync(rdg.Get <string>()); model.Id.AssertIsNotZero(); IEnumerable <AuditLog> logs = ttc.GetLogs("TrackerEnabledDbContext.Common.Tests.Models.NormalModel") .AssertCountIsNotZero("logs not found"); AuditLog lastLog = logs.LastOrDefault().AssertIsNotNull("last log is null"); IEnumerable <AuditLogDetail> details = lastLog.LogDetails .AssertIsNotNull("log details is null") .AssertCountIsNotZero("no log details found"); } }
public void Can_track_deletion_when_state_changed() { var options = new DbContextOptionsBuilder <TestTrackerContext>() .UseSqlServer(TestConnectionString) .Options; string description = rdg.Get <string>(); //add NormalModel normalModel = new NormalModel(); normalModel.Description = description; using (TestTrackerContext ttc = new TestTrackerContext(options)) { ttc.NormalModels.Add(normalModel); ttc.SaveChanges(); //remove ttc.Entry(normalModel).State = EntityState.Deleted; ttc.SaveChanges(); //assert normalModel.AssertAuditForDeletion(ttc, normalModel.Id, null, x => x.Description, x => x.Id); } }
public async Task Can_save_changes_with_userID() { int userId = RandomNumber; //add enity string oldDescription = RandomText; string newDescription = RandomText; var entity = new NormalModel { Description = oldDescription }; Db.Entry(entity).State = EntityState.Added; Db.SaveChanges(); //modify entity entity.Description = newDescription; await Db.SaveChangesAsync(userId); AuditLogDetail[] expectedLog = new List <AuditLogDetail> { new AuditLogDetail { NewValue = newDescription, OriginalValue = oldDescription, PropertyName = "Description" } }.ToArray(); //assert entity.AssertAuditForModification(Db, entity.Id, userId.ToString(), expectedLog); }
public void Can_track_deletion() { var options = new DbContextOptionsBuilder <TestTrackerContext>() .UseSqlServer(TestConnectionString) .Options; string description = rdg.Get <string>(); string userName = rdg.Get <string>(); //add NormalModel normalModel = new NormalModel(); normalModel.Description = description; using (TestTrackerContext ttc = new TestTrackerContext(options)) { ttc.NormalModels.Add(normalModel); ttc.SaveChanges(userName); //remove ttc.NormalModels.Remove(normalModel); ttc.SaveChanges(userName); normalModel.AssertAuditForDeletion(ttc, normalModel.Id, userName, x => x.Description, x => x.Id); } }
/// <summary> /// SQL Server生成代码 /// </summary> /// <param name="className"></param> /// <param name="nameSpace"></param> /// <param name="filePath"></param> /// <param name="dt"></param> private void BuilderCode(string className, string nameSpace, string filePath, DataTable dt) { TableHelper helper = new TableHelper(false, false, false); NormalModel model = new NormalModel(); model.NameSpace = nameSpace; model.TableName = className; model.Title = className; // model.SearchColumnsStr List <CodeModel.ColumnInfo> list = new List <CodeModel.ColumnInfo>(); foreach (DataRow row in dt.Rows) { CodeModel.ColumnInfo column = new CodeModel.ColumnInfo(); column.ColumnName = row["COLUMN_NAME"].ToString(); column.DBType = row["DATA_TYPE"].ToString(); list.Add(column); } model.ColumnList = list; string content = helper.GetClassString(model); string fileName = filePath + className + ".cs"; using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate)) { byte[] buffer = Encoding.UTF8.GetBytes(content); fs.Write(buffer, 0, buffer.Length); //fs.Flush(); //fs.Close(); } }
private void CreatCodeByPDM(string nameSpace, string filePath, TableInfo table) { string tableName = table.Code; TableHelper helper = new TableHelper(false, false, false); NormalModel model = new NormalModel(); model.NameSpace = nameSpace; model.TableName = tableName; model.Title = table.Name; //model.ColumnList = table.Columns; // model.SearchColumnsStr List <CodeModel.ColumnInfo> list = new List <CodeModel.ColumnInfo>(); foreach (var row in table.Columns) { CodeModel.ColumnInfo column = new CodeModel.ColumnInfo(); column.ColumnName = row.Code; column.DBType = row.DataType; column.Comment = row.Name; column.IsAutoIncrement = row.Identity; column.IsMainKey = row.IsPrimaryKey; list.Add(column); } model.ColumnList = list; string content = helper.GetClassString(model, true); string fileName = filePath + "\\" + tableName + ".cs"; using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate)) { byte[] buffer = Encoding.UTF8.GetBytes(content); fs.Write(buffer, 0, buffer.Length); } }
public void Can_save_model() { NormalModel model = ObjectFactory.Create <NormalModel>(); Db.NormalModels.Add(model); Db.SaveChanges(); model.Id.AssertIsNotZero(); }
public void Can_save_when_entity_state_changed() { NormalModel model = ObjectFactory.Create <NormalModel>(); Db.Entry(model).State = EntityState.Added; Db.SaveChanges(); model.Id.AssertIsNotZero(); }
public async Task Can_save_async() { NormalModel model = ObjectFactory.Create <NormalModel>(); Db.Entry(model).State = EntityState.Added; await Db.SaveChangesAsync(); model.Id.AssertIsNotZero(); }
public void Can_Create_AuditLogDetail_ForAddedEntity_WithoutQueryingDatabase() { NormalModel model = ObjectFactory.Create <NormalModel>(); Db.NormalModels.Add(model); Db.ChangeTracker.DetectChanges(); optionsBuilder.LogTo(sql => Assert.Fail("Expected no database queries but the following query was executed: {0}", sql)); }
/// <summary> /// Creates a Distribution object by analyzing the distribution of the list. /// </summary> /// <param name="list">List to be analyzed</param> /// <returns>Distribution object about the list's distribution</returns> public static Distribution MakeDistribution <T>(this IList <T> list) where T : IConvertible { double mean = list.Mean(); NormalModel norm = new NormalModel(mean, list.StandardDeviation(mean)); //FiveNumberSummary sum = list.Get5NS(); return(new Distribution(norm)); }
private void btnCreate_Click(object sender, EventArgs e) { NormalModel model = new NormalModel(); model.DbName = this.txtDBName.Text.Trim(); model.SearchColumnsStr = this.txtSearchColumnName.Text.Trim(); model.TableStr = this.txtName.Text.Trim(); model.NameSpace = this.txtNameSpace.Text.Trim(); model.DbType = rbtnMSSQL.Checked ? 0 : 1; UIHelper.InitNormalCode(model); CreateClass(model); if (model.DbType == 0) { SqlCreateSqlHelper sqlHelper = new SqlCreateSqlHelper(model); SetContent(this.txtAddCode, sqlHelper.CreateInsertMethod); SetContent(this.txtDeleteCode, sqlHelper.CreateDeleteMethod); SetContent(this.txtBatDeleteCode, sqlHelper.CreateBatDeleteMethod); SetContent(this.txtUpdateCode, sqlHelper.CreateUpdateMethod); SetContent(this.txtSearchAllCode, sqlHelper.CreateSelectByPageAndSizeAddCount); SetContent(this.txtSearchPageCode, sqlHelper.CreateSelectByPageAndSize); SetContent(this.txtFactoryCode, sqlHelper.CreateConnectionFactory); SetContent(this.txtHelperCode, SourceHelper.GetResource, "sqlhelper.txt"); SetContent(this.txtAll, new List <Func <string> >() { sqlHelper.CreateInsertMethod, sqlHelper.CreateDeleteMethod, sqlHelper.CreateBatDeleteMethod, sqlHelper.CreateUpdateMethod, sqlHelper.CreateSelectByPageAndSizeAddCount, sqlHelper.CreateSelectByPageAndSize }); } else if (model.DbType == 1) { MySqlCreateMySqlHelper sqlHelper = new MySqlCreateMySqlHelper(model); SetContent(this.txtAddCode, sqlHelper.CreateInsertMethod); SetContent(this.txtDeleteCode, sqlHelper.CreateDeleteMethod); SetContent(this.txtBatDeleteCode, sqlHelper.CreateBatDeleteMethod); SetContent(this.txtUpdateCode, sqlHelper.CreateUpdateMethod); SetContent(this.txtSearchAllCode, sqlHelper.CreateSelectByPageAndSizeAddCount); SetContent(this.txtSearchPageCode, sqlHelper.CreateSelectByPageAndSize); SetContent(this.txtFactoryCode, sqlHelper.CreateConnectionFactory); SetContent(this.txtHelperCode, SourceHelper.GetResource, "mysqlhelper.txt"); SetContent(this.txtAll, new List <Func <string> >() { sqlHelper.CreateInsertMethod, sqlHelper.CreateDeleteMethod, sqlHelper.CreateBatDeleteMethod, sqlHelper.CreateUpdateMethod, sqlHelper.CreateSelectByPageAndSizeAddCount, sqlHelper.CreateSelectByPageAndSize }); } }
public void Can_recognise_context_tracking_indicator_when_disabled() { NormalModel model = ObjectFactory.Create <NormalModel>(); Db.NormalModels.Add(model); Db.TrackingEnabled = false; Db.SaveChanges(); model.AssertNoLogs(Db, model.Id); }
private NormalModel GetDisconnectedExistingNormalModel() { TestTrackerContext newContext1 = GetNewContextInstance(); NormalModel entity = new NormalModel(); newContext1.NormalModels.Add(entity); newContext1.SaveChanges(); entity.Id.AssertIsNotZero("entity was not saved to database"); return(entity); }
public void Can_Create_AuditLogDetail_ForAddedEntity_WithoutQueryingDatabase() { NormalModel model = ObjectFactory.Create <NormalModel>(); Db.NormalModels.Add(model); Db.ChangeTracker.DetectChanges(); var entry = Db.ChangeTracker.Entries().First(); var auditor = new AdditionLogDetailsAuditor(entry, null); optionsBuilder.LogTo(sql => Assert.Fail("Expected no database queries but the following query was executed: {0}", sql)); var auditLogDetails = auditor.CreateLogDetails().ToList(); }
public void CalculateNormalsCubeTest() { Model cube = new ColouredCube(); Vector3[] normals = NormalModel.CalculateNormals(cube); Vector3 sum = new Vector3(); foreach (Vector3 v in normals) { sum += v; } VectorAssertions.AreEqual(new Vector3(), sum, 0.0001); }
public void Can_track_addition_when_usermane_not_provided() { string randomText = RandomText; NormalModel normalModel = ObjectFactory.Create <NormalModel>(); normalModel.Description = randomText; Db.NormalModels.Add(normalModel); Db.SaveChanges(); normalModel.AssertAuditForAddition(Db, normalModel.Id, null, x => x.Description, x => x.Id); }
public async Task Can_get_all_logs() { string descr = RandomText; NormalModel model = ObjectFactory.Create <NormalModel>(); model.Description = descr; Db.NormalModels.Add(model); await Db.SaveChangesAsync(RandomText); model.Id.AssertIsNotZero(); Db.GetLogs("TrackerEnabledDbContext.Common.Testing.Models.NormalModel") .AssertCountIsNotZero("logs not found"); }
public void Can_save_model() { var options = new DbContextOptionsBuilder <TestTrackerContext>() .UseSqlServer(TestConnectionString) .Options; NormalModel model = new NormalModel(); using (TestTrackerContext ttc = new TestTrackerContext(options)) { ttc.NormalModels.Add(model); ttc.SaveChanges(); } model.Id.AssertIsNotZero(); }
public void Can_save_when_entity_state_changed() { var options = new DbContextOptionsBuilder <TestTrackerContext>() .UseSqlServer(TestConnectionString) .Options; NormalModel model = new NormalModel(); using (TestTrackerContext ttc = new TestTrackerContext(options)) { ttc.Entry(model).State = EntityState.Added; ttc.SaveChanges(); } model.Id.AssertIsNotZero(); }
public void Can_track_addition_when_state_changed_directly() { string randomText = RandomText; string userName = RandomText; NormalModel model = ObjectFactory.Create <NormalModel>(); model.Description = randomText; Db.Entry(model).State = EntityState.Added; Db.SaveChanges(userName); model.AssertAuditForAddition(Db, model.Id, userName, x => x.Description, x => x.Id); }
public async Task Can_save_async() { var options = new DbContextOptionsBuilder <TestTrackerContext>() .UseSqlServer(TestConnectionString) .Options; NormalModel model = new NormalModel(); using (TestTrackerContext ttc = new TestTrackerContext(options)) { ttc.Entry(model).State = EntityState.Added; await ttc.SaveChangesAsync(); } model.Id.AssertIsNotZero(); }
public async Task Can_Override_annotation_based_configuration_for_entity_skipTracking() { var model = new NormalModel(); EntityTracker .OverrideTracking <NormalModel>() .Disable(); string userName = RandomText; Db.NormalModels.Add(model); await Db.SaveChangesAsync(userName); model.AssertNoLogs(Db, model.Id); }
public void Can_track_addition_when_usermane_not_provided() { string randomText = RandomText; NormalModel normalModel = ObjectFactory <NormalModel> .Create(); normalModel.Description = randomText; db.NormalModels.Add(normalModel); db.SaveChanges(); normalModel.AssertAuditForAddition(db, normalModel.Id, null, new KeyValuePair <string, string>("Description", randomText), new KeyValuePair <string, string>("Id", normalModel.Id.ToString()) ); }
public void Can_Create_AuditLogDetail_ForDeletedEntity_WithoutQueryingDatabase() { NormalModel model = ObjectFactory.Create <NormalModel>(); Db.NormalModels.Add(model); Db.SaveChanges(); Db.NormalModels.Remove(model); Db.ChangeTracker.DetectChanges(); EntityEntry entry = Db.ChangeTracker.Entries().First(); ChangeLogDetailsAuditor auditor = new ChangeLogDetailsAuditor(entry, null); // Db.Database.Log = sql => Assert.Fail("Expected no database queries but the following query was executed: {0}", sql); // var auditLogDetails = auditor.CreateLogDetails().ToList(); // Db.Database.Log = null; }
public void Can_track_addition_when_username_provided() { string randomText = RandomText; string userName = RandomText; NormalModel normalModel = ObjectFactory <NormalModel> .Create(); normalModel.Description = randomText; db.NormalModels.Add(normalModel); db.SaveChanges(userName); normalModel.AssertAuditForAddition(db, normalModel.Id, userName, x => x.Description, x => x.Id); }