public bool Bind() { if (response.RowSets.Length == 0) { return(false); } RowSet rowSet = response.RowSets[0]; foreach (Row row in rowSet.Rows) { AmplaRecord model = new AmplaRecord(Convert.ToInt32(row.id)) { Module = modelProperties.Module.ToString(), ModelName = modelProperties.GetModelName() }; foreach (var column in rowSet.Columns) { model.AddColumn(column.displayName, DataTypeHelper.GetDataType(column.type)); } foreach (XmlElement cell in row.Any) { string field = XmlConvert.DecodeName(cell.Name); string value = cell.InnerText; model.SetValue(field, value); } model.SetMappedProperties(amplaViewProperties.GetFieldMappings()); records.Add(model); } return(true); }
/// <summary> /// Gets the versions of the model /// </summary> /// <param name="id">The unique identifier.</param> /// <returns></returns> public ModelVersions GetVersions(int id) { IAmplaViewProperties <TModel> amplaViewProperties = GetViewProperties(null); amplaViewProperties.Enforce.CanView(); FilterValue idFilter = new FilterValue("Id", Convert.ToString(id)); FilterValue deletedFilter = new FilterValue("Deleted", ""); GetDataRequest dataRequest = GetDataRequest(false, idFilter, deletedFilter); GetDataResponse dataResponse = webServiceClient.GetData(dataRequest); TModel model; AmplaRecord amplaRecord = FindAmplaRecord(dataResponse, ModelProperties, amplaViewProperties, out model); if (amplaRecord != null) { var request = GetAuditDataRequest(amplaRecord); GetAuditDataResponse response = webServiceClient.GetAuditData(request); List <AmplaAuditRecord> auditRecords = new List <AmplaAuditRecord>(); IAmplaBinding binding = new AmplaGetAuditDataRecordBinding <TModel>(response, amplaRecord, auditRecords, modelProperties); if (binding.Validate() && binding.Bind()) { AmplaAuditRecord auditRecord = auditRecords.Count > 0 ? auditRecords[0] : null; ModelVersions modelVersions = new ModelVersions(amplaRecord); IAmplaBinding historyBinding = new AmplaGetDataVersionsBinding <TModel>(amplaRecord, auditRecord, model, modelVersions, modelProperties, amplaViewProperties); if (historyBinding.Validate() && historyBinding.Bind()) { return(modelVersions); } } } return(null); }
public void SingleRecordThatHasBeenDeleted() { DateTime createdTime = DateTime.Today.AddDays(-1); AmplaRecord record = CreateRecord(100); AmplaAuditRecord auditRecord = CreateAuditRecord(record); IAmplaViewProperties <ProductionModel> viewProperties = GetViewProperties(); record.AddColumn("CreatedDateTime", typeof(DateTime)); record.AddColumn("Deleted", typeof(bool)); record.SetValue("CreatedDateTime", Iso8601DateTimeConverter.ConvertFromLocalDateTime(createdTime)); record.SetValue("Deleted", "True"); auditRecord.Changes.Add ( AddSession("User", DateTime.Today, "IsDeleted", "False", "True") ); AmplaRecordHistory <ProductionModel> amplaRecordHistory = new AmplaRecordHistory <ProductionModel>(record, auditRecord, viewProperties); List <AmplaRecordChanges> changes = amplaRecordHistory.Reconstruct(); Assert.That(changes, Is.Not.Empty); Assert.That(changes.Count, Is.EqualTo(2)); Assert.That(changes[0].Operation, Is.EqualTo("Create Record")); Assert.That(changes[0].User, Is.EqualTo("System")); Assert.That(changes[0].Changes, Is.Empty); Assert.That(changes[1].Operation, Is.EqualTo("Delete Record")); Assert.That(changes[1].User, Is.EqualTo("User")); Assert.That(changes[1].Changes, Is.Not.Empty); AmplaAuditField deleted = changes[1].Changes[0]; Assert.That(deleted.Name, Is.EqualTo("IsDeleted")); }
public ModifyRecordEventDectection(AmplaRecord amplaRecord, AmplaAuditRecord amplaAuditRecord, IAmplaViewProperties <TModel> viewProperties) : base("Modify Record") { this.amplaRecord = amplaRecord; this.amplaAuditRecord = amplaAuditRecord; this.viewProperties = viewProperties; }
public void DetectChangesWithOneFieldAuditTrail() { AmplaRecord record = CreateRecord(100); AmplaAuditRecord auditRecord = CreateAuditRecord(record); IAmplaViewProperties <ProductionModel> viewProperties = GetViewProperties(); auditRecord.Changes = new List <AmplaAuditSession> { AddSession("User", DateTime.Today, "Value", "100", "200") }; ModifyRecordEventDectection <ProductionModel> recordEventDectection = new ModifyRecordEventDectection <ProductionModel>(record, auditRecord, viewProperties); List <AmplaRecordChanges> changes = recordEventDectection.DetectChanges(); Assert.That(changes, Is.Not.Empty); Assert.That(changes.Count, Is.EqualTo(1)); Assert.That(changes[0].User, Is.EqualTo("User")); Assert.That(changes[0].VersionDateTime, Is.EqualTo(DateTime.Today)); Assert.That(changes[0].Operation, Is.EqualTo("Modify Record")); Assert.That(changes[0].Changes, Is.Not.Empty); Assert.That(changes[0].Changes[0].Name, Is.EqualTo("Value")); Assert.That(changes[0].Changes[0].OriginalValue, Is.EqualTo("100")); Assert.That(changes[0].Changes[0].EditedValue, Is.EqualTo("200")); }
public void GetHistory_NoChanges() { Assert.That(Records, Is.Empty); AreaValueModel model = new AreaValueModel { Area = "ROM", Value = 100 }; Repository.Add(model); Assert.That(Records.Count, Is.EqualTo(1)); AmplaRecord record = Repository.FindRecord(model.Id); Assert.That(record, Is.Not.Null); Assert.That(record.GetValue("Area"), Is.EqualTo(model.Area)); Assert.That(record.GetValue("Value"), Is.EqualTo(model.Value)); Assert.That(record.Location, Is.EqualTo(location)); Assert.That(record.Id, Is.EqualTo(model.Id)); AmplaAuditRecord auditRecord = Repository.GetHistory(model.Id); Assert.That(auditRecord, Is.Not.Null); Assert.That(auditRecord.Id, Is.EqualTo(model.Id)); Assert.That(auditRecord.Location, Is.EqualTo(location)); Assert.That(auditRecord.Module, Is.EqualTo(module)); Assert.That(auditRecord.Changes, Is.Empty); }
public AmplaGetAuditDataRecordBinding(GetAuditDataResponse response, AmplaRecord record, List <AmplaAuditRecord> records, IModelProperties <TModel> modelProperties) { this.response = response; this.record = record; this.records = records; this.modelProperties = modelProperties; }
public void DetectChangesWithAuditTrailWithNoChangesInValues() { AmplaRecord record = CreateRecord(100); AmplaAuditRecord auditRecord = CreateAuditRecord(record); IAmplaViewProperties <ProductionModel> viewProperties = GetViewProperties(); auditRecord.Changes = new List <AmplaAuditSession> { AddSession("User", DateTime.Today, "Value", "100", "100"), AddSession("Admin", DateTime.Today.AddHours(1), new[] { "One", "Two" }, new[] { "11", "222" }, new[] { "111", "222" }) }; ModifyRecordEventDectection <ProductionModel> recordEventDectection = new ModifyRecordEventDectection <ProductionModel>(record, auditRecord, viewProperties); List <AmplaRecordChanges> changes = recordEventDectection.DetectChanges(); Assert.That(changes, Is.Not.Empty); Assert.That(changes.Count, Is.EqualTo(1)); Assert.That(changes[0].User, Is.EqualTo("Admin")); Assert.That(changes[0].VersionDateTime, Is.EqualTo(DateTime.Today.AddHours(1))); Assert.That(changes[0].Operation, Is.EqualTo("Modify Record")); Assert.That(changes[0].Changes, Is.Not.Empty); Assert.That(changes[0].Changes.Length, Is.EqualTo(1)); Assert.That(changes[0].Changes[0].Name, Is.EqualTo("One")); Assert.That(changes[0].Changes[0].OriginalValue, Is.EqualTo("11")); Assert.That(changes[0].Changes[0].EditedValue, Is.EqualTo("111")); }
public void FindRecord() { AreaModel match = new AreaModel { Area = "ROM", Value = 200 }; AreaModel noMatch = new AreaModel { Area = "ROM", Value = 100 }; AreaModel extra = new AreaModel { Area = "Mining", Value = 100 }; Repository.Add(match); Repository.Add(noMatch); Repository.Add(extra); Assert.That(Records.Count, Is.EqualTo(3)); AmplaRecord record = Repository.FindRecord(match.Id); Assert.That(record, Is.Not.Null); Assert.That(record.GetValue("Area"), Is.EqualTo("ROM")); // it should not find a record that doesn't match the default filter record = Repository.FindRecord(extra.Id); Assert.That(record, Is.Null); }
public AmplaGetDataVersionsBinding(AmplaRecord amplaRecord, AmplaAuditRecord auditRecord, TModel currentModel, ModelVersions versions, IModelProperties <TModel> modelProperties, IAmplaViewProperties <TModel> viewProperties) { this.amplaRecord = amplaRecord; this.auditRecord = auditRecord; this.currentModel = currentModel; this.versions = versions; this.modelProperties = modelProperties; this.viewProperties = viewProperties; }
/// <summary> /// GET /{Model}/Record/{id} /// </summary> /// <param name="id"></param> /// <returns></returns> public ActionResult Record(int id = 0) { AmplaRecord model = Repository.FindRecord(id); if (model == null) { return(HttpNotFound()); } return(View("Record", model)); }
public void DetectChangesWithNoAuditTrail() { AmplaRecord record = CreateRecord(100); AmplaAuditRecord auditRecord = CreateAuditRecord(record); IAmplaViewProperties <ProductionModel> viewProperties = GetViewProperties(); ModifyRecordEventDectection <ProductionModel> recordEventDectection = new ModifyRecordEventDectection <ProductionModel>(record, auditRecord, viewProperties); List <AmplaRecordChanges> changes = recordEventDectection.DetectChanges(); Assert.That(changes, Is.Empty); }
protected AmplaRecord CreateRecord(int id) { AmplaRecord record = new AmplaRecord(id) { Location = location, Module = module, ModelName = "Production Model" }; return(record); }
public void GetHistory_WithChanges() { Assert.That(Records, Is.Empty); AreaValueModel model = new AreaValueModel { Area = "ROM", Value = 100 }; Repository.Add(model); Assert.That(Records.Count, Is.EqualTo(1)); AmplaRecord record = Repository.FindRecord(model.Id); Assert.That(record, Is.Not.Null); Assert.That(record.GetValue("Area"), Is.EqualTo(model.Area)); Assert.That(record.GetValue("Value"), Is.EqualTo(model.Value)); Assert.That(record.Location, Is.EqualTo(location)); Assert.That(record.Id, Is.EqualTo(model.Id)); AreaValueModel updated = new AreaValueModel { Id = model.Id, Area = "ROM", Value = 200 }; DateTime before = DateTime.Now.AddMinutes(-1); DateTime after = DateTime.Now.AddMinutes(+1); Repository.Update(updated); record = Repository.FindRecord(model.Id); Assert.That(record, Is.Not.Null); Assert.That(record.GetValue("Area"), Is.EqualTo(model.Area)); Assert.That(record.GetValue("Value"), Is.EqualTo(200)); Assert.That(record.Location, Is.EqualTo(location)); Assert.That(record.Id, Is.EqualTo(model.Id)); AmplaAuditRecord auditRecord = Repository.GetHistory(model.Id); Assert.That(auditRecord, Is.Not.Null); Assert.That(auditRecord.Id, Is.EqualTo(model.Id)); Assert.That(auditRecord.Location, Is.EqualTo(location)); Assert.That(auditRecord.Module, Is.EqualTo(module)); Assert.That(auditRecord.Changes, Is.Not.Empty); Assert.That(auditRecord.Changes.Count, Is.EqualTo(1)); AmplaAuditSession session = auditRecord.Changes[0]; Assert.That(session.User, Is.EqualTo("User")); Assert.That(session.EditedTime, Is.InRange(before, after)); Assert.That(session.Fields, Is.Not.Empty); AssertAuditField(session, "Value", "100", "200"); }
protected AmplaAuditRecord CreateAuditRecord(AmplaRecord record) { AmplaAuditRecord auditRecord = new AmplaAuditRecord { Id = record.Id, Location = record.Location, Module = record.Module, Changes = new List <AmplaAuditSession>() }; return(auditRecord); }
public GetAuditDataRequest GetAuditDataRequest(AmplaRecord record) { GetAuditDataRequest request = new GetAuditDataRequest { Credentials = CreateCredentials(), Filter = new GetAuditDataFilter { Location = record.Location, Module = ModelProperties.Module, SetId = Convert.ToString(record.Id) } }; return(request); }
public void DetectChangesWithAuditTrailWithNoChangeInValue() { AmplaRecord record = CreateRecord(100); AmplaAuditRecord auditRecord = CreateAuditRecord(record); IAmplaViewProperties <ProductionModel> viewProperties = GetViewProperties(); auditRecord.Changes = new List <AmplaAuditSession> { AddSession("User", DateTime.Today, "Value", "100", "100") }; ModifyRecordEventDectection <ProductionModel> recordEventDectection = new ModifyRecordEventDectection <ProductionModel>(record, auditRecord, viewProperties); List <AmplaRecordChanges> changes = recordEventDectection.DetectChanges(); Assert.That(changes, Is.Empty); }
public void SingleRecordWithNoHistory() { AmplaRecord record = CreateRecord(100); AmplaAuditRecord auditRecord = CreateAuditRecord(record); IAmplaViewProperties <ProductionModel> viewProperties = GetViewProperties(); AmplaRecordHistory <ProductionModel> amplaRecordHistory = new AmplaRecordHistory <ProductionModel>(record, auditRecord, viewProperties); List <AmplaRecordChanges> changes = amplaRecordHistory.Reconstruct(); Assert.That(changes, Is.Not.Empty); Assert.That(changes, Is.Not.Empty); Assert.That(changes.Count, Is.EqualTo(1)); Assert.That(changes[0].Operation, Is.EqualTo("Create Record")); Assert.That(changes[0].User, Is.EqualTo("System")); Assert.That(changes[0].Changes, Is.Empty); }
public void DetectChangesWithDeletedRecords() { AmplaRecord record = CreateRecord(100); AmplaAuditRecord auditRecord = CreateAuditRecord(record); IAmplaViewProperties <ProductionModel> viewProperties = GetViewProperties(); record.AddColumn("Sample Period", typeof(DateTime)); record.SetValue("Sample Period", Iso8601DateTimeConverter.ConvertFromLocalDateTime(DateTime.Today.AddDays(-1))); auditRecord.Changes = new List <AmplaAuditSession> { AddSession("User", DateTime.Today, "IsDeleted", "False", "True") }; ModifyRecordEventDectection <ProductionModel> recordEventDectection = new ModifyRecordEventDectection <ProductionModel>(record, auditRecord, viewProperties); List <AmplaRecordChanges> changes = recordEventDectection.DetectChanges(); Assert.That(changes, Is.Empty); }
public void GetVersions_NoChanges() { Assert.That(Records, Is.Empty); AreaValueModel model = new AreaValueModel { Area = "ROM", Value = 100 }; Repository.Add(model); Assert.That(Records.Count, Is.EqualTo(1)); AmplaRecord record = Repository.FindRecord(model.Id); Assert.That(record, Is.Not.Null); Assert.That(record.GetValue("Area"), Is.EqualTo(model.Area)); Assert.That(record.GetValue("Value"), Is.EqualTo(model.Value)); Assert.That(record.Location, Is.EqualTo(location)); Assert.That(record.Id, Is.EqualTo(model.Id)); ModelVersions versions = Repository.GetVersions(model.Id); Assert.That(versions, Is.Not.Null); Assert.That(versions.Versions, Is.Not.Empty); Assert.That(versions.Id, Is.EqualTo(record.Id)); Assert.That(versions.Location, Is.EqualTo(record.Location)); Assert.That(versions.Module, Is.EqualTo(record.Module)); Assert.That(versions.ModelName, Is.EqualTo("Area Value Model")); ModelVersion <AreaValueModel> version = (ModelVersion <AreaValueModel>)versions.Versions[0]; Assert.That(version.Model, Is.Not.Null); Assert.That(version.Model.Id, Is.EqualTo(model.Id)); Assert.That(version.Model.Value, Is.EqualTo(model.Value)); Assert.That(version.Model.Area, Is.EqualTo(model.Area)); Assert.That(version.IsCurrentVersion, Is.True); }
public void AmplaRecordShowsLocalTime() { Assert.That(Records, Is.Empty); DateTime localHour = DateTime.Now.TrimToHour(); AreaValueModel model = new AreaValueModel { Area = "ROM", Value = 100, Sample = localHour }; Repository.Add(model); Assert.That(Records, Is.Not.Empty); int recordId = Records[0].RecordId; AmplaRecord record = Repository.FindRecord(recordId); Assert.That(record.Location, Is.EqualTo(location)); Assert.That(record.Id, Is.EqualTo(recordId)); Assert.That(record.GetValue("Area"), Is.EqualTo("ROM")); Assert.That(record.GetValue("Value"), Is.EqualTo(100.0d)); Assert.That(record.GetValue("Sample Period"), Is.EqualTo(localHour)); }
public void SingleRecordWithCreateHistory() { AmplaRecord record = CreateRecord(100); AmplaAuditRecord auditRecord = CreateAuditRecord(record); IAmplaViewProperties <ProductionModel> viewProperties = GetViewProperties(); record.AddColumn("CreatedDateTime", typeof(DateTime)); record.AddColumn("CreatedBy", typeof(string)); record.SetValue("CreatedBy", "Admin"); DateTime created = DateTime.Today.AddHours(1); record.SetValue("CreatedDateTime", Iso8601DateTimeConverter.ConvertFromLocalDateTime(created)); AmplaRecordHistory <ProductionModel> amplaRecordHistory = new AmplaRecordHistory <ProductionModel>(record, auditRecord, viewProperties); List <AmplaRecordChanges> changes = amplaRecordHistory.Reconstruct(); Assert.That(changes, Is.Not.Empty); Assert.That(changes.Count, Is.EqualTo(1)); Assert.That(changes[0].Operation, Is.EqualTo("Create Record")); Assert.That(changes[0].User, Is.EqualTo("Admin")); Assert.That(changes[0].VersionDateTime, Is.EqualTo(created)); Assert.That(changes[0].Changes, Is.Empty); }
public void ShowSimpleUsersName() { AmplaRecord record = CreateRecord(100); AmplaAuditRecord auditRecord = CreateAuditRecord(record); IAmplaViewProperties <ProductionModel> viewProperties = GetViewProperties(); record.AddColumn("CreatedDateTime", typeof(DateTime)); record.AddColumn("CreatedBy", typeof(string)); record.SetValue("CreatedBy", "System Configuration.Users.User"); DateTime created = DateTime.Today.AddHours(1); record.SetValue("CreatedDateTime", Iso8601DateTimeConverter.ConvertFromLocalDateTime(created)); CreateRecordEventDectection <ProductionModel> recordEventDectection = new CreateRecordEventDectection <ProductionModel>(record, auditRecord, viewProperties); List <AmplaRecordChanges> changes = recordEventDectection.DetectChanges(); Assert.That(changes, Is.Not.Empty); Assert.That(changes[0].Operation, Is.EqualTo("Create Record")); Assert.That(changes[0].User, Is.EqualTo("User")); Assert.That(changes[0].VersionDateTime, Is.EqualTo(created)); Assert.That(changes[0].Changes, Is.Empty); Assert.That(changes[0].Display, Is.EqualTo("User created record")); }
public AmplaRecordHistory(AmplaRecord amplaRecord, AmplaAuditRecord auditRecord, IAmplaViewProperties <TModel> viewProperties) { this.amplaRecord = amplaRecord; this.auditRecord = auditRecord; this.viewProperties = viewProperties; }
public void BindWithEmptyOriginalValue_double() { AmplaRecord amplaRecord = new AmplaRecord(100) { Location = location, Module = module, ModelName = "" }; amplaRecord.AddColumn("Value", typeof(double)); amplaRecord.AddColumn("Area", typeof(string)); amplaRecord.SetValue("Value", "100.0"); amplaRecord.SetValue("Area", "ROM"); AmplaAuditRecord auditRecord = new AmplaAuditRecord { Id = amplaRecord.Id, Location = amplaRecord.Location, Module = amplaRecord.Module, Changes = new List <AmplaAuditSession> { new AmplaAuditSession("User", DateTime.Today) } }; auditRecord.Changes[0].Fields.Add(new AmplaAuditField { Name = "Value", OriginalValue = "", EditedValue = "100" }); AreaValueModel model = new AreaValueModel { Id = 100, Area = "ROM", Value = 100.0d }; ModelVersions modelVersions = new ModelVersions(amplaRecord); IModelProperties <AreaValueModel> modelProperties = new ModelProperties <AreaValueModel>(); AmplaViewProperties <AreaValueModel> viewProperties = new AmplaViewProperties <AreaValueModel>(modelProperties); GetViewsResponse view = new GetViewsResponse { Context = new GetViewsResponseContext(), Views = new[] { ProductionViews.AreaValueModelView() } }; viewProperties.Initialise(view); AmplaGetDataVersionsBinding <AreaValueModel> binding = new AmplaGetDataVersionsBinding <AreaValueModel>(amplaRecord, auditRecord, model, modelVersions, modelProperties, viewProperties); Assert.That(binding.Validate(), Is.True); Assert.That(binding.Bind(), Is.True); Assert.That(modelVersions.Versions, Is.Not.Empty); Assert.That(modelVersions.Versions.Count, Is.EqualTo(2)); ModelVersion <AreaValueModel> last = (ModelVersion <AreaValueModel>)modelVersions.Versions[0]; ModelVersion <AreaValueModel> current = (ModelVersion <AreaValueModel>)modelVersions.Versions[1]; Assert.That(last.IsCurrentVersion, Is.False); Assert.That(current.IsCurrentVersion, Is.True); Assert.That(last.Model.Area, Is.EqualTo(model.Area)); Assert.That(current.Model.Area, Is.EqualTo(model.Area)); Assert.That(last.Model.Value, Is.EqualTo(0d)); Assert.That(current.Model.Value, Is.EqualTo(100d)); Assert.That(last.Model.Id, Is.EqualTo(100)); Assert.That(current.Model.Id, Is.EqualTo(100)); }
public void GetVersion_WithChanges() { Assert.That(Records, Is.Empty); DateTime beforeAdd = DateTime.Now.AddSeconds(-1); AreaValueModel model = new AreaValueModel { Area = "ROM", Value = 100 }; Repository.Add(model); DateTime afterAdd = DateTime.Now.AddSeconds(+1); Assert.That(Records.Count, Is.EqualTo(1)); AmplaRecord record = Repository.FindRecord(model.Id); Assert.That(record, Is.Not.Null); DateTime beforeUpdate = DateTime.Now.AddSeconds(-1); AreaValueModel updated = new AreaValueModel { Id = model.Id, Area = "ROM", Value = 200 }; DateTime afterUpdate = DateTime.Now.AddSeconds(1); Repository.Update(updated); record = Repository.FindRecord(model.Id); Assert.That(record, Is.Not.Null); Assert.That(record.GetValue("Area"), Is.EqualTo(model.Area)); Assert.That(record.GetValue("Value"), Is.EqualTo(200)); Assert.That(record.Location, Is.EqualTo(location)); Assert.That(record.Id, Is.EqualTo(model.Id)); ModelVersions versions = Repository.GetVersions(model.Id); Assert.That(versions, Is.Not.Null); Assert.That(versions.Versions, Is.Not.Empty); Assert.That(versions.Versions.Count, Is.EqualTo(2)); ModelVersion <AreaValueModel> last = (ModelVersion <AreaValueModel>)versions.Versions[0]; ModelVersion <AreaValueModel> current = (ModelVersion <AreaValueModel>)versions.Versions[1]; Assert.That(last.Model, Is.Not.Null); Assert.That(last.IsCurrentVersion, Is.False); Assert.That(last.Model.Id, Is.EqualTo(model.Id)); Assert.That(last.Model.Value, Is.EqualTo(model.Value)); Assert.That(last.Model.Area, Is.EqualTo(model.Area)); Assert.That(last.User, Is.EqualTo("User")); Assert.That(last.VersionDate, Is.InRange(beforeAdd, afterAdd)); Assert.That(last.Version, Is.EqualTo(1)); Assert.That(current.Model, Is.Not.Null); Assert.That(current.IsCurrentVersion, Is.True); Assert.That(current.Model.Id, Is.EqualTo(updated.Id)); Assert.That(current.Model.Value, Is.EqualTo(updated.Value)); Assert.That(current.Model.Area, Is.EqualTo(updated.Area)); Assert.That(current.User, Is.EqualTo("User")); Assert.That(current.VersionDate, Is.InRange(beforeUpdate, afterUpdate)); Assert.That(current.Version, Is.EqualTo(2)); }