コード例 #1
0
 private void ValidateDateRange(AdditionalField addField, AFValue afv)
 {
     if (addField.Range.Count != 0)
     {
         DateTime minDate   = DateTime.Parse(addField.Range[0].Value);
         DateTime maxDate   = DateTime.Parse(addField.Range[1].Value);
         bool     isInRange = true;
         foreach (AFValueItem item in afv.Values)
         {
             if (isInRange)
             {
                 try
                 {
                     DateTime afvDate = DateTime.Parse(item.Value);
                     isInRange = afvDate >= minDate && afvDate <= maxDate;
                 }
                 catch (FormatException)
                 {
                     isInRange = false;
                 }
             }
             else
             {
                 break;
             }
         }
         if (!isInRange)
         {
             throw new BusinessLogicException($"Error: One Request's additional field value was invalid, check {addField.Name}'s range");
         }
     }
 }
コード例 #2
0
        public void GetIsOk()
        {
            Guid            guid            = Guid.NewGuid();
            AdditionalField additionalField = new AdditionalField()
            {
                Id        = guid,
                Name      = "Just Testing",
                FieldType = "Field Type",
                Type      = new TypeEntity(),
                TypeId    = Guid.NewGuid(),
            };

            AdditionalField dummyAdditionalField = new AdditionalField();

            dummyAdditionalField.Id = guid;

            var mock = new Mock <IRepository <AdditionalField, TypeEntity> >(MockBehavior.Strict);

            mock.Setup(m => m.Exist(dummyAdditionalField)).Returns(true);
            mock.Setup(m => m.Get(guid)).Returns(additionalField);
            var controller = new AdditionalFieldLogic(mock.Object);

            AdditionalField result = controller.Get(guid);

            Assert.AreEqual(additionalField, result);
        }
コード例 #3
0
 private void ValidateTextRange(AdditionalField addField, AFValue afv)
 {
     if (addField.Range.Count != 0)
     {
         bool isInRange = true;
         bool notFound;
         foreach (AFValueItem item in afv.Values)
         {
             notFound = true;
             foreach (AFRangeItem r in addField.Range)
             {
                 if (r.Value == item.Value)
                 {
                     notFound = false;
                     break;
                 }
             }
             if (notFound)
             {
                 isInRange = false;
                 break;
             }
         }
         if (!isInRange)
         {
             throw new BusinessLogicException("Error: One Request's additional field value was invalid, check fields's range");
         }
     }
 }
コード例 #4
0
 private void ValidateAFRange(AdditionalField af)
 {
     if (af.FieldType == FieldType.Bool && af.Range.Count != 0)
     {
         throw new BusinessLogicException("Error: A boolean type Additional Field's range can't contain values");
     }
     if (af.Range.Count != 0)
     {
         if (af.FieldType == FieldType.Texto)
         {
             ValidateTextRange(af);
         }
         else if (af.Range.Count == 2)
         {
             if (af.FieldType == FieldType.Fecha)
             {
                 ValidateDateRange(af);
             }
             else
             {
                 ValidateIntegerRange(af);
             }
         }
         else
         {
             throw new BusinessLogicException($"Error: {af.Name}'s range has too many date or integer values");
         }
     }
 }
コード例 #5
0
        public void GetAllIsOk()
        {
            AdditionalField firstAdditionalFieldExpected = new AdditionalField()
            {
                Id        = Guid.NewGuid(),
                Name      = "Just Testing",
                FieldType = "Field Type",
                Type      = new TypeEntity(),
                TypeId    = Guid.NewGuid(),
            };

            AdditionalField secondAdditionalFieldExpected = new AdditionalField()
            {
                Id        = Guid.NewGuid(),
                Name      = "Just Testing",
                FieldType = "Field Type",
                Type      = new TypeEntity(),
                TypeId    = Guid.NewGuid(),
            };

            IEnumerable <AdditionalField> additionalFields = new List <AdditionalField>()
            {
                firstAdditionalFieldExpected,
                secondAdditionalFieldExpected
            };

            var mock = new Mock <IRepository <AdditionalField, TypeEntity> >(MockBehavior.Strict);

            mock.Setup(m => m.GetAll()).Returns(additionalFields);
            var controller = new AdditionalFieldLogic(mock.Object);

            IEnumerable <AdditionalField> resultList = controller.GetAll();

            Assert.AreEqual(additionalFields, resultList);
        }
