public async Task FindByAttributeValueAsync_ReturnsAllStatesByProjectId( [Frozen] ProjectId projectId, IFixture fixture, TodoTaskId[] ids) { // arrange const string attributeName = "TaskProjectId"; var states = new Dictionary <TodoTaskId, (AggregateVersion, TodoTask.AggregateState)>(); foreach (var id in ids) { var state = fixture.Create <TodoTask.AggregateState>(); state.Mutate(new TodoTaskCreated(projectId, id)); var version = AggregateVersion.Emtpy; states[id] = (version, state); await _stateStorage.PersistAsync( id, state, version, new Dictionary <string, object> { { attributeName, projectId } }, CancellationToken.None); } // act var query = new FindByAttributeValueStateQuery(attributeName, projectId, ids.Length); var queryResult = await _stateStorage.FindByAttributeValueAsync <TodoTask.AggregateState>(query, CancellationToken.None); // assert foreach (var id in ids) { var(actualVersion, actualState) = states[id]; var(restoredVersion, restoredState) = queryResult.States[id]; Assert.Equal(AggregateVersion.Emtpy.Increment(), restoredVersion); Assert.Equal(actualState.ProjectId, restoredState.ProjectId); Assert.Equal(actualState.TaskState, restoredState.TaskState); } }
protected async Task <RepositoryQueryResult <TAggregateRoot> > FindByAttributeValueAsync( FindByAttributeValueStateQuery query, CancellationToken cancellationToken) { Require.NotNull(query, nameof(query)); var queryResult = await _stateStorage.FindByAttributeValueAsync <TAggregateState>(query, cancellationToken); var items = new List <TAggregateRoot>(queryResult.States.Count); foreach (var restoredState in queryResult.States) { var id = (TEntityId)Activator.CreateInstance(typeof(TEntityId), restoredState.Key); var(version, state) = restoredState.Value; items.Add(CreateAggregateInstance(id, version, state)); } return(new RepositoryQueryResult <TAggregateRoot>(items, queryResult.PaginationToken)); }