示例#1
0
        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"));
        }
示例#2
0
 public AmplaAddDataBinding(List <TModel> models, List <SubmitDataRecord> records, IAmplaViewProperties <TModel> amplaViewProperties, IModelProperties <TModel> modelProperties)
 {
     this.models              = models;
     this.records             = records;
     this.amplaViewProperties = amplaViewProperties;
     this.modelProperties     = modelProperties;
 }
示例#3
0
        /// <summary>
        /// Updates the specified model.
        /// </summary>
        /// <param name="model">The model.</param>
        public void Update(TModel model)
        {
            IAmplaViewProperties <TModel> amplaViewProperties = GetViewProperties(model);

            amplaViewProperties.Enforce.CanModify();

            List <int> identifiers = new List <int>();

            TModel        existing     = null;
            IAmplaBinding modelBinding = new ModelIdentifierBinding <TModel>(model, identifiers, ModelProperties);

            if (modelBinding.Validate() && modelBinding.Bind())
            {
                existing = FindById(identifiers[0]);
            }

            SubmitDataRequest request = new SubmitDataRequest {
                Credentials = CreateCredentials()
            };
            List <SubmitDataRecord> records = new List <SubmitDataRecord>();

            IAmplaBinding binding = new AmplaUpdateDataBinding <TModel>(existing, model, records, amplaViewProperties, ModelProperties);

            if (binding.Validate() && binding.Bind())
            {
                request.SubmitDataRecords = records.ToArray();
                WebServiceClient.SubmitData(request);
            }
        }
示例#4
0
        /// <summary>
        /// Adds the specified model.
        /// </summary>
        /// <param name="model">The model.</param>
        public void Add(TModel model)
        {
            IAmplaViewProperties <TModel> amplaViewProperties = GetViewProperties(model);

            amplaViewProperties.Enforce.CanAdd();

            SubmitDataRequest request = new SubmitDataRequest {
                Credentials = CreateCredentials()
            };
            List <SubmitDataRecord> records = new List <SubmitDataRecord>();
            List <TModel>           models  = new List <TModel> {
                model
            };

            IAmplaBinding binding = new AmplaAddDataBinding <TModel>(models, records, amplaViewProperties, ModelProperties);

            if (binding.Validate() && binding.Bind())
            {
                request.SubmitDataRecords = records.ToArray();
                SubmitDataResponse response = WebServiceClient.SubmitData(request);

                IAmplaBinding resultBinding = new AmplaDataSubmissionResultBinding <TModel>(response.DataSubmissionResults, models, ModelProperties);
                if (resultBinding.Validate())
                {
                    resultBinding.Bind();
                }
            }
        }
示例#5
0
        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"));
        }
示例#6
0
        /// <summary>
        /// Validates the Ampla Field Mapping.
        /// </summary>
        /// <returns></returns>
        public IList <string> ValidateMapping(TModel model)
        {
            List <string> messages = new List <string>();

            IAmplaViewProperties <TModel> viewProperties = GetViewProperties(model);

            messages.AddRange(viewProperties.ValidateViewPermissions());

            IEnumerable <FieldMapping> fieldMappings = viewProperties.GetFieldMappings();
            List <string> missingFields = new List <string>(modelProperties.GetProperties());

            foreach (FieldMapping fieldMapping in fieldMappings)
            {
                string field = fieldMapping.Name;
                string message;

                if (!ModelProperties.CanMapField(fieldMapping, out message))
                {
                    messages.Add(message ?? "Error message");
                }

                if (missingFields.Contains(field))
                {
                    missingFields.Remove(field);
                }
            }

            if (missingFields.Count > 0)
            {
                messages.AddRange(missingFields.Select(modelField => string.Format("The property '{0}' is not mapped to an Ampla Field.", modelField)));
            }

            return(messages);
        }
示例#7
0
        /// <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);
        }
示例#8
0
        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"));
        }
示例#9
0
 public ModifyRecordEventDectection(AmplaRecord amplaRecord, AmplaAuditRecord amplaAuditRecord, IAmplaViewProperties <TModel> viewProperties)
     : base("Modify Record")
 {
     this.amplaRecord      = amplaRecord;
     this.amplaAuditRecord = amplaAuditRecord;
     this.viewProperties   = viewProperties;
 }
 public AmplaGetDataRecordBinding(GetDataResponse response, List <AmplaRecord> records, IModelProperties <TModel> modelProperties, IAmplaViewProperties <TModel> amplaViewProperties)
 {
     this.response            = response;
     this.records             = records;
     this.modelProperties     = modelProperties;
     this.amplaViewProperties = amplaViewProperties;
 }
示例#11
0
 public AmplaUpdateDataBinding(TModel existing, TModel update, List <SubmitDataRecord> records, IAmplaViewProperties <TModel> amplaViewProperties, IModelProperties <TModel> modelProperties)
 {
     this.existing            = existing;
     this.update              = update;
     this.records             = records;
     this.amplaViewProperties = amplaViewProperties;
     this.modelProperties     = modelProperties;
 }
 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;
 }
示例#13
0
        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);
        }