コード例 #6
0
 public void ValidRangeFormat(AdditionalField additionalField)
 {
     if (additionalField.Ranges.Count > 0)
     {
         throw new ExceptionController(LogicExceptions.INVALID_BOOLEAN_RANGE);
     }
 }
コード例 #7
0
        public void RemoveValid()
        {
            Guid            guid            = Guid.NewGuid();
            AdditionalField additionalField = new AdditionalField()
            {
                Id        = guid,
                Name      = "Descripcion",
                FieldType = "Texto"
            };

            AdditionalField dummyAdditionalField = new AdditionalField();

            dummyAdditionalField.Id = guid;

            var mock = new Mock <IRepository <AdditionalField, TypeEntity> >(MockBehavior.Strict);

            mock.Setup(m => m.Exist(dummyAdditionalField)).Returns(true);
            mock.Setup(m => m.Get(guid)).Returns(additionalField);
            mock.Setup(m => m.Remove(additionalField));
            mock.Setup(m => m.Save());
            var controller = new AdditionalFieldLogic(mock.Object);

            controller.Remove(additionalField.Id);
            mock.VerifyAll();
        }
コード例 #8
0
        public Type ToEntity()
        {
            Type typeAsEntity = new Type()
            {
                Id       = this.Id,
                Name     = this.Name,
                IsActive = this.IsActive,
                Topic    = new Topic()
                {
                    Id = this.TopicId
                },
                AdditionalFields = new List <AdditionalField>()
            };

            if (aFDTOs != null)
            {
                foreach (AdditionalFieldDTO afDTO in this.aFDTOs)
                {
                    AdditionalField af = afDTO.ToEntity();
                    af.Type = typeAsEntity;
                    typeAsEntity.AdditionalFields.Add(af);
                }
            }
            return(typeAsEntity);
        }
コード例 #9
0
        public void CreateCaseNotExist()
        {
            Guid firstGuid  = Guid.NewGuid();
            Guid secondGuid = Guid.NewGuid();

            TypeEntity type = new TypeEntity();

            type.Id = secondGuid;

            AdditionalField additionalField = new AdditionalField()
            {
                Id        = firstGuid,
                Name      = "Just Testing",
                FieldType = "Texto",
                Type      = type,
                TypeId    = firstGuid
            };

            var mock = new Mock <IRepository <AdditionalField, TypeEntity> >(MockBehavior.Strict);

            mock.Setup(m => m.GetParent(firstGuid)).Returns(type);
            mock.Setup(m => m.Add(It.IsAny <AdditionalField>()));
            mock.Setup(m => m.Save());

            var             controller = new AdditionalFieldLogic(mock.Object);
            AdditionalField result     = controller.Create(additionalField);

            mock.VerifyAll();
            Assert.AreEqual(result, additionalField);
        }
コード例 #10
0
        public List <DateTime> ConvertRangesToDates(AdditionalField additionalField)
        {
            var FromToDates = new List <DateTime>();

            foreach (FieldRange range in additionalField.Ranges)
            {
                string[] formats = { "MM/dd/yyyy" };
                DateTime parsedDateTime;

                bool isDate = DateTime.TryParseExact(range.Range,
                                                     "MM/dd/yyyy",
                                                     CultureInfo.InvariantCulture,
                                                     DateTimeStyles.None,
                                                     out parsedDateTime);


                if (!isDate)
                {
                    throw new ExceptionController(LogicExceptions.WRONG_DATE_FORMAT);
                }

                FromToDates.Add(parsedDateTime);
            }

            return(FromToDates);
        }
コード例 #11
0
        public void AdditionalFieldsControllerUpdateTest()
        {
            var type       = CreateContext();
            var fieldId    = Guid.NewGuid();
            var Logic      = CreateLogic();
            var Controller = new AdditionalFieldsController(Logic);

            AdditionalField field = new AdditionalField()
            {
                Id        = fieldId,
                Name      = "First AdditionalField",
                Type      = type,
                TypeId    = type.Id,
                FieldType = "Texto"
            };

            Logic.Create(field);

            AdditionalFieldDTO UpdatedField = new AdditionalFieldDTO()
            {
                Id   = fieldId,
                Name = "Updated Field"
            };

            var result        = Controller.Put(fieldId, UpdatedField);
            var createdResult = result as CreatedAtRouteResult;
            var model         = createdResult.Value as AdditionalFieldDTO;

            Assert.AreEqual("Updated Field", model.Name);
        }
