private static void ValidateParameters(AssociationSearchCriteria criteria) { if (criteria == null) { throw new ArgumentNullException(nameof(criteria)); } }
public async Task Handle_DynamicAssociationSearchCriteria_Without_Scope_Succeded() { // Arrange var storeMock = CreateStoreServiceMock(); storeMock .Setup(x => x.GetByIdsAsync(It.IsAny <string[]>(), It.IsAny <string>())) .ReturnsAsync(new Store[0]); var authorizationHandler = CreateAuthorizationHandler(storeMock.Object, null); var dynamicAssociationSearchCriteria = new AssociationSearchCriteria { StoreIds = new[] { "testStore1", "testStore2" }, }; var context = CreateAuthorizationHandlerContext( $"{_permission}", $"{_permission}", dynamicAssociationSearchCriteria); // Act await authorizationHandler.HandleAsync(context); // Assert Assert.Equal(new[] { "testStore1", "testStore2" }, dynamicAssociationSearchCriteria.StoreIds); Assert.True(context.HasSucceeded); }
protected virtual IList <SortInfo> BuildSortExpression(AssociationSearchCriteria criteria) { var sortInfos = criteria.SortInfos; if (sortInfos.IsNullOrEmpty()) { sortInfos = new[] { new SortInfo { SortColumn = nameof(Association.Name) } }; } return(sortInfos); }
public async Task Handle_DynamicAssociationSearchCriteria_With_Allowed_Catalog_Succeded() { // Arrange var storeMock = CreateStoreServiceMock(); storeMock .Setup(x => x.GetByIdsAsync(It.IsAny <string[]>(), It.IsAny <string>())) .ReturnsAsync(new[] { new Store { Catalog = "testCatalog", Id = "testStore1", }, new Store { Catalog = "testCatalog2", Id = "testStore2", }, }); var authorizationHandler = CreateAuthorizationHandler(storeMock.Object, null); var dynamicAssociationSearchCriteria = new AssociationSearchCriteria { StoreIds = Array.Empty <string>(), }; var context = CreateAuthorizationHandlerContext( $"{_permission}", $"{_permission}|[{{\"catalogId\":\"testCatalog\",\"type\":\"SelectedCatalogScope\",\"label\":\"Electronics\",\"scope\":\"testCatalog\"}}]", dynamicAssociationSearchCriteria); // Act await authorizationHandler.HandleAsync(context); // Assert Assert.Equal(new[] { "testStore1" }, dynamicAssociationSearchCriteria.StoreIds); Assert.True(context.HasSucceeded); }
public async virtual Task <AssociationSearchResult> SearchAssociationsAsync(AssociationSearchCriteria criteria) { ValidateParameters(criteria); var cacheKey = CacheKey.With(GetType(), nameof(SearchAssociationsAsync), criteria.GetCacheKey()); return(await _platformMemoryCache.GetOrCreateExclusiveAsync(cacheKey, async cacheEntry => { cacheEntry.AddExpirationToken(AssociationSearchCacheRegion.CreateChangeToken()); var result = AbstractTypeFactory <AssociationSearchResult> .TryCreateInstance(); using (var associationsRepositoryFactory = _associationsRepositoryFactory()) { //Optimize performance and CPU usage associationsRepositoryFactory.DisableChangesTracking(); var sortInfos = BuildSortExpression(criteria); var query = BuildQuery(associationsRepositoryFactory, criteria); result.TotalCount = await query.CountAsync(); if (criteria.Take > 0 && result.TotalCount > 0) { var ids = await query.OrderBySortInfos(sortInfos).ThenBy(x => x.Id) .Select(x => x.Id) .Skip(criteria.Skip).Take(criteria.Take) .AsNoTracking() .ToArrayAsync(); result.Results = (await _associationService.GetByIdsAsync(ids)).OrderBy(x => Array.IndexOf(ids, x.Id)).ToList(); } } return result; })); }
public async Task <ActionResult <AssociationSearchResult> > SearchAssociation([FromBody] AssociationSearchCriteria criteria) { var authorizationResult = await _authorizationService.AuthorizeAsync( User, criteria, new AssociationAuthorizationRequirement(CatalogModuleConstants.Security.Permissions.Read) ); if (!authorizationResult.Succeeded) { return(Unauthorized()); } var result = await _associationSearchService.SearchAssociationsAsync(criteria); return(Ok(result)); }
protected virtual IQueryable <AssociationEntity> BuildQuery(IAssociationsRepository repository, AssociationSearchCriteria criteria) { var query = repository.Associations; if (!string.IsNullOrEmpty(criteria.Keyword)) { query = query.Where(x => x.Name.Contains(criteria.Keyword)); } if (!criteria.StoreIds.IsNullOrEmpty()) { query = query.Where(x => criteria.StoreIds.Contains(x.StoreId)); } if (!criteria.Groups.IsNullOrEmpty()) { query = query.Where(x => criteria.Groups.Contains(x.AssociationType)); } if (criteria.IsActive != null) { var utcNow = DateTime.UtcNow; query = query.Where(x => x.IsActive == criteria.IsActive && (x.StartDate == null || utcNow >= x.StartDate) && (x.EndDate == null || x.EndDate >= utcNow)); } return(query); }