示例#14
0
        /// <summary>
        /// Finds the record.
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public AmplaRecord FindRecord(int id)
        {
            IAmplaViewProperties <TModel> amplaViewProperties = GetViewProperties(null);

            amplaViewProperties.Enforce.CanView();

            FilterValue     idFilter      = new FilterValue("Id", Convert.ToString(id));
            FilterValue     deletedFilter = new FilterValue("Deleted", "");
            var             request       = GetDataRequest(true, idFilter, deletedFilter);
            GetDataResponse response      = webServiceClient.GetData(request);
            TModel          model;

            return(FindAmplaRecord(response, ModelProperties, amplaViewProperties, out model));
        }
示例#15
0
        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);
        }
示例#16
0
        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);
        }
示例#17
0
        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);
        }
示例#18
0
        /// <summary>
        /// Gets all the models
        /// </summary>
        /// <returns></returns>
        public IList <TModel> GetAll()
        {
            IAmplaViewProperties <TModel> amplaViewProperties = GetViewProperties(null);

            amplaViewProperties.Enforce.CanView();

            var             request  = GetDataRequest(true);
            GetDataResponse response = webServiceClient.GetData(request);

            List <TModel> records = new List <TModel>();
            IAmplaBinding binding = new AmplaGetDataBinding <TModel>(response, records, ModelProperties);

            if (binding.Validate() && binding.Bind())
            {
                return(records);
            }

            return(null);
        }
示例#19
0
        /// <summary>
        /// Finds the model using the id.
        /// </summary>
        /// <param name="id">The unique identifier.</param>
        /// <returns></returns>
        public TModel FindById(int id)
        {
            IAmplaViewProperties <TModel> amplaViewProperties = GetViewProperties(null);

            amplaViewProperties.Enforce.CanView();

            FilterValue     filter   = new FilterValue("Id", Convert.ToString(id));
            var             request  = GetDataRequest(true, filter);
            GetDataResponse response = webServiceClient.GetData(request);

            List <TModel> records = new List <TModel>();
            IAmplaBinding binding = new AmplaGetDataBinding <TModel>(response, records, ModelProperties);

            if (binding.Validate() && binding.Bind())
            {
                return(records.Count == 1 ? records[0] : null);
            }

            return(null);
        }
示例#20
0
        /// <summary>
        /// Deletes the specified model.
        /// </summary>
        /// <param name="model">The model.</param>
        public void Delete(TModel model)
        {
            IAmplaViewProperties <TModel> amplaViewProperties = GetViewProperties(model);

            amplaViewProperties.Enforce.CanDelete();

            DeleteRecordsRequest request = new DeleteRecordsRequest {
                Credentials = CreateCredentials()
            };
            List <DeleteRecord> records = new List <DeleteRecord>();
            List <TModel>       models  = new List <TModel> {
                model
            };

            IAmplaBinding binding = new AmplaDeleteDataBinding <TModel>(models, records, ModelProperties);

            if (binding.Validate() && binding.Bind())
            {
                request.DeleteRecords = records.ToArray();
                WebServiceClient.DeleteRecords(request);
            }
        }
示例#21
0
        /// <summary>
        /// Unconfirms the specified model.
        /// </summary>
        /// <param name="model">The model.</param>
        public void Unconfirm(TModel model)
        {
            IAmplaViewProperties <TModel> amplaViewProperties = GetViewProperties(model);

            amplaViewProperties.Enforce.CanUnconfirm();

            UpdateRecordStatusRequest request = new UpdateRecordStatusRequest {
                Credentials = CreateCredentials()
            };
            List <UpdateRecordStatus> records = new List <UpdateRecordStatus>();
            List <TModel>             models  = new List <TModel> {
                model
            };

            IAmplaBinding binding = new AmplaUnconfirmDataBinding <TModel>(models, records, ModelProperties);

            if (binding.Validate() && binding.Bind())
            {
                request.UpdateRecords = records.ToArray();
                WebServiceClient.UpdateRecordStatus(request);
            }
        }
示例#22
0
        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"));
        }
示例#23
0
        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);
        }
示例#24
0
        private AmplaRecord FindAmplaRecord(GetDataResponse response, IModelProperties <TModel> iModelProperties, IAmplaViewProperties <TModel> amplaViewProperties, out TModel model)
        {
            List <AmplaRecord> records = new List <AmplaRecord>();

            model = null;
            IAmplaBinding amplaBinding = new AmplaGetDataRecordBinding <TModel>(response, records, modelProperties,
                                                                                amplaViewProperties);

            if (amplaBinding.Validate() && amplaBinding.Bind())
            {
                List <TModel> models       = new List <TModel>();
                IAmplaBinding modelBinding = new AmplaGetDataBinding <TModel>(response, models, iModelProperties);
                if (modelBinding.Validate() && modelBinding.Bind())
                {
                    model = models.Count > 0 ? models[0] : null;
                }
                return(records.Count > 0 ? records[0] : null);
            }
            return(null);
        }
 protected override void OnFixtureSetUp()
 {
     base.OnFixtureSetUp();
     modelProperties     = new ModelProperties <ProductionModel>();
     amplaViewProperties = new AmplaViewProperties <ProductionModel>(modelProperties);
 }
示例#26
0
 public AmplaRecordHistory(AmplaRecord amplaRecord, AmplaAuditRecord auditRecord, IAmplaViewProperties <TModel> viewProperties)
 {
     this.amplaRecord    = amplaRecord;
     this.auditRecord    = auditRecord;
     this.viewProperties = viewProperties;
 }