コード例 #12
0
        public void CreateInvalidId()
        {
            Guid firstGuid  = Guid.NewGuid();
            Guid secondGuid = Guid.NewGuid();

            AdditionalField additionalField = new AdditionalField();

            additionalField.Id        = firstGuid;
            additionalField.Name      = "New Field Name";
            additionalField.TypeId    = secondGuid;
            additionalField.FieldType = "Texto";

            TypeEntity type = new TypeEntity();

            type.Name = "New Type";
            type.Id   = secondGuid;

            var mock = new Mock <IRepository <AdditionalField, TypeEntity> >(MockBehavior.Strict);

            mock.Setup(m => m.GetParent(secondGuid)).Returns(type);
            mock.Setup(m => m.Add(additionalField)).Throws(new ExceptionController());

            var controller = new AdditionalFieldLogic(mock.Object);

            Assert.ThrowsException <ExceptionController>(() => controller.Create(additionalField));
            mock.VerifyAll();
        }
コード例 #13
0
        public void ValidRangeFormat(AdditionalField additionalField)
        {
            foreach (FieldRange range in additionalField.Ranges)
            {
                if (!Regex.IsMatch(range.Range, @"^\d+$"))
                {
                    throw new ExceptionController(LogicExceptions.WRONG_INTEGER_FORMAT + "for the following additional field: " + additionalField.Id);
                }
            }

            if (additionalField.Ranges.Count > 0)
            {
                /* Valid Date Range */
                if (additionalField.Ranges.Count != 2)
                {
                    throw new ExceptionController(LogicExceptions.INVALID_NUMBER_RANGE);
                }

                var FromToNumbers = ConvertRangesToInts(additionalField);

                /* Valid Number Range */
                if (FromToNumbers[0] > FromToNumbers[1])
                {
                    throw new ExceptionController(LogicExceptions.INVALID_NUMBER_RANGE);
                }
            }
        }
コード例 #14
0
 private void ValidateIntegerRange(AdditionalField addField, AFValue afv)
 {
     if (addField.Range.Count != 0)
     {
         int  minValue  = Int32.Parse(addField.Range[0].Value);
         int  maxValue  = Int32.Parse(addField.Range[1].Value);
         bool isInRange = true;
         foreach (AFValueItem item in afv.Values)
         {
             if (isInRange)
             {
                 isInRange = Int32.Parse(item.Value) >= minValue &&
                             Int32.Parse(item.Value) <= maxValue;
             }
             else
             {
                 break;
             }
         }
         if (!isInRange)
         {
             throw new BusinessLogicException($"Error: One Request's additional field value was invalid, check {addField.Name}'s range");
         }
     }
 }
コード例 #15
0
        private ICollection <AdditionalFieldValue> CreateFields(AdditionalField field, Guid RequestId, string Value)
        {
            var selectedValue = new SelectedValues();

            selectedValue.Value = Value;

            var values = new List <SelectedValues>()
            {
                selectedValue
            };

            var fieldValue = new AdditionalFieldValue
            {
                Id = Guid.NewGuid(),
                AdditionalFieldId = field.Id,
                Values            = values,
                RequestId         = RequestId
            };

            List <AdditionalFieldValue> fields = new List <AdditionalFieldValue>()
            {
                fieldValue
            };

            return(fields);
        }
コード例 #16
0
 private void ValidateDateAFV(AdditionalField addFieldById, AFValue afv)
 {
     if (!IsDateAFV(afv.Values))
     {
         throw new BusinessLogicException("Error: One Request's additional field value was invalid, check data type");
     }
     ValidateDateRange(addFieldById, afv);
 }
