public ZoneValidationRequest CreateModifyZoneRequest(
            ZoneValidationRequest zoneValidationRequest, string requestPersonId)
        {
            var dbZone = _zoneService.GetZoneById(zoneValidationRequest.TargetZoneId);

            if (dbZone == null)
            {
                throw new ArgumentOutOfRangeException(nameof(dbZone.Id), "Invalid ZoneId.");
            }

            if (dbZone.OwnerId != requestPersonId)
            {
                throw new ArgumentOutOfRangeException(nameof(dbZone.Id), "You haven't permissions to modify this zone.");
            }

            var zoneRequests = _zoneValidationRequestRepository.FindByZoneId(dbZone.Id);

            if (zoneRequests.Any(x => x.Status < ZoneValidationStatus.Declined))
            {
                throw new ArgumentOutOfRangeException(nameof(dbZone.Id),
                                                      "Cannot add modifying request while has another active one for this zone.");
            }

            zoneValidationRequest.RequesterId = requestPersonId;

            return(_zoneValidationRequestRepository.Add(zoneValidationRequest));
        }
        public ZoneValidationRequest CreateNewZoneRequest(
            ZoneValidationRequest zoneValidationRequest, string requestPersonId)
        {
            zoneValidationRequest.RequesterId = requestPersonId;

            return(_zoneValidationRequestRepository.Add(zoneValidationRequest));
        }
        public void Should_Throw_Exception_On_Invalid_Zone_Id_On_Modify(String targetZoneId)
        {
            IZoneValidationRequestRepository zoneValidationRequestRepository = new Mock <IZoneValidationRequestRepository>().Object;
            Mock <IZoneService> zoneServiceMock = new Mock <IZoneService>();

            zoneServiceMock.Setup(_ => _.GetZoneById(targetZoneId, null)).Returns((Zone)null);

            ZoneValidationRequestService validationService = new ZoneValidationRequestService(zoneValidationRequestRepository, zoneServiceMock.Object);

            ZoneValidationRequest request = new ZoneValidationRequest
            {
                TargetZoneId = targetZoneId
            };

            Assert.Throws <ArgumentOutOfRangeException>(() => validationService.CreateModifyZoneRequest(request, String.Empty));
        }