/// <summary> /// Get Predicate. /// </summary> /// <param name="param">Params.</param> /// <returns>The Predicate.</returns> private Expression <Func <Models.Location, bool> > GetPredicate(LocationsRetrievalByQuery param) { Expression <Func <Models.Location, bool> > predicate = x => true; if (param.Name != null) { predicate = predicate.And(x => x.Name == param.Name); } if (param.ParentId != null) { // An empty guid takes the place of null allowing us to have no filter, or filter by null. var parentId = param.ParentId == Guid.Empty.ToString() ? null : param.ParentId; predicate = predicate.And(x => x.ParentId == parentId); } if (param.OnlyMeOffices) { predicate = predicate.And(x => x.IsMeOffice); } return(predicate); }
public async Task Handle_ReturnsFiltered_WhenFilteredByNameAndParentId(bool forLookup) { // Arrange var query = new LocationsRetrievalByQuery("Name2", "Name1", forLookup, false); // Act var results = (await Service.Handle(query)).ToList(); // Assert results.Should().NotBeNull(); results.Count.Should().Be(1); }
public async Task Handle_ReturnsAllResults_WhenNoFilterApplied(bool forLookup) { // Arrange var query = new LocationsRetrievalByQuery(null, null, forLookup, false); // Act var results = (await Service.Handle(query)).ToList(); // Assert results.Should().NotBeNull(); results.Count.Should().Be(50); }
public async Task Handle_ReturnsFiltered_WhenFilteredByPermissedLocations(bool forLookup) { // Arrange var permissedLocations = new[] { "Name2", "Name3", }; var query = new LocationsRetrievalByQuery(null, null, forLookup, false, permissedLocations); // Act var results = (await Service.Handle(query)).ToList(); // Assert results.Should().NotBeNull(); results.Count.Should().Be(2); results.ElementAt(0).Name.Should().Be("Name2"); results.ElementAt(1).Name.Should().Be("Name3"); }
/// <inheritdoc/> public override async Task <IEnumerable <Models.Location> > Handle(LocationsRetrievalByQuery param) { if (param == null) { throw new ArgumentNullException(nameof(param)); } var predicate = GetPredicate(param); if (param.PermissedLocations != null) { Expression <Func <Models.Location, bool> > idFilter = l => param.PermissedLocations.Contains(l.LocationId) || param.PermissedLocations.Contains(l.NationalLocationId) || param.PermissedLocations.Contains(l.RegionLocationId) || param.PermissedLocations.Contains(l.TrustLocationId) || param.PermissedLocations.Contains(l.SiteLocationId); predicate = predicate.And(idFilter); } IEnumerable <Models.Location> result; if (param.ForLookup) { result = await GetItemsAsync <Models.Location>(predicate, location => new { name = location.Name, id = location.LocationId }); } else { result = await GetItemsAsync(predicate); } return(result); }