コード例 #17
0
        public ActionResult DeleteConfirmed(int id)
        {
            AdditionalField additionalField = db.AdditionalFields.Find(id);

            db.AdditionalFields.Remove(additionalField);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
コード例 #18
0
        public IActionResult Get(Guid id)
        {
            AdditionalField Fields = Logic.Get(id);

            if (Fields == null)
            {
                return(NotFound());
            }

            return(Ok(AdditionalFieldDTO.ToModel(Fields)));
        }
コード例 #19
0
        private void ValidateAdditionalFields(Request request)
        {
            TypeEntity selectedType = GetTypeWithFields(request.TypeId);

            if (selectedType == null)
            {
                throw new ExceptionController(LogicExceptions.INVALID_TYPE_NOT_EXIST);
            }

            foreach (AdditionalField additionalField in selectedType.AdditionalFields)
            {
                var fieldExists = request.AdditionalFieldValues.FirstOrDefault(a => a.AdditionalFieldId == additionalField.Id);
                if (fieldExists == null)
                {
                    throw new ExceptionController(LogicExceptions.MISSING_REQUIRED_ADDITIONAL_FIELD);
                }
            }

            foreach (AdditionalFieldValue additionalFieldValue in request.AdditionalFieldValues)
            {
                if (additionalFieldValue.RequestId != request.Id)
                {
                    throw new ExceptionController(LogicExceptions.INVALID_ADDITIONAL_FIELD_REQUEST_ID);
                }

                AdditionalField selectedAdditionalField = selectedType.AdditionalFields.FirstOrDefault(a => a.Id == additionalFieldValue.AdditionalFieldId);
                if (selectedAdditionalField == null)
                {
                    throw new ExceptionController(LogicExceptions.INVALID_ADDITIONAL_FIELD);
                }

                var valuesObj = additionalFieldValue.Values.GroupBy(x => x.Value);
                foreach (var repetition in valuesObj)
                {
                    if (repetition.Count() > 1)
                    {
                        throw new ExceptionController(LogicExceptions.REPEATED_SELECTION);
                    }
                }

                FieldRangeLogic selectedStrategy = new FieldRangeLogic(selectedAdditionalField.FieldType);

                /* MultiSelect Feature Validation */
                if (selectedAdditionalField.MultiSelect)
                {
                    selectedStrategy.HasValidRangeValues(selectedAdditionalField, additionalFieldValue);
                }
                else
                {
                    selectedStrategy.IsValidRangeValue(selectedAdditionalField, additionalFieldValue);
                }
            }
        }
コード例 #20
0
 public JsonResult Edit(AdditionalField additionalField)
 {
     if (ModelState.IsValid)
     {
         db.Entry(additionalField).State = EntityState.Modified;
         db.SaveChanges();
         //return RedirectToAction("Index");
     }
     ViewBag.FleetNo = new SelectList(db.FleetAssets, "FleetNo", "FleetNo", additionalField.FleetNo);
     // return View(additionalField);
     return(Json(additionalField));
 }
コード例 #21
0
        public JsonResult Create(AdditionalField additionalField)
        {
            if (ModelState.IsValid)
            {
                db.AdditionalFields.Add(additionalField);
                db.SaveChanges();
                ViewBag.FleetNo = new SelectList(db.FleetAssets, "FleetNo", "RegistrationNo", additionalField.FleetNo);
                //return Json("Index");
            }

            return(Json(additionalField));
        }
コード例 #22
0
 public AdditionalFieldDTO(AdditionalField af)
 {
     Id        = af.Id;
     Name      = af.Name;
     FieldType = af.FieldType;
     Type      = af.Type.Id;
     RangeDTOs = new List <RangeDTO>();
     foreach (AFRangeItem r in af.Range)
     {
         RangeDTO rangeDTO = new RangeDTO(r);
         RangeDTOs.Add(rangeDTO);
     }
 }
コード例 #23
0
        public void IsValidRangeValue(AdditionalField additionalField, AdditionalFieldValue additionalFieldValue)
        {
            if (additionalFieldValue.Values.Count > 1)
            {
                throw new ExceptionController(LogicExceptions.INVALID_MULTISELECTION);
            }

            Boolean boolValue;

            if (!Boolean.TryParse(additionalFieldValue.Values.ToList().First().Value, out boolValue))
            {
                throw new ExceptionController(LogicExceptions.INVALID_BOOLEAN);
            }
        }
コード例 #24
0
        // GET: AdditionalFields/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            AdditionalField additionalField = db.AdditionalFields.Find(id);

            if (additionalField == null)
            {
                return(HttpNotFound());
            }
            return(View(additionalField));
        }
