/// <summary> /// Get an array of parcels within the specified filter. /// Will not return sensitive parcels unless the user has the `sensitive-view` claim and belongs to the owning agency. /// </summary> /// <param name="filter"></param> /// <returns></returns> public IEnumerable <Parcel> Get(ParcelFilter filter) { this.User.ThrowIfNotAuthorized(Permissions.PropertyView); var query = this.Context.GenerateQuery(this.User, filter); return(query.ToArray()); }
public void Get_Parcels(ParcelFilter filter, int expectedCount) { // Arrange var helper = new TestHelper(); var user = PrincipalHelper.CreateForPermission(Permissions.SystemAdmin); using var init = helper.InitializeDatabase(user); var parcels = init.CreateParcels(1, 20); parcels.Next(0).Latitude = 50; parcels.Next(0).Longitude = 25; parcels.Next(1).Agency = init.Agencies.Find(3); parcels.Next(1).AgencyId = 3; parcels.Next(2).ClassificationId = 2; parcels.Next(3).Description = "-DescriptionTest-"; parcels.Next(4).Municipality = "-Municipality-"; parcels.Next(5).ProjectNumber = "ProjectNumber"; parcels.Next(6).Zoning = "-Zoning-"; parcels.Next(7).ZoningPotential = "-ZoningPotential-"; init.SaveChanges(); var service = helper.CreateService <ParcelService>(user); var context = helper.GetService <PimsContext>(); // Act var result = service.Get(filter); // Assert Assert.NotNull(result); Assert.IsAssignableFrom <Paged <Entity.Parcel> >(result); Assert.Equal(expectedCount, result.Items.Count()); }
public void Get_Page_AsAdmin(ParcelFilter filter, int[] agencyIds, int expectedTotal) { // Arrange var helper = new TestHelper(); var user = PrincipalHelper.CreateForPermission(Permissions.PropertyView, Permissions.AdminProperties); using var init = helper.InitializeDatabase(user); var parcels = init.CreateParcels(1, 20); parcels.Next(0).Latitude = 50; parcels.Next(0).Longitude = 25; parcels.Next(1).Agency = init.Agencies.Find(3); parcels.Next(1).AgencyId = 3; parcels.Next(2).ClassificationId = 2; parcels.Next(3).Description = "-DescriptionTest-"; parcels.Next(4).Municipality = "-Municipality-"; parcels.Next(5).Zoning = "-Zoning-"; parcels.Next(6).ZoningPotential = "-ZoningPotential-"; init.SaveChanges(); var service = helper.CreateService <ParcelService>(user); // Act var result = service.GetPage(filter); // Assert Assert.NotNull(result); Assert.IsAssignableFrom <IEnumerable <Entity.Parcel> >(result); Assert.Equal(expectedTotal, result.Total); }
public void GetParcelsWithFilter_Success() { // Arrange var helper = new TestHelper(); var controller = helper.CreateController <ParcelController>(Permissions.PropertyView); var parcel = new Entity.Parcel(1, 51, 25); var parcels = new[] { parcel }; var service = helper.GetService <Mock <IPimsService> >(); var mapper = helper.GetService <IMapper>(); service.Setup(m => m.Parcel.Get(It.IsAny <ParcelFilter>())).Returns(parcels); var filter = new ParcelFilter(1, 1, 1, 1); // Act var result = controller.GetParcels(filter); // Assert var actionResult = Assert.IsType <JsonResult>(result); var actualResult = Assert.IsType <SModel.ParcelModel[]>(actionResult.Value); var expectedResult = mapper.Map <SModel.ParcelModel[]>(parcels); Assert.Equal(expectedResult, actualResult, new DeepPropertyCompare()); service.Verify(m => m.Parcel.Get(It.IsAny <ParcelFilter>()), Times.Once()); }
public void Get_Parcels_AsAdmin(ParcelFilter filter, int[] agencyIds, int expectedCount) { // Arrange var helper = new TestHelper(); var user = PrincipalHelper.CreateForPermission(Permissions.PropertyView, Permissions.AdminProperties); using var init = helper.InitializeDatabase(user); var parcels = init.CreateParcels(1, 20); parcels.Next(0).Location.X = -123.720810; parcels.Next(0).Location.Y = 48.529338; parcels.Next(1).Agency = init.Agencies.Find(3); parcels.Next(1).AgencyId = 3; parcels.Next(2).ClassificationId = 2; parcels.Next(3).Description = "-DescriptionTest-"; parcels.Next(4).Address.AdministrativeArea = "-AdministrativeArea-"; parcels.Next(5).Zoning = "-Zoning-"; parcels.Next(6).ZoningPotential = "-ZoningPotential-"; init.SaveChanges(); var service = helper.CreateService <ParcelService>(user); // Act var result = service.Get(filter); // Assert Assert.NotNull(result); Assert.IsAssignableFrom <IEnumerable <Entity.Parcel> >(result); Assert.Equal(expectedCount, result.Count()); }
/// <summary> /// Get an array of parcels within the specified filter. /// Will not return sensitive parcels unless the user has the `sensitive-view` claim and belongs to the owning agency. /// </summary> /// <param name="filter"></param> /// <returns></returns> public Paged <Parcel> GetPage(ParcelFilter filter) { this.User.ThrowIfNotAuthorized(Permissions.PropertyView); var query = this.Context.GenerateQuery(this.User, filter); var total = query.Count(); var items = query.Skip((filter.Page - 1) * filter.Quantity).Take(filter.Quantity); return(new Paged <Parcel>(items, filter.Page, filter.Quantity, total)); }
public void Get_Parcels_NotAuthorized() { // Arrange var helper = new TestHelper(); var user = PrincipalHelper.CreateForPermission(); var filter = new ParcelFilter(50, 25, 50, 20); var service = helper.CreateService <ParcelService>(user); // Act // Assert Assert.Throws <NotAuthorizedException>(() => service.Get(filter)); }
private static IRestRequest CreateBackendListRequest(int?offset, int?limit, Taal language, string sort, string status) { var filter = new ParcelFilter { Status = status }; var sortMapping = new Dictionary <string, string> { { "Id", "PersistentLocalId" }, }; return(new RestRequest("percelen?taal={language}") .AddParameter("language", language, ParameterType.UrlSegment) .AddPagination(offset, limit) .AddFiltering(filter) .AddSorting(sort, sortMapping)); }
public override void OnCreate() { base.OnCreate(); var index = 0; m_Toggles = GetComponentsInChildren <Toggle>(true); foreach (var toggle in m_Toggles) { var id = index; index++; toggle.onValueChanged.AddListener((bool enabled) => OnToggleValueChanged(id, enabled)); toggle.isOn = false; } index = 0; m_Slider = GetComponentsInChildren <Slider>(true); foreach (var slider in m_Slider) { var id = index; index++; slider.onValueChanged.AddListener((float value) => OnSliderValueChanged(id, value)); } m_SliderTexts = m_Slider .Select(s => s.GetComponentsInChildren <Text>()[1]) .ToArray(); Data = new ParcelFilter(); IsExpanded = true; }
/// <summary> /// Get an array of parcels within the specified filter. /// Will not return sensitive parcels unless the user has the `sensitive-view` claim and belongs to the owning agency. /// </summary> /// <param name="filter"></param> /// <returns></returns> public Paged <Parcel> Get(ParcelFilter filter) { filter.ThrowIfNull(nameof(filter)); this.User.ThrowIfNotAuthorized(Permissions.SystemAdmin, Permissions.AgencyAdmin); if (filter.Page < 1) { throw new ArgumentException("Argument must be greater than or equal to 1.", nameof(filter.Page)); } if (filter.Quantity < 1) { throw new ArgumentException("Argument must be greater than or equal to 1.", nameof(filter.Quantity)); } // Check if user has the ability to view sensitive properties. var userAgencies = this.User.GetAgenciesAsNullable(); var viewSensitive = this.User.HasPermission(Security.Permissions.SensitiveView); // Users may only view sensitive properties if they have the `sensitive-view` claim and belong to the owning agency. var query = this.Context.Parcels.AsNoTracking(); if (filter.NELatitude.HasValue && filter.NELongitude.HasValue && filter.SWLatitude.HasValue && filter.SWLongitude.HasValue) { query = query.Where(p => p.Latitude != 0 && p.Longitude != 0 && p.Latitude <= filter.NELatitude && p.Latitude >= filter.SWLatitude && p.Longitude <= filter.NELongitude && p.Longitude >= filter.SWLongitude); } if (filter.Agencies?.Any() == true) { var filterAgencies = filter.Agencies.Select(a => (int?)a); query = query.Where(p => filterAgencies.Contains(p.AgencyId)); } if (filter.ClassificationId.HasValue) { query = query.Where(p => p.ClassificationId == filter.ClassificationId); } if (!String.IsNullOrWhiteSpace(filter.ProjectNumber)) { query = query.Where(p => EF.Functions.Like(p.ProjectNumber, $"{filter.ProjectNumber}%")); } if (!String.IsNullOrWhiteSpace(filter.Description)) { query = query.Where(p => EF.Functions.Like(p.Description, $"%{filter.Description}%")); } if (!String.IsNullOrWhiteSpace(filter.Municipality)) { query = query.Where(p => EF.Functions.Like(p.Municipality, $"%{filter.Municipality}%")); } if (!String.IsNullOrWhiteSpace(filter.Zoning)) { query = query.Where(p => EF.Functions.Like(p.Zoning, $"%{filter.Zoning}%")); } if (!String.IsNullOrWhiteSpace(filter.ZoningPotential)) { query = query.Where(p => EF.Functions.Like(p.ZoningPotential, $"%{filter.ZoningPotential}%")); } // TODO: Parse the address information by City, Postal, etc. if (!String.IsNullOrWhiteSpace(filter.Address)) { query = query.Where(p => EF.Functions.Like(p.Address.Address1, $"%{filter.Address}%") || EF.Functions.Like(p.Address.City.Name, $"%{filter.Address}%")); } if (filter.MinLandArea.HasValue) { query = query.Where(p => p.LandArea >= filter.MinLandArea); } if (filter.MaxLandArea.HasValue) { query = query.Where(p => p.LandArea <= filter.MaxLandArea); } // TODO: Review performance of the evaluation query component. if (filter.MinEstimatedValue.HasValue) { query = query.Where(p => filter.MinEstimatedValue <= p.Fiscals .FirstOrDefault(e => e.FiscalYear == this.Context.ParcelFiscals .Where(pe => pe.ParcelId == p.Id && e.Key == FiscalKeys.Estimated) .Max(pe => pe.FiscalYear)) .Value); } if (filter.MaxEstimatedValue.HasValue) { query = query.Where(p => filter.MaxEstimatedValue >= p.Fiscals .FirstOrDefault(e => e.FiscalYear == this.Context.ParcelFiscals .Where(pe => pe.ParcelId == p.Id && e.Key == FiscalKeys.Estimated) .Max(pe => pe.FiscalYear)) .Value); } // TODO: Review performance of the evaluation query component. if (filter.MinAssessedValue.HasValue) { query = query.Where(p => filter.MinAssessedValue <= p.Evaluations .FirstOrDefault(e => e.Date == this.Context.ParcelEvaluations .Where(pe => pe.ParcelId == p.Id && e.Key == EvaluationKeys.Assessed) .Max(pe => pe.Date)) .Value); } if (filter.MaxAssessedValue.HasValue) { query = query.Where(p => filter.MaxAssessedValue >= p.Evaluations .FirstOrDefault(e => e.Date == this.Context.ParcelEvaluations .Where(pe => pe.ParcelId == p.Id && e.Key == EvaluationKeys.Assessed) .Max(pe => pe.Date)) .Value); } if (filter.Sort?.Any() == true) { query = query.OrderByProperty(filter.Sort); } var pagedEntities = query.Skip((filter.Page - 1) * filter.Quantity).Take(filter.Quantity); return(new Paged <Parcel>(pagedEntities, filter.Page, filter.Quantity, query.Count())); }