コード例 #25
0
        // GET: AdditionalFields/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            AdditionalField additionalField = db.AdditionalFields.Find(id);

            if (additionalField == null)
            {
                return(HttpNotFound());
            }
            ViewBag.FleetNo = new SelectList(db.FleetAssets, "FleetNo", "FleetNo", additionalField.FleetNo);
            return(View(additionalField));
        }
コード例 #26
0
        public void IsValidRangeValue(AdditionalField additionalField, AdditionalFieldValue additionalFieldValue)
        {
            if (additionalFieldValue.Values.Count > 1)
            {
                throw new ExceptionController(LogicExceptions.INVALID_MULTISELECTION);
            }

            /* Validate Value Within Ranges */
            DateTime incomingDate = ConvertStringToDate(additionalFieldValue.Values.ToList().First().Value);
            var      FromToDates  = ConvertRangesToDates(additionalField);

            if (!(incomingDate >= FromToDates[0] && incomingDate <= FromToDates[1]))
            {
                throw new ExceptionController(LogicExceptions.DATE_OUT_OF_RANGE);
            }
        }
コード例 #27
0
        public void GetIsNotOk()
        {
            Guid            guid = Guid.NewGuid();
            AdditionalField dummyAdditionalField = new AdditionalField();

            dummyAdditionalField.Id = guid;

            var mock = new Mock <IRepository <AdditionalField, TypeEntity> >(MockBehavior.Strict);

            mock.Setup(m => m.Exist(dummyAdditionalField)).Returns(true);
            mock.Setup(m => m.Get(guid)).Throws(new ExceptionController());
            var controller = new AdditionalFieldLogic(mock.Object);

            Assert.ThrowsException <ExceptionController>(() => controller.Get(guid));
            mock.VerifyAll();
        }
コード例 #28
0
        public void AdditionalFieldControllerPostTestWithRanges()
        {
            var id              = Guid.NewGuid();
            var type            = CreateContext();
            var Logic           = CreateLogic();
            var Controller      = new AdditionalFieldsController(Logic);
            var AdditionalField = new AdditionalField
            {
                Id        = id,
                Name      = "First AdditionalField",
                Type      = type,
                TypeId    = type.Id,
                FieldType = "Texto"
            };

            FieldRange range = new FieldRange()
            {
                AdditionalFieldId = id,
                Range             = "Range 1"
            };

            FieldRange range2 = new FieldRange()
            {
                AdditionalFieldId = id,
                Range             = "Range 2"
            };

            FieldRange range3 = new FieldRange()
            {
                AdditionalFieldId = id,
                Range             = "Range 3"
            };

            var RangeList = new List <FieldRange>()
            {
                range, range2, range3
            };

            AdditionalField.Ranges = RangeList;

            var result        = Controller.Post(AdditionalFieldDTO.ToModel(AdditionalField));
            var createdResult = result as CreatedAtRouteResult;
            var model         = createdResult.Value as AdditionalFieldDTO;

            Assert.AreEqual(AdditionalField.Ranges.Count, model.Ranges.Count);
        }
コード例 #29
0
        private AdditionalField CreateFieldLogic(TypeEntity type)
        {
            var additionalFieldRepo  = new AdditionalFieldRepository(Context);
            var additionalFieldLogic = new AdditionalFieldLogic(additionalFieldRepo);

            AdditionalField field = new AdditionalField()
            {
                Id        = Guid.NewGuid(),
                Name      = "Celular de Contacto",
                Type      = type,
                FieldType = "Texto",
                TypeId    = type.Id
            };

            additionalFieldLogic.Create(field);

            return(field);
        }
コード例 #30
0
        public void IsValidRangeValue(AdditionalField additionalField, AdditionalFieldValue additionalFieldValue)
        {
            if (additionalFieldValue.Values.Count > 1)
            {
                throw new ExceptionController(LogicExceptions.INVALID_MULTISELECTION);
            }

            if (additionalField.Ranges.Count > 0)
            {
                FieldRange field = new FieldRange();
                field.Range = additionalFieldValue.Values.ToList().First().Value;

                if (!additionalField.Ranges.Contains(field))
                {
                    throw new ExceptionController(LogicExceptions.INVALID_ADDITIONAL_FIELD_RANGES);
                }
            